2015-03-20 5 views
3

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

Обьект объекта - ???

Агрегирование объектов - ???

Ассоциация объектов - ???

Объект Композиция - ???

Кажется, что эти термины появляются в последнее время, когда речь идет об ORM, Data-mappers и Repositories. Например, Фаулер упоминает object collections here. Что конкретно обозначают эти термины, и как следует эффективно использовать их в разговоре?

ответ

1

Коллекции объектов

Является более широкий термин, чем "массивы", но включает в себя "массивы". Коллекции - это объекты сами по себе, основная цель состоит в том, чтобы хранить несколько других объектов, а также другие функции, которые зависят от каждого типа коллекции, такой порядок вставки или порядок извлечения, если разрешены дублированные элементы и т. Д.

Ассоциация Объект

Есть также очень общий термин, это означает, существует концептуальная связь между 2 объектами. Существуют также несколько видов «ассоциаций» с более конкретными целями.

Aggregation Объект

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

Состав объекта

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

Примечание:

Примечание: Object Aggregation и Object Composition являются виды Object Association (ов), но, есть не единственные.

+0

А, «композиция объекта» была недостающим куском! Теперь все имеет смысл, спасибо. Я также нашел эти 2 хороших примера: ** Пример 1: ** * Компания является совокупностью людей. Компания является составом Счетов. Когда Компания перестает вести дела, ее счета перестают существовать, но ее Люди продолжают существовать. * ** Пример 2: ** * Текстовый редактор владеет буфером (композицией). Текстовый редактор использует файл (агрегация). Когда текстовый редактор закрыт, буфер уничтожается, но сам файл не уничтожается. * – prograhammer

+0

Примеры в комментарии выше из [здесь] (http://programmers.stackexchange.com/questions/61376/aggregation-vs-composition) – prograhammer

+0

Кроме того, стоит отметить, что ** Люди ** могут быть перемещены только для использования внутри ** Company ** (теперь состав), если вы не заботитесь о них, когда-либо существовавших отдельно. (Это означает, что ваше приложение допускает создание людей из контекста компании. Я не думаю, что PHP позволяет фактически определять классы внутри классов.) – prograhammer

0

Чтобы добавить ответ umlcat, в некоторых примерах:

(as mentioned here in this great post)
example1: A Company представляет собой совокупность людей. Компания является составом Счетов. Когда Компания перестает вести дела, ее Счета перестают существовать, но ее Люди продолжают существовать.
Пример 2: Текстовый редактор владеет буфером (композицией). Текстовый редактор использует файл (агрегация). Когда текстовый редактор закрыт, буфер уничтожается, но сам файл не уничтожается.

Кроме того, я бы сказал, что стоит обратить внимание на то, что люди могут быть перемещены строго для использования внутри Компании (теперь )), если вы не заботитесь о них, когда-либо существовавших независимо от компании. (Это означает, что ваше приложение разрешает создание людей из контекста компании. Я не думаю, что PHP позволяет вам фактически определять классы внутри классов. В конечном итоге вам просто нужно будет изучить различные области использования вашего приложения, чтобы определить если вы используете состав или агрегацию.)