Доброго времени суток, читатели, зрители моего канала programmer's notes.
Теперь в Дзен есть Подборки. Данная статья относится к подборке
Ссылка на мой канал
Приложение к видеоуроку
Композиция в ООП
Композиция это частный случай агрегации. Композиция связь между классами, при котором объекты одного класса создаются внутри объектов другого класса и не существуют независимо.
Пример, который я привёл в видеозанятии, сводился вот к чему. Есть класс учеников. Экземплярами этого класса являются объекты - ученики. У ученика есть различные атрибуты, например ФИО.
Есть ещё один класс. Класс оценок. Есть большой соблазн сделать оценки просто набором атрибутов ученика. Однако, это было не правильно. У оценок есть свои атрибуты: значение, дата. Предмет, по которому поставлена оценка. Хотя и предмет тоже мог бы претендовать на то, чтобы стать самостоятельным классом. Так или иначе, оценка это класс. Но вот класс очень зависимый от ученика. Объект — оценка, не может существовать отдельно от объекта — ученик. Таким образом мы приходим к связи между классами, которую мы называем композицией. В программе ниже представлена эта связь.
Результат выполнения программы
Иванов 5 - Химия 3 - Физика 2 - Математика
Петров
Сидоров
Морковкина 4 - История
Васечкин 4 - Математика 4 - Математика
Самое главное, на что следует обратить внимание в программе выше, это то, что объект оценка создается внутри объекта ученик. Т.е. взяв любого ученика мы всегда можем посмотреть его оценки.
На это разговор о композиции я заканчиваю. Ниже представлен типичный рисунок со связью между двумя классами. Тип связи — композиция. Схему я нарисовал несколько упрощённо, не указав атрибуты классов и их методы.
Ну раз уж пошло такое дело, придётся мне сделать не большую статью, где я кратко расскажу о всех типах связей между классами. Для программирования это, может и не сильно нужно, но для общей подготовки программиста и особенно аналитика, крайне необходимо.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.