Has-a
З Вікіпедії, безкоштовно encyclopedia
У об'єктно-орієнтованому програмуванні й проєктуванні баз даних «Has-a» (також has_a, HasA і т. ін.) — взаємозв'язок у якому один об'єкт (компонент[1]) «належить» (є частиною або членом) іншому об'єкту (композит[1]) і підкоряється правилам приналежності. Обернене відношення іноді називають «is of»[2].
Відношення has-а є відмінним від is-a, яке позначає таксономічну ієрархію (підтип[en]). Вважається що відношення has-a має слабшу зв'язність ніж «is-a» та інші переваги (див. композиція замість успадкування[en])[3].
В UML зв'язки has-a бувають трьох типів: асоціація, агрегація й композиція.[4] Асоціація — можливість просто послати повідомлення (викликати метод) іншому об'єкту. Наприклад зв'язок подружжя — асоціація. Агрегація — аналогічна асоціації, але можливі зв'язки тільки в одному напрямку. Асоціації можуть утворювати довільний напрямлений граф (тобто можливі, двонаправлені has-a зв'язки[5]) агрегації — лише дерево. Наприклад людина може мати дітей, і її діти можуть мати дітей, але мати батьків — це вже інший вид зв'язку (хоча теж можливо агрегація). Композиція — зв'язок між об'єктами, при якому час життя членів визначається часом життя складеного об'єкту. Наприклад зв'язок між людиною і рукою людини — композиція, рука сама по собі без людини не має сенсу і не функціонує.[6]