Имеет - Has-a

В дизайн базы данных, объектно-ориентированного программирования и дизайн (видеть объектно-ориентированный программная архитектура ), имеет (имеет или же имеет) это сочинение отношения, в которых один объект (часто называемый составным объектом или объектом-частью / составляющим / членом) «принадлежит» (является часть или член ) другой объект (называемый составным типом) и ведет себя в соответствии с правилами владения. Простыми словами, имеет отношение в объекте называется полем-членом объекта. Несколько имеет отношения будут объединяться, чтобы сформировать притяжательную иерархию.

Это должно контрастировать с это (это или же это) отношения, которые составляют таксономическую иерархию (подтип ).

Решение о том, насколько логичны отношения для объекта и его подчиненного, не всегда однозначно. имеет или же это. Путаница по поводу таких решений потребовала создания этих метаязыковых терминов. Хороший пример имеет отношения - это контейнеры в C ++ STL.

Обобщая отношения, мы имеем

  • гиперным -гипоним (супертип-подтип) отношения между типами (классами), определяющие таксономическую иерархию, где
    • для наследование отношение: гипоним (подтип, подкласс) имеет тип (это) связь со своим гипернимом (супертип, суперкласс);
  • холоним -мероним (целое / сущность / контейнер-часть / составная часть / член) отношения между типами (классами), определяющие притяжательную иерархию, где
    • для агрегирование (т.е. без права собственности) отношение:
      • холоним (целое) имеет имеет связь со своим меронимом (частью),
    • для сочинение (т.е. с правом собственности) отношение:
      • мероним (составляющая) имеет часть связь с его холонимом (сущностью),
    • для сдерживание[1] связь:
  • понятие-объект (тип-токен) отношения между типами (классами) и объектами (экземплярами), где
    • токен (объект) имеет экземпляр связь со своим типом (классом).

Примеры

Модель сущность – отношения

В базах данных отношения has-a обычно представлены в виде Модель сущность – отношения. Как вы можете видеть на диаграмме справа, учетная запись может иметь несколько символов. Это показывает, что учетная запись имеет отношения с персонажем.

Диаграмма классов UML

UML диаграмма классов
Неправильное использование состава и агрегирования

В объектно-ориентированного программирования эта связь может быть представлена ​​с помощью единого языка моделирования. Диаграмма классов. Это имеет-отношение также известно как композиция. Как видно из диаграммы классов справа, у автомобиля есть карбюратор, или автомобиль «состоит из» карбюратора. Когда алмаз окрашен в черный цвет, это означает сочинение, то есть объект на стороне, ближайшей к алмазу, состоит из другого объекта или содержит его. В то время как белый бриллиант означает агрегирование, что означает, что ближайший к алмазу объект может иметь или владеть другим объектом.

C ++

Еще один способ различать сочинение и агрегирование При моделировании реального мира необходимо учитывать относительное время жизни содержащегося в нем объекта. Например, если объект Car содержит объект Chassis, Chassis, скорее всего, не будет заменено в течение срока службы Car. У него будет такой же срок службы, как и у самого автомобиля; так что отношения - одно из сочинение. С другой стороны, если объект Car содержит набор объектов Tire, эти объекты Tire могут изнашиваться и заменяться несколько раз. Или, если Автомобиль становится непригодным для использования, некоторые Шины могут быть утилизированы и назначены другому Автомобилю. В любом случае у объектов Tire другое время жизни, чем у объекта Car; поэтому отношения являются одним из агрегирование.

Если бы кто-то создал программный класс C ++ для реализации описанных выше отношений, объект Car содержал бы полный объект Chassis в члене данных. Этот объект Chassis будет создан в конструкторе класса Car (или определен как тип данных члена данных и его свойства, назначенные в конструкторе). И поскольку он будет полностью содержащимся членом данных класса Car, Chassis объект больше не будет существовать, если объект класса Car должен быть удален.

С другой стороны, члены данных класса Car, которые указывают на объекты Tire, скорее всего, будут указателями C ++. Объекты Tire могут быть созданы и удалены извне или даже назначены элементам данных другого объекта Car. Объекты Tire будут иметь независимое время жизни, отличное от времени удаления объекта Car.

Смотрите также

Примечания