Может ли несколько объектов собирать, знакомить или создавать один и тот же объект? - PullRequest
0 голосов
/ 06 июня 2019

Design Pattern от Гамма и др. Сказал

Рассмотрим различие между агрегацией объектов и знакомством и то, как по-разному они проявляются во время компиляции и выполнения.

Агрегация подразумевает, что один объект владеет другим объектом или отвечает за него. Обычно мы говорим об объекте, имеющем или являющемся частью другого объекта. Агрегация подразумевает, что совокупный объект и его владелец имеют идентичные времена жизни.

Знакомство подразумевает, что объект просто знает о другом объекте. Иногда знакомство называется «ассоциация» или «использование» отношения. Знакомые объекты могут запрашивать операции друг у друга, но они не отвечают друг за друга. Знакомство является более слабой взаимосвязью, чем агрегация, и предполагает гораздо более слабую связь между объектами.

Еще одна полезная вещь, которую нужно показать, - это то, какие классы создают экземпляры других. Мы называем это «создает» отношения. Стрелка указывает на класс, который создан. На рисунке c

enter image description here

Может ли несколько объектов объединять один и тот же объект? Если объект A агрегатный объект B, может ли другой объект сказать, что C также агрегирует B?

Может ли несколько объектов знакомить один и тот же объект? Если объект A знаком с объектом B, может ли другой объект сказать, что C также знаком с B?

Может ли несколько объектов создавать один и тот же объект?

1 Ответ

2 голосов
/ 06 июня 2019

Насколько я понимаю, и общие определения, которые я знаю, Композиция - это ассоциация, в которой время жизни связанных объектов связано с временем жизни владельца. Агрегация описывает ассоциацию, в которой время жизни агрегированных объектов не зависит от времени жизни владельца. Знакомство совпадает с ассоциацией .

В соответствии с этим определением объект может быть объединен несколькими владельцами в агрегированную ассоциацию.Если ассоциация имеет тип состав , то совместное использование по определению не предназначено.

Ассоциация или знакомство являются более общим описанием взаимосвязи междуобъекты.Так что это зависит от деталей отношений, если один объект может иметь несколько владельцев.Но, будучи общим, это вообще возможно.

Википедия Состав и агрегация объектов

Но я думаю, что существует другое определение, которое было введено Мартином Фаулером.Это тот, кого вы цитировали.Для меня это менее известное определение, так как то, которое я представил, определено в правилах UML, которые широко распространены и стали стандартом де-факто.Согласно определению М. Фаулера агрегация равна композиция , тогда как знакомство соответствует определению UML агрегация .

Таким образом, ответ на ваши вопросы, глядя глазами М. Фаулера: правила композиции применяются, когда речь идет о агрегации Фаулера , что означает наличие нескольких владельцевне может агрегировать одни и те же объекты и с точки зрения знакомства применяются правила в определенной в UML ассоциации агрегация , означающие, что несколько владельцев могут знакомить одни и те же объектынезависимо (от их времени жизни) .0

И, конечно, вы можете создавать экземпляры объекта так часто, как вы хотите, или как память доступна и где вы хотите.Объект или класс является только определением, тогда как экземпляр (в результате создания экземпляра) является фактически выделенной областью памяти для хранения данных объекта (например, полей).Определение класса описывает макет этой выделенной области памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...