У меня из-за нее изучение 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 проект? Что имеют ввиду когда указывают кратности? Какие объекты хорошо подходят под такое понятие?
![Крутой 8)](http://www.uml2.ru/forum/Smileys/classic/cool.gif)
Вообще, существует ли точное понятие этих штук или нет и неоднозначности нельзя избежать? Если нельзя, зачем применять? Если можно, то как?
в моем тексте: самоассоциация == бинарная ассоциация на одном классе