Каковы различия между коллекциями объектов, агрегатами объектов, ассоциациями объектов и композицией объектов?
Я вижу, как используются эти термины, и я думаю, что их собственное использование может быть неправильным. Мне интересно, как именно они отличаются.
Коллекция объектов -???
Агрегация объектов -???
Ассоциация объектов -???
Состав объекта -???
Кажется, эти термины в последнее время встречаются, когда речь идет об ORM, средствах отображения данных и репозиториях. Например, Фаулер упоминает коллекции объектов здесь. Что конкретно означают эти термины, и как мне эффективно использовать их в разговоре?
2 ответа
Коллекции объектов
Это более широкий термин, чем "массивы", но включает в себя "массивы". Коллекции являются объектами сами по себе, его основная цель - хранить несколько других объектов, а также другие функции, которые зависят от каждого типа коллекции, например, порядок вставки или порядок извлечения, если дублирующиеся элементы разрешены, и так далее.
Ассоциация объектов
Это также очень общий термин, подразумевающий наличие концептуальных отношений между двумя объектами. Есть также несколько видов "ассоциаций" с более конкретными целями.
Агрегация объектов
Это ассоциация объекта, в которой объект связан с другим объектом. Они могут существовать независимо, а создание или уничтожение одного не влияет на другой, хотя некоторые операции являются результатом взаимодействия обоих объектов.
Композиция объекта
Это ассоциация объекта, в которой объект является частью другого основного объекта. Подобъект не может существовать независимо, обычно это создание или уничтожение, управление которым осуществляется главным объектом.
Замечания:
Замечания: Object Aggregation
а также Object Composition
виды Object Association
(s), но есть не единственные.
Чтобы добавить к ответу umlcat несколько примеров:
( как упомянуто здесь в этом великом сообщении)
Пример 1: Компания - это совокупность людей. Компания представляет собой состав Счетов. Когда Компания перестает вести бизнес, ее Учетные записи перестают существовать, но ее Люди продолжают существовать.
Пример 2: текстовый редактор владеет буфером (композицией). Текстовый редактор использует файл (агрегация). Когда текстовый редактор закрыт, буфер уничтожается, но сам файл не уничтожается.
Кроме того, я бы сказал, что стоит отметить, что Люди могут быть перемещены для строгого использования внутри Компании (в настоящее время в составе), если вы не заботитесь о том, чтобы они когда-либо существовали независимо от Компании. (Это означает, что ваше приложение позволяет создавать людей только из контекста компании. Однако я не думаю, что PHP позволяет вам на самом деле определять классы внутри классов. В конечном счете, вам просто нужно взглянуть на различные области использования в вашем приложении, чтобы определить, если вы используете композицию или агрегацию.)