У меня из-за нее изучение UML остановилось и закралась крамольная мысль: UML сознательно основан на противоречивых концепциях. Весь вопрос состоит в бинарной ассоциации класса с самим собой. Чем больше я думаю над этим, тем менее понятным вопрос становится. Пока додумался до того, что ассоциация на одном классе отличается от ассоциации между двумя классами как небо от земли.
Я изучаю UML по книге Рамбо, Блаха "UML 2.0 Объектно-ориентированное моделирование и разработка" 2е издание. В ней авторам все настолько ясно с ассоциациями на одном классе, что они вообще на этом не запинаются и рассказывают походя, как о само собой разумеющеемся понятии, просто как об обычной ассоциации. Я же не могу никак ответить на простые вопросы касающиеся таких самоассоциаций. Для ассоциаций между двумя классами я нахожу ответы на все эти вопросы без проблем, а для самоассоциаций не могу. Вопросы такие:
1) Авторы книги прямо указывают: "Имена полюсов ассоциации обязательны для установления ассоциаций между двумя объектами одного и того же класса". Значит каждый объект участвующий в ассоциации должен иметь 2 полюса? или 1? если 1 то какой именно, если один обозначить именем "A", а другой именем "В"? или может 0 полюсов?
2) Возможно ли представить (нарисовать) структуру самоассоциации с кратностями 1-2
3) Если моделировать дерево самоассоциацией, то объекты верхнего уровня будут иметь 1 полюс (скажем для определенности "А"), объекты в середине иерархии будут иметь 2 полюса ("A" и "B"), а объекты листья только полюс "В", а впрочем, может полюс "A", а не "В". Это нормально? Так ли это?
4) Обязательно ли ставить кратность 0 с одного полюса самоассоциации, чтобы объект мог иметь 1 полюс для связи? А если переместить 0 в кратности с одного полюса на другой что изменится?
5) Я не могу решить упражнение 3.1 из книги (которое позиционируется как легкое). У меня получается 2 разных ответа в предположении, что добавляя к кратности 0 можно уменьшать число полюсов у объекта. И 2 других варианта ответа, в предположении, что не указывая 0 можно у некоторых объектов подразумевать 1 только полюс и 2 у других. Обратной проверкой убеждаюсь, что все 4 варианта ответов приводят к правильному воссозданию исходной картинки этого упражнения. Значит все решения верные.
Шиза в общем. Рисунок с задачей прилагается.
6) Может это не класс имеет полюс ассоциации, а ассоциация связывает свой полюс с классом (связь соответственно с объектом), однако все вопросы остаются, достаточно поменять слова.
7) Как пользуются такими самоассоциациями люди ведущие UML проект? Что имеют ввиду когда указывают кратности? Какие объекты хорошо подходят под такое понятие?
Вообще, существует ли точное понятие этих штук или нет и неоднозначности нельзя избежать? Если нельзя, зачем применять? Если можно, то как?
в моем тексте: самоассоциация == бинарная ассоциация на одном классе