Разбираясь с отношениями классов обнаружил одну непонятку!
Агрегация и Ассоцияция — как выглядит в коде?!
Начнем с Композиции (или агрегацию по значению) имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено. В силу долготы жизни вложенного класса вариант реализации может быть один! В конструкторе агрегатора, инициализируется содержащийся/иеся (вложенный/вложенные) в него класс/классы . Таким образом, удаляя контейнер, удаляются и содержащийся/иеся в нем класс/ы. Все про Композицию Забыли!
Переходим к Агрегации По определению- Агрегация (или агрегацию по ссылке)- встречается, когда один класс является коллекцией или контейнером других. Причём по умолчанию, агрегацией называют агрегацию по ссылке, то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое— нет.
Таким образом в коде мы можем реализовать агрегацию как через Конструктор с параметрами, так и через Сеттеры! Обе эти реализации подходят под определение.
Но тогда возникает вопрос! А как тогда выглядит в коде — реализация Ассоциации?
Смотрим определение Ассоциации. Ассоциация показывает, что объекты одной сущности (класса) связаны с объектами другой сущности таким образом, что можно перемещаться от объектов одного класса к другому. Является общим случаем композиции и агрегации.
Тоже мы можем реализовать как через конструктор с параметрами, так и через Сеттеры! Но может быть немного удобнее через сеттеры!
Внимательный читатель скажет, что не правильно сделан акцент, его надо делать на множественность. Ведь по определению Агрегации — цитата : «коллекцией или контейнером других». Вынужден отклонить это предположение! Так как это не вписывается в N-мерную ассоциацию.
Итог рассуждений не утешительный. Нет однозначности и четкости!
Хотелось бы услышать ваши мысли и рассуждения!
Hardy
32 уровень
UML Отношения классов. Агрегация и Ассоцияция — как выглядит в коде?!
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
11 октября 2022, 01:28
такие вопросы имхо нельзя задавать без кода, либо мы абстрактно говорим об абстрактном, либо сводим к конкретике и обсуждаем конкретику.
Я всегда советую сводить все к конкретике при малейшей возможности, вот код А, вот в нем Б, вот я считаю это В, а вот другой кейс..Почему я так советую, поскольку очень часто даже на этапе формулирования вопроса можно увидеть ответ, поскольку идет конкретизация, систематизация, абстракция преобретает формы и ее можно рассмотреть.
Но даже если вопросы не исчезнут, все-равно можно вести осмысленный разговор с кем-то.
Форма передачи мысли очень важна, программисты говорят на определенном языке, и форма этого общения - код.
То есть, представь что ты хочешь донести свою мысль максимальному количеству людей, разложить все по полочкам, убрать лишнее, чтобы не мешало рассмотреть структуру, это структурирование информации, посмотреть глазами других, как они это прочитают, как говорил Онотоле "объясни мне и представь что я идиот". В процессе всего этого, пройдет переработка и осмысление материала, а то человеческий мозг любит генерировать 100500 вопросов при этом не тратя и калории на их осмысление.
Это так, мои замечания, раз уж речь зашла за однозначность и четкость, просто обращаю внимание, что эти аттрибуты сложно найти в словесном теоретизировании, даже в монографиях по Computer science все-равно будут схемки и псевдокод/код на каком-то языке.
А по существу, речь идет вообще о теории, о доктринальной мысли, о чем говорить если кто-то выделяет 2 принципа ООП, кто-то 3, а кто-то 9. Все что НЕ формализовано и не содержится в докуметации/протоколе/стандарте, по определению имеет размытые границы в той или иной степени. Хотя часто бывает, что с точки зрения компьютерных наук и програмной инженерии, все-таки четкость есть, если иметь достаточный фундамент знаний и практического опыта, чтобы это увидеть.
0
Justinian Judge в Mega City One Master
11 октября 2022, 01:34
по самому вопросу, мне нравится определение со статьи:
ways that objects can work together: association, where independent objects talk to each other, aggregation, where an object is made up of other objects that can vary, and composition, a very strong form of aggregation where the component objects are fixed.
Objects Working Together: Association, Aggregation and Composition, David Parsons
Достаточно лаконично.
И ответ на твой вопрос про ассоциацию и агрегацию дан здесь:
https://www.baeldung.com/java-composition-aggregation-association
Спойлерить не буду, а добавить и нечего, не буду забирать собой время от прочтения статьи:)
Если останутся вопросы, то пиши
+1
Hardy
11 октября 2022, 20:45
Спасибо! Статья действительно Очень интересная!
И ответ на вопрос - отличие в реализации Агрегации и Ассоциации - тоже понял!
Вся суть в пункте 4,2 : "Но подождите, как мы можем определить, означает ли ссылка агрегацию или ассоциацию?
Ну, мы не можем. Разница только логическая: является ли один из объектов частью другого или нет.
Кроме того, мы должны поддерживать ссылки вручную на обоих концах, как мы это делали с агрегацией:"
Разница в том, что колеса являются частью Машины - Агрегация.
У матери могут быть дети, но они не являются ее частью - Ассоциация !
Разница смысловая (логическая ) Дети не являются частью матери! Колеса являются частью Машины! Но по реализации кода это выглядит одинаково!
+1
Justinian Judge в Mega City One Master
11 октября 2022, 21:16
Да, хороший вопрос ты задал, я сам для себя тоже систематизировал, так что и тебе спасибо! 😀
0
Hardy
10 октября 2022, 19:16
парочка ссылок по данной теме:
Отношения между классами -
ООП Отношения объектов. Composition и Aggregation
0