Найти тему
programmer's notes (python and more)

ООП на Python. Композиция. Приложение к видео 16

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Теперь в Дзен есть Подборки. Данная статья относится к подборке

ООП в Python | programmer's notes | Дзен

Ссылка на мой канал

programmer's notes

Приложение к видеоуроку

Композиция в ООП

Композиция это частный случай агрегации. Композиция связь между классами, при котором объекты одного класса создаются внутри объектов другого класса и не существуют независимо.

Пример, который я привёл в видеозанятии, сводился вот к чему. Есть класс учеников. Экземплярами этого класса являются объекты - ученики. У ученика есть различные атрибуты, например ФИО.

Есть ещё один класс. Класс оценок. Есть большой соблазн сделать оценки просто набором атрибутов ученика. Однако, это было не правильно. У оценок есть свои атрибуты: значение, дата. Предмет, по которому поставлена оценка. Хотя и предмет тоже мог бы претендовать на то, чтобы стать самостоятельным классом. Так или иначе, оценка это класс. Но вот класс очень зависимый от ученика. Объект — оценка, не может существовать отдельно от объекта — ученик. Таким образом мы приходим к связи между классами, которую мы называем композицией. В программе ниже представлена эта связь.

Текст программы см. ниже
Текст программы см. ниже
primer39.py

Результат выполнения программы

Иванов 5 - Химия 3 - Физика 2 - Математика  
Петров  
Сидоров  
Морковкина 4 - История  
Васечкин 4 - Математика 4 - Математика

Самое главное, на что следует обратить внимание в программе выше, это то, что объект оценка создается внутри объекта ученик. Т.е. взяв любого ученика мы всегда можем посмотреть его оценки.

На это разговор о композиции я заканчиваю. Ниже представлен типичный рисунок со связью между двумя классами. Тип связи — композиция. Схему я нарисовал несколько упрощённо, не указав атрибуты классов и их методы.

Вот как на UML-диаграмме может быть представлена связь "композиция". Несколько упрощённо, конечно
Вот как на UML-диаграмме может быть представлена связь "композиция". Несколько упрощённо, конечно

Ну раз уж пошло такое дело, придётся мне сделать не большую статью, где я кратко расскажу о всех типах связей между классами. Для программирования это, может и не сильно нужно, но для общей подготовки программиста и особенно аналитика, крайне необходимо.

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Программа корректна, я вас уверяю, но лучше её не запускать.
Программа корректна, я вас уверяю, но лучше её не запускать.