Has-a

редактировать

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

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

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

Подводя итог отношениям, у нас есть

  • гиперним - гипоним ( супертип-подтип) отношения между типами (классами), определяющие таксономическую иерархию, где
    • для отношения наследование : гипоним (подтип, подкласс) имеет тип-из (is-a) отношения со своим гипернимом (супертип, суперкласс);
  • холоним - мероним (целое / сущность / контейнер-часть / составной элемент / член) отношения между типами (классами), определяющие притяжательную иерархию, где
    • для отношения агрегирования (т. Е. Без отношения собственности):
      • холоним (целое) имеет отношение has-a со своим меронимом (частью),
    • для отношение состав (т.е. с правом собственности):
      • мероним (составляющий) имеет отношение часть со своим холонимом (сущностью),
    • для включение отношение:
      • мероним (член) имеет отношение со своим холонимом (контейнер );
  • отношения концепт-объект (тип-токен) ставка Ween типы (классы) и объекты (экземпляры), где
    • токен (объект) имеет отношение экземпляр-из со своим типом (классом).
Содержание
  • 1 Примеры
    • 1.1 Модель отношения сущность
    • 1.2 Диаграмма классов UML
    • 1.3 C ++
  • 2 См. Также
  • 3 Примечания
Примеры

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

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

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

Диаграмма классов 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.

См. Также
Примечания
Последняя правка сделана 2021-05-23 14:56:24
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте