017 Java Oop Association Aggregation Composition

Association, Aggregation and Composition #

В ООП(не только в Java) помимо наследования различают ещё три связи между объектами:

  1. Ассоциация
  2. Агрегация
  3. Композиция
  4. Наследование

Агрегация - Aggregation #

Мы говорим об агрегации, когда объект может быть частью нескольких составных объектов(компонентов). В этом случае полученный объект агрегирован. Срок службы деталей может быть больше, чем срок службы агрегата.

Примером агрегации являются взаимоотношения между футбольной командой и ее игроками. Человек может играть в нескольких командах, и если команда распущена, обычно это не означает конец для ее бывших игроков. Футбольная команда - Aggregate.

Association, Aggregation, Composition

Association, Aggregation, Composition

Композиция - Composition #

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

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

Ассоциация - Association #

Отношение между классами, которые не влияют друг на друга и не являются “родственниками” называют ассоциация. Иногда слово ассоциация используют как синоним слову отношения. На мой взгляд это немного запутывает. Но Java не единственный язык OOP и реализаций отношений между объектами возможно много больше, чем определений. Потому я не претендую на последнюю инстанцию. Но в своей статье использую “Association” для “простых связей” между объектами.

Пример ассоциации. Человек(Водитель) и легковая машина. Водитель может управлять машиной. Но каждый из них живёт своей собственной жизнью и не является частью другого.

Ни в какие рамки #

Студент и университет. Какая здесь связь?

По идее не композиция. Студенты точно не являются частью университета. Это и не наследование. Простая ассоциация или агрегация? Может это такой же случай как и футбольная команда. Может универ существовать без студентов или нет? Мы понимаем, что универ наверное немного сложнее, чем футбол, и в нём есть кафедры, специальности, потоки, курсы, группы. И вот группа скорее всего агрегация. Сама группа часть кафедры, а кафедры уже часть универа.

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

Я сделал маленькую табличку, которая должна помочь разобраться:

Таблица Association, Aggregation and Composition #

-АссоциацияАгрегацияКомпозиция
Владелецнет владельцаесть владелецесть владелец
Жизненный циклсобственный цикл жизнисобственный цикл жизниЦикл жизни владельца

“Пара” примеров отношений между классами #

  1. Менеджер открывает ключ-картой дверь отдела.
  2. Java-программист работает на крупную IT-фирму
  3. Java-программист в подчинении у менеджера, как и весь его отдел.
  4. Менеджер несёт персональную ответственность за успешность проекта.
  5. Зарплата менеджера напрямую зависит от успешности проекта.

Менеджер и карта, первый пример #

Association Java

Это ассоциация. Объекты живут собственной жизнью. Объекты взаимодействуют друг с другом в одном из методов.

Java-программист работает на крупную IT-фирму #

Это ассоциация.

Java-программист в подчинении у менеджера, как и весь его отдел. #

Агрегация. Менеджер агрегировал весь отдел.

Менеджер, Проект, Зарплата 4 и 5 #

Композиция. Есть явная связь между зарплатой и проектом. Работой и проектом.

Композиция Java

Дополнительные ссылки #

  1. Association In Java – Explore the Concepts of Composition & Aggregation
  2. Understanding Association, Aggregation, and Composition
  3. Отношения между классами (объектами)

Домашнее задание #

  1. Создайте проект с Книгой, Жанром, Автором, Издательством
  2. Продумайте связи между объектами, необходимыми полями и поведением.
  3. Назовите типы связей между вашими объектами
comments powered by Disqus