У об'єктно-орієнтованому програмуванні й проєктуванні баз даних «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 (en-us) . 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.

Література ред.