Звʼязки між класами (асоціація, агрегація, композиція, спадкування, залежність)
Розділ: Основи мов програмування
📌 Про що ця тема
Тут перевіряють розуміння того, як обʼєкти й класи повʼязані між собою в обʼєктно-орієнтованому програмуванні. Ключове поняття — відношення між класами: хто про кого «знає», хто кого створює й хто кому належить. Головні види: асоціація, агрегація, композиція, спадкування (наслідування) і залежність.
📖 Головне
• Асоціація — загальний двобічний або однобічний звʼязок «обʼєкт знає про інший обʼєкт». Приклад: Викладач і Студент. Обидва існують самостійно, просто взаємодіють. На UML — проста лінія.
• Агрегація — різновид асоціації «ціле–частина», де частина може існувати окремо від цілого. Приклад: Команда і Гравець — гравець лишається, навіть якщо команду розпустили. На UML — лінія з порожнім ромбом з боку цілого.
• Композиція — сильніший звʼязок «ціле–частина», де частина НЕ існує без цілого й знищується разом із ним. Приклад: Будинок і Кімната. Видалили будинок — зникли кімнати. На UML — лінія із зафарбованим ромбом.
• Спадкування (наслідування) — звʼязок «є різновидом» (is-a). Підклас отримує поля й методи батьківського класу й може їх доповнювати чи перевизначати. Приклад: Собака є Твариною. На UML — лінія з порожнім трикутником до батька.
• Залежність — найслабший, тимчасовий звʼязок: один клас використовує інший (як параметр методу, локальну змінну), але не зберігає його постійно. Зміна одного може вплинути на інший. На UML — пунктирна стрілка.
• Сила звʼязку за зростанням: залежність < асоціація < агрегація < композиція.
• Агрегація і композиція відповідають фразі «має» (has-a), спадкування — «є» (is-a).
🔢 Як це працює на прикладі
Розглянемо систему «Автомобіль».
• Автомобіль і Двигун: двигун — частина авто й без нього авто не працює, його створюють разом з авто → композиція.
• Автомобіль і Колесо: колесо можна зняти й поставити на інше авто → агрегація.
• Автомобіль і Водій: водій керує авто, обидва існують окремо → асоціація.
• Легковик і Автомобіль: легковик є автомобілем, успадковує всі властивості → спадкування.
• Метод «заправити(Заправка з)» використовує обʼєкт Заправка лише під час виклику → залежність.
🎯 Що завчити напамʼять
• is-a — спадкування; has-a — агрегація/композиція.
• Композиція: частина вмирає разом із цілим; агрегація: частина виживає.
• Порядок посилення звʼязку: залежність → асоціація → агрегація → композиція.
• UML-позначки: трикутник — спадкування, порожній ромб — агрегація, зафарбований ромб — композиція, пунктир — залежність.
⚠️ Типові помилки
• Плутають агрегацію й композицію: головний критерій — чи може частина жити без цілого. Може — агрегація, ні — композиція.
• Плутають спадкування з композицією: «є» (наслідування) проти «має» (композиція). Квадрат є фігурою, але має сторони.
• Вважають будь-який звʼязок асоціацією — не враховують, що агрегація й композиція є її окремими посиленими випадками.
• Плутають бік ромба: ромб завжди ставиться з боку «цілого», а не частини.
• Називають залежність постійним звʼязком — вона тимчасова, лише на час використання.
🧠 Перевір себе
1. Який звʼязок між класами Бібліотека і Книга, якщо книги можна переносити в іншу бібліотеку?
2. Яка головна відмінність композиції від агрегації?
3. Якому відношенню відповідає фраза «Кіт є Твариною»?
4. Який звʼязок позначають пунктирною стрілкою?
Відповіді: 1 — агрегація; 2 — у композиції частина не існує без цілого й знищується разом із ним; 3 — спадкування (is-a); 4 — залежність.