Имеет - Has-a
Эта статья не цитировать любой источники.Декабрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В дизайн базы данных, объектно-ориентированного программирования и дизайн (видеть объектно-ориентированный программная архитектура ), имеет (имеет или же имеет) это сочинение отношения, в которых один объект (часто называемый составным объектом или объектом-частью / составляющим / членом) «принадлежит» (является часть или член ) другой объект (называемый составным типом) и ведет себя в соответствии с правилами владения. Простыми словами, имеет отношение в объекте называется полем-членом объекта. Несколько имеет отношения будут объединяться, чтобы сформировать притяжательную иерархию.
Это должно контрастировать с это (это или же это) отношения, которые составляют таксономическую иерархию (подтип ).
Решение о том, насколько логичны отношения для объекта и его подчиненного, не всегда однозначно. имеет или же это. Путаница по поводу таких решений потребовала создания этих метаязыковых терминов. Хороший пример имеет отношения - это контейнеры в C ++ STL.
Обобщая отношения, мы имеем
- гиперным -гипоним (супертип-подтип) отношения между типами (классами), определяющие таксономическую иерархию, где
- для наследование отношение: гипоним (подтип, подкласс) имеет тип (это) связь со своим гипернимом (супертип, суперкласс);
- холоним -мероним (целое / сущность / контейнер-часть / составная часть / член) отношения между типами (классами), определяющие притяжательную иерархию, где
- для агрегирование (т.е. без права собственности) отношение:
- холоним (целое) имеет имеет связь со своим меронимом (частью),
- для сочинение (т.е. с правом собственности) отношение:
- мероним (составляющая) имеет часть связь с его холонимом (сущностью),
- для сдерживание[1] связь:
- для агрегирование (т.е. без права собственности) отношение:
- понятие-объект (тип-токен) отношения между типами (классами) и объектами (экземплярами), где
- токен (объект) имеет экземпляр связь со своим типом (классом).
Примеры
Модель сущность – отношения
В базах данных отношения has-a обычно представлены в виде Модель сущность – отношения. Как вы можете видеть на диаграмме справа, учетная запись может иметь несколько символов. Это показывает, что учетная запись имеет отношения с персонажем.
Диаграмма классов 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.
Смотрите также
- Состав объекта
- Имеет
- Это
- Гипернимия (и супертип )
- Гипонимия (и подтип )
Примечания
- ^ Смотрите также Сдерживание (компьютерное программирование).