Диаграмма классов
Диаграмма классов описывает статическую структуру системы: её классы, их атрибуты и методы, а также связи между ними. Это наиболее широко используемая UML-диаграмма для документирования организации и проектирования кода. В PlantUML синтаксис близок к синтаксису языков программирования, поэтому атрибуты, методы и обозначения видимости пишутся естественно. Стрелки для связей используют тот же стиль, что и в диаграммах последовательности.- Текст на входе, диаграмма на выходе. Классы, поля и связи объявляются в несколько строк.
- Читается как код.
+,-,#— видимость,:— типы,()— методы. - Свободные аннотации. Заметки, цвета и стереотипы добавляются прямо в тексте.
Декларирующий элемент
protocol и struct: GH-1028, для exception: QA-16258, для record и dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028, for exception: QA-16258, for record and dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028; for exception: GH-1056, QA-16258; for metaclass and stereotype: GH-1159, QA-16784; for record and dataclass: GH-2232]
WARNING
This translation need to be updated. WARNING
Взаимосвязи между классами
Взаимосвязи между классами (согласно нотации UML) задаются с помощью следующих символов:
| Тип | Символ | Назначение |
| Расширение |
<|--
|
Специализация класса в иерархии |
| Реализация |
<|..
|
Реализация интерфейса классом |
| Композиция |
*--
|
Часть не может существовать без целого |
| Агрегация |
o--
|
Часть может существовать независимо от целого |
| Зависимость |
-->
|
Объект использует другой объект |
| Зависимость |
..>
|
Более слабая форма зависимости |
- есть два типа линий:
--- рисует сплошную линию..- рисует штриховую линию
- к любой стороне (или сразу к обоим сторонам) линии, соединяющей два элемента, можно добавить разные наконечники:
<- рисует заостренный наконечник стрелочки<|или^- рисует наконечник стрелочки в виде треугольника*- рисует неконечник стрелочки в виде сплошного ромбаo- рисует неконечник стрелочки в виде полого ромба#- рисует неконечник стрелочки в виде полого квадратикаx- рисует неконечник стрелочки в виде крестика}- рисует неконечник стрелочки в виде обратного треугольника+- рисует неконечник стрелочки в виде кружочка с крестиком внутри
WARNING
This translation need to be updated. WARNING
Метки на взаимосвязях
Для каждой связи можно добавить метку. Делается это с помощью добавления символа : после которого указывается текст метки.
Для добавления меток ближе к началу или концу стрелочки можно использовать двойные кавычки "" и помещать метки, обрамленные такими кавычками, перед или после стрелочки как на примере ниже:
< или > в начале или в конце метки, чтобы указать на использование одного объекта другим.
Использование не буквенных символов
Если Вы хотите использовать не буквенные ( , /, \, *, # и прочее) или специальные unicode символы в названии класса (а также других элементов), Вам необходимо выполнить следующие условия:
- Поставить кавычки
""вокруг имени элемента которое содержит не буквенные, специальные unicode символы или символы пробела. - Использовать ключевое слово
asдля того, чтобы дополнительно определить короткое ссылочное имя и по нему потом ссылться на этот элемент при определении взаимосвязей
WARNING
This translation need to be updated. WARNING
Добавление методов
Для объявления полей и методов вы можете использовать символ :. Для этого каждый раз указываете класс, затем символ :и затем имя поля или метода, который Вы хотите добавить в этот класс.
Система определяет что именно Вы добавили по типу скобок, которые Вы укажете после имени. Для поля данных это должны быть квадратные скобки [], а для метода круглые скобки ().
{}.
Синтаксис порядка описания типа/имени довольно гибок.
{field} - поле данных или {method} - метод. Они переопределяют собой типы, определяемые парсером по умолчанию.
Указание видимости
Определяя методы и поля данных, вы можете использовать символы указания видимости, приведённые в таблице ниже:
| Символ | Иконка для поля данных | Иконка для метода | Видимость |
-
|
|
|
private |
#
|
|
|
protected |
~
|
|
|
package private |
+
|
|
|
public |
skinparam classAttributeIconSize 0:
WARNING
This translation need to be updated. WARNING
Visibility on compositions and aggregations
Абстрактные и статические
Вы можете определить статические или абстрактные методы и поля данных используя модификаторы {static} и {abstract} соответственно.
Эти модификаторы могут располагаться как в начале, так и в конце строки.
Вы так же можете использовать {classifier} как замену для {static}.
Расширенное тело класса
По умолчанию, методы и поля автоматически группируются PlantUML.
Вы можете использовать разделители, чтобы определить собственный порядок полей и методов.
Можно использовать следующие разделители: -- .. == __.
Вы также можете использовать заголовки внутри разделителей:
Заметки и шаблоны
Шаблоны задаются ключевым словом class с парой символов << и >>.
Также вы можете создать и спозиционировать относительно любого класса заметку, используя ключевые слова note left of , note right of , note top of и note bottom of.
Вы также можете создать и спозиционировать заметку относительно последнего определённого класса, используя ключевые слова note left, note right, note top и note bottom.
Ключевым словом note легко создать заметку без привязки и затем привязать её используя символ ...
WARNING
This translation need to be updated. WARNING
Больше о заметках
Допускается использование некоторых HTML-тегов (также смотри синтаксис записи Creole), таких как:
<b><u><i><s>,<del>,<strike><font color="#AAAAAA">or<font color="colorName"><color:#AAAAAA>or<color:colorName><size:nn>to change font size<img src="file">or<img:file>: the file must be accessible by the filesystem
end note.
WARNING
This translation need to be updated. WARNING
Создание заметки для поля данных или метода
Можно создать и привязать заметку к полю данных или методу.
⚠ Ограничения
- Нельзя использовать
topилиbottom(реализованы толькоleftиright) - Нельзя использовать с разделителем пространства имён
::
Заметка к полю занных или методу
Заметка для разных методов с одинаковым именем
WARNING
This translation need to be updated. WARNING
Заметки на взаимосвязях
Чтобы добавить заметку на связь, сразу после определения такой связи в следующей строке разместите команду note on link.
Вы также можете использовать note left on link, note right on link, note top on link или note bottom on link для того, чтобы добавить заметку и спозиционировать её относительно последней определенной связи.
Абстрактные классы и интерфейсы
Вы можете определить класс как абстрактный, используя ключевые слова abstract
или abstract class.
Такие классы будут нарисованы курсивом.
А еще Вы можете использовать ключевые слова interface, annotation и enum.
Скрыть атрибуты, методы...
Вы можете параметризовать отображение классов с помощью команды hide/show
.
Основная команда: hide empty members. Эта
команда скроет атрибуты или методы, если они пусты.
Вместо empty members можно использовать:
empty fieldsилиempty attributesдля пустых полей,empty methodsдля пустых методов,fieldsилиattributes, которая скроет поля, даже если они описаны,methodsкоторая скроет методы, даже если они описаны,membersкоторая скроет поля иметоды, даже если они описаны,circleдля обведенного символа перед именем класса,stereotypeдля стереотипа.
hide или show
:
classдля всех классов,interfaceдля всех интерфейсов,enumдля всех перечислений,<<foo1>>для классов, стереотип которых foo1,- существующее имя класса.
show/hide для определения правил и
исключений
WARNING
This translation need to be updated. WARNING
Скрытие классов
Вы также можете использовать команду show/hide, чтобы скрывать классы.
Это может быть полезно, если Вы подключили большой файл, и хотите скрыть некоторые классы из этого файла после его включения. Сам класс и связи, которые к нему вели будут скрыты, но место, которое он занимал на экране по прежнему будет им занято.
Удаление классов
Вы можете использовать команду remove, чтобы удалять классы.
Это может быть полезно, если Вы подключили большой файл, и хотите полностью удалить некоторые классы из этого файла после его включения. В отличие от каманды hide, которая только скрывает класс при отображении его на экране (и при этом этот скрытый класс продолжает занимать на экране место), при использовании команды remove класс и его связи будут полностью удалены перед формированием изображения, как будто они даже не определялись.
Hide, Remove or Restore tagged element or wildcard
You can put $tags (using $) on elements, then remove, hide or restore components either individually or by tags.
By default, all components are displayed:
hide $tag13components:
- or
remove $tag13components:
- or
remove $tag13 and restore $tag1components:
- or
remove * and restore $tag1components:
Скрытие или Удаление классов баз связей
По умолчанию отображаются все классы:
- скрывать классы без связей при помощи команды
hide @unlinked:
- полностью удалять классы без связей при помощи команды
remove @unlinked:
Использование дженериков
Вы можете использовать угловые скобки < и > чтобы указать на использование дженериков в классе.
skinparam genericDisplay old.
Определение метки
Обычно, метка с буквой (C, I, E or A) испольуется для классов, интерфейсов, перечислений и абстрактных классов.
Но Вы можете создать свою собственную метку для класса при создании шаблона задав для неё собственную букву и цвет (используя html-код для цвета или название цвета).
Русские буквы также можно использовать.
Пакеты
Вы можете создать пакет, используя ключевое слово package, также можно дополнительно указать для него цвет фона (используя html-код для цвета или название цвета).
Обратите внимание, что пакеты могут быть вложенными.
WARNING
This translation need to be updated. WARNING
Стили пакетов
Доступны различные стили для пакетов.
Можно глобально задать стиль по умолчанию с помощью команды: skinparam packageStyle встроенныйСтильПакета, или указать стиль для каждого пакета по отдельности при помощи определения для него шаблона package имяПакета <<встроенныйСтильПакета>>.
На примере ниже можно посмотреть доступные варианты стилей для пакетов:
Пространства имён
Даже если класс располагается внутри пакета, его имя остается уникальным идентификатором для этого класса. Это значит, что у Вас не может быть двух классов в разных пакетах, но с одинаковым именем.
В этом случае, вам следует использовать пространства имен вместо пакетов.
Вы можете ссылаться на классы из других пространств имён по их полному определению. Классы без пространства имён определяются по наличию точки пред их именами.
Обратите внимание, что вы не обязаны явно создавать пространство имен: правильно определенный класс, в имени которого через точку указано пространство имен и затем его имя автоматически попадает в правильное пространство имен.
WARNING
This translation need to be updated. WARNING
Настройка создания пространств имён
Вы можете задать другой разделитель (не точку) используя команду:
set namespaceSeparator символыРазделителя.
set namespaceSeparator none.
WARNING
This translation need to be updated. WARNING
Lollipop интерфейс
Вы можете задвать интерфейсы в виде "lollipop" для классов, используя следующий синтаксис:
bar ()- foobar ()-- foofoo -() bar
Изменение направления стрелок
По умолчанию, связи между элементами задаются при помощи двух тире -- для сплошных линий или при помощи двух точек .. для пунктирных линий и ориентированны вертикально. Можно указать, что связь необходимо изобразить горизонтально, для этого необходимо использовать одиночное тире - для сплошной линии или одну точку . для штриховой линии.
left, right, up
или down внутрь стрелки:
-d- или -do- вместо полного слова -down-.
Правда злоупотреблять такой короткой записью не стоит, так как GraphViz обычно дает более хороший результат, когда такая короткая запись НЕ используется.
И наконец, можно поменять все направления местами используя ключевое слово left to right direction. Для этого можно сравнить предыдущую диаграмму с диаграммой, представленной ниже:
Ассоциация классов
Вы можете задать ассоциацию класса после того, как была задана связь между двумя классами, как в примере:
Ассоциация в одном и том же классе
Параметры отображения
Вы можете использовать команду skinparam для глобального изменения шрифтов и цветов различных элементов диаграммы.
Вы можете использовать данную команду :
- При определении диаграммы, как любую другую команду,
- При подключении файла,
- В конфигурационном файле, указанном в командной строке или в задании ANT.
Параметры отображения для шаблонов
Расширяя пример выше, можно задавать специальные параметры для определенных шаблонов (и применять эти щаблоны затем к тем или иным классам).
- `BackgroundColor_<<Foo>> Wheat`
- `skinparam stereotypeCBackgroundColor_<<Foo>> DimGray`
WARNING
This translation need to be updated. WARNING
Цветовой градиент
Можно объявить индивидуальный цвет для классов или примечаний, используя символ #.
Можно использовать как стандартные названия цветов, так и их RGB-коды в различных вариантах записи.
Так же, возможно задания градиента для фона, задав вместо одного цвета пару цветов и разделив их одним из символов градиента (разные символы отвечают за разные направления градиента):
|,/,\,-
Помощь в расположении классов
Иногда диаграмма, формируемая по умолчанию выходит не совсем удачной...
Вы можете объединять несколько классов вместе используя ключевое слово together, тогда рендер постарается расположить объединенные таким образом классы рядом друг с другом так, как если бы они находились в одном пакете.
Для этих же целей можно связать классы между собой связями и скрыть эти связи установив им соответствующее свойство hidden. Тогда рендер также постарается расположить такие связанные классы вместе (причем длинной такой скрытой связи можно регулировать расстояние между классами, а направлением связи можно регулировать взаимное расположение).
Разделение больших файлов
Иногда могут получиться очень большие файлы изображений.
Чтобы разделить создаваемое изображение на несколько файлов (страниц), Вы можете использовать команду page (hpages)x(vpages), где:
hpages- это число горизонтальных страниц,vpages- это число вертикальных страниц..
skinparam параметр значение для настроек цвета разделённых страниц, и размеров их границы (смотри пример).
Наследование и Реализация (Имплементация)
Вы можете использовать ключевые слова extends и implements для содания связей наследования и реализации (имплементации).
WARNING
This translation need to be updated. WARNING
Изменение цвета и стиля связей или стрелок (синтаксис квадратных скобочек)
Есть два разных синтаксиса для изменения цвета и стиля связей и стрелок. Возможности этого синтаксиса квадратных скобочек несколько больше, чем возможности встраиваемого синтаксиса (подробнее о нем будет ниже), так как здесь можно полностю скрывать связи, а также задавать их толщину.
Стиль линий
Можно задавать следующие стили для связей:bold - жирный, dashed - штриховой, dotted - пунктирный, hidden - скрытый, plain - непрерывный:
- пример для каждого стиля без заметок на связях:
- пример для каждого стиля с заметками на связях:
Цвет линий
Можно задавать цвет для связей:
Толщина линий
Можно задать толщину связей:
Смешивание различных парметров
Изменение цвета и стиля связей или стрелок (встраиваемый синтаксис)
Возможности этого синтаксиса немного меньше, чем синтаксиса квадратных скобочек, который был рассмотрен выше. В частности, здесь нельзя задавать толщину линий, а также нельзя полностью скрывать линии.
Вы можете изменить цвет или стиль индивидуально для каждой связи или стрелочки используя следующий встраиваемый синтаксис:
#color;line.[bold|dashed|dotted];text:color
где:
#- начало режима конфигурирования,color- цвет стрелки,;- разделитель между конфигурационными параметрами,line.type- тип линии.typeможет принимать значения:bold- жирная,dashed- штриховая,dotted- пунктирная,text:color- цвет текста заметки на линии.
Изменение цвета и стиля класса (встраиваемый синтаксис)
Вы можете изменить цвет или стиль индивидуально для каждой стрелочки используя следующие 2 варианта встраиваемого синтаксиса:
1. #color ##[style]color
где:
#color- цвет фона элемента,##[style]color- стиль отображения и цвет линий элемента.
#[color|back:color];header:color;line:color;line.[bold|dashed|dotted];text:color
где:
#- начало режима конфигурирования,colorилиback:color- основной цвет фона,;- разделитель между конфигурационными параметрами,header:color- дополнительный цвет фона для заголовка,line:color- цвет для контуров элемента,line.[type]- тип линий, из которых состоит контур элемента (typeможет принимать значения:bold- жирный,dashed- штриховой,dotted- пунктирный),text:color- цвет текста.
\, |, / или - (они отвечают за разное направление градиента). Например: header:blue/red или back:DD0000-00FFFF.
Связи от/на члены класса
Группировка стрелок, ведущих к одному элементу
Вы можете включить объединение окончания стрелок, сходящихся к одному элементу, используя команду skinparam groupInheritance X, где X - это минимальное количество стрелок, при котором будет включаться данный режим.
Установка параметра в значение 1 (без группировки)
Установка параметра в значение 2 (группировка если 2 и более)
Установка параметра в значение 3 (группировка если 3 и более)
Установка параметра в значение 4 (группировка если 4 и более)
Display JSON Data on Class or Object diagram
Simple example
Packages and Namespaces Enhancement
[From V1.2023.2+, and V1.2023.5]
Qualified associations
Minimal example
Another example
Change diagram orientation
You can change (whole) diagram orientation with:
top to bottom direction(by default)left to right direction
Top to bottom (by default)
With Graphviz (layout engine by default)
The main rule is: Nested element first, then simple element.
With Smetana (internal layout engine)
The main rule is the opposite: Simple element first, then nested element.
Left to right
With Graphviz (layout engine by default)
With Smetana (internal layout engine)
Role label to associations