Has-a — Вікіпедія

У об'єктно-орієнтованому програмуванні й проєктуванні баз даних «Has-a» (також has_a, HasA і т. ін.) — взаємозв'язок у якому один об'єкт (компонент[1]) «належить» (є частиною або членом) іншому об'єкту (композиту[1]) і підкоряється правилам приналежності. Обернене відношення іноді називають «is of»[2].

Відношення has-а є відмінним від is-a, яке позначає таксономічну ієрархію (підтип[en]). Вважається що відношення has-a має слабшу зв'язність ніж «is-a» та інші переваги (див. композиція замість успадкування[en])[3].

Види Has-a зв'язків в UML діаграмах

В UML зв'язки has-a бувають трьох типів: асоціація, агрегація й композиція.[4]

  • Асоціація — можливість просто послати повідомлення іншому об'єкту (викликати його метод). Наприклад зв'язок подружжя — асоціація.
  • Агрегація — аналогічна асоціації, але можливі зв'язки тільки в одному напрямку. Асоціації можуть утворювати довільний напрямлений граф (тобто можливі двонаправлені has-a зв'язки[5]) агрегації — лише дерево. Наприклад людина може мати дітей, і її діти можуть мати дітей, але мати батьків — це вже інший вид зв'язку (хоча теж можливо агрегація). Або рюкзак може мати (містити) книжки, але книжки не можуть мати рюкзака, вони мають хіба що сторінки і т.д.
  • Композиція — зв'язок між об'єктами, при якому час життя членів визначається часом життя складеного об'єкту. Наприклад зв'язок між людиною і рукою людини — композиція, рука сама по собі без людини не має сенсу і не функціонує.[6]
Модель «сутність — зв'язок»

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. а б Python, Real. Inheritance and Composition: A Python OOP Guide – Real Python. realpython.com (англ.). Процитовано 17 вересня 2023.
  2. Is A and Has A relationships. www.ibm.com (амер.). IBM. Процитовано 17 вересня 2023.
  3. Composition vs Inheritance. www.digitalocean.com (англ.). DigitalOcean. Процитовано 17 вересня 2023.
  4. Martin, Robert C. (ootips) Association, Aggregation and Composition. ootips.org. Процитовано 17 вересня 2023.
  5. Mutual Hasa Relationship. WikiWikiWeb. Процитовано 17 вересня 2023.
  6. Thakur, Aniket (13 листопада 2014). Open Source For Geeks: Difference between Association, Aggregation and Composition in UML, Java and Object Oriented Programming. Open Source For Geeks. Процитовано 17 вересня 2023.

Література

[ред. | ред. код]