Ответ 1
Я подумал, что спецификация ушла от обозначения кросс-круга. Итак, я немного бродил по спецификациям и не мог найти его в версии 2.0. Я должен сделать вывод, что спецификация 2.0 больше не поддерживает его. Хотя на самом деле это было указано в версии 1.4, я просмотрел спецификацию 2.4.1, и ее нигде не видно (на самом деле слово "anchor" возвращает 0 результатов в поиск по всему документу). Я немного поглядел вокруг, и вот что я могу собрать вместе.
Во-первых, я всегда понимал, что вложенные классы являются средством реализации композиции. Кроме того, UML пытается быть агностическим, а вложенные классы - нет. (Вы можете создавать композиции другими способами, и не все языки OO поддерживают вложенные классы.) Теперь в 1.4 объяснение включено следующее:
Если класс B присоединен к классу A "якорной" строкой с символом "привязки" в классе A, тогда класс B объявляется в пространстве имен класса A. То есть взаимосвязь между классами A и классом B это ассоциация элементов, принадлежащая пространству имен.
Ok. Теперь UML 2.0 говорит следующее:
Пакет ядра представляет собой основные концепции моделирования UML, включая классы, ассоциации и пакеты.
Вот диаграмма пакета Kernel:
Это довольно сложно, но посмотрите на абстрактный класс NamedElement в левом верхнем углу. (Класс "NamedElement" - это элемент, имеющий имя.) Обратите внимание, что из него исходит пространство имен. Теперь заметьте справа, прямо справа от вершины класса пространства имен, еще один класс NamedElement. Одна из ассоциаций имеет свойство {subsets ownedElement} на нем и составной алмаз на конце пространства имен. В конце пространства имен существует свойство {subsets owner}.
Это означает, что NamedElement, когда в ассоциации композиций с Namespace, является подмножеством пространства имен. Другими словами, связь между Namespace и NamedElement является ассоциацией, принадлежащей пространству имен, описанной в спецификации 1.4. Следовательно, отношение композиции, украшенное пространством имен и свойствами OwnElement, представляет собой вложенный (или внутренний, или внутренний, или любой другой язык вашего любимого языка кодирования).
Итак, я собираюсь сказать, что это приемлемый способ 2.0 показать вложенные классы, если вы используете нотацию композиции. Вот так:
Теперь другой способ - вставить вложенный класс внутри содержащего класса. Примеры обозначений в спецификации не показывают эту AFAICS, но они показывают ее с другими NamedElements (пакеты, компоненты и т.д.), Поэтому я не понимаю, почему вы не можете.
Однако я не вижу, что якорная нотация актуальна. Любимый сайт xmojmr (и хороший сайт тоже), www.uml-diagrams.org, должен сказать об этом:
Теперь устаревший UML 1.4.2 Спецификация определила вложенный класс как класс, объявленный в другом классе и принадлежащий пространству имен объявляющего класса. Связь между этими классами называлась "ассоциация, принадлежащая ассоциации имен"
Вложенный классификатор, например. вложенный класс, вложенный интерфейс или вложенный вариант использования могут использоваться как любой другой классификатор, но только внутри содержащего класса или интерфейса.
В UML 1.4.2 класс объявления (вложенности) и вложенный класс могут быть показаны соединенными линией с иконкой "якорь" на конце, связанной с объявляющим классом. Значок привязки - это крест внутри круга.
Спецификации UML 2.x - включая недавний UML 2.4.1 - описывают вложение классификаторов в структурированных классах без предоставления явных обозначений для вложенности. Обратите внимание, что нотация UML 1.4 "якорь" по-прежнему используется в одном примере в UML 2.4.x для пакетов как "альтернативная нотация участников" и без каких-либо других подробностей или объяснений.
Я не мог найти эту диаграмму "один пример", поэтому, возможно, она все еще существует. Но, по крайней мере, обозначение кажется устаревшим. Я либо использовал бы свойства, создаю стереотип <<nested>>
, либо помещал вложенный класс внутри класса владельца.