В чем разница между агрегацией, составом и зависимостью?

В чем разница между агрегацией, составом и зависимостью?

7 ответов

Агрегация подразумевает отношения, в которых ребенок может существовать независимо от родителя. Пример: класс (родитель) и ученик (ребенок). Удалите Класс, и Студенты все еще существуют.

Композиция подразумевает отношения, в которых ребенок не может существовать независимо от родителя. Пример: Дом (родитель) и Комната (ребенок). Комнаты не существуют отдельно от дома.

Вышеупомянутые два являются формами сдерживания (следовательно, отношения родитель-ребенок).

Зависимость является более слабой формой отношений и в терминах кода указывает, что класс использует другой по параметру или типу возвращаемого значения.

Зависимость является формой ассоциации.

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

агрегирование

Car -> Tires

Tires можно снять с Car объект и установлен на другой. Кроме того, если автомобиль подведен, шины не обязательно должны быть уничтожены.

Состав

Body -> Blood Cell

Когда Body объект разрушен BloodCells быть уничтоженным с этим.

зависимость

Отношения между двумя объектами, где изменение одного может повлиять на другой.

Агрегация - разделяемая часть на целое. Часть имеет свою индивидуальность, отдельную от того, частью которой она является. Вы можете выбрать эту часть и переместить ее в другой объект. (примеры из реальной жизни: колесо -> автомобиль, кровяная клетка -> кузов)

Композиция - неразделимая часть целого. Вы не можете переместить деталь на другой объект. больше похоже на собственность. (примеры из реальной жизни: кривая -> дорога, личность -> человек, max_speed -> автомобиль, свойство объекта -> объект)

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

зависимость - чувствительна к изменениям. (количество осадков -> погода, положение головы -> положение тела)

Примечание: "Bloodcell" -> Blood"может быть"Composition", так как Blood Cell не может существовать без сущности, называемой Blood. "Blood" -> Body" может быть "Aggregation", поскольку Blood может существовать без сущности, называемой Body.

Объект, связанный с композиционными отношениями, не будет существовать вне содержащего объекта. Примерами являются Назначение и владелец (Персона) или Календарь; ТестРезультат и Пациент.

С другой стороны, объект, который агрегируется содержащим объектом, может существовать вне этого содержащего объекта. Примерами являются Дверь и Дом; Сотрудник и отдел.

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

Агрегация и состав - это термины, которые большинство людей в ОО-мире получили через UML. И UML делает очень плохую работу по определению этих терминов, как это продемонстрировали, например, Хендерсон-Селлерс и Барбье ("Что это за штука называется агрегацией?", "Формализация взаимоотношений всей части в унифицированном языке моделирования"). "). Я не думаю, что четкое определение агрегации и композиции может быть дано, если вы заинтересованы в том, чтобы быть UML-совместимым. Предлагаю вам посмотреть на цитируемые работы.

Что касается зависимости, это очень абстрактные отношения между типами (не объектами), которые могут означать почти все.

Один объект может содержать другой как часть своего атрибута.

  1. Документ содержит предложения, которые содержат слова.
  2. Компьютерная система имеет жесткий диск, оперативную память, процессор и т. Д.

Поэтому сдерживание не обязательно должно быть физическим. Например, компьютерная система имеет гарантию.

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

Другие вопросы по тегам