Каждый блок это класс.
Блоки разделены на 3 части:
- шапка - тут по центру полужирным написано название класса, а абстрактные классы пишутся полужирным курсивом
- в центре указаны поля, по левому краю с маленькой буквы
- внизу методы, тоже по левому краю с маленькой буквы
Перед названием поля или метода может быть указана область видимости:
+
- public-
- private#
- protected/
- derived, потомок~
- пакет
Между объектами класса могут быть следующие связи:
- Зависимость - пунктирная линия с обычной стрелкой на конце (из двух чёрточек). Означает, что изменение класса может повлиять на зависимый класс, но не наоборот.
- Ассоциация - линия с обычной стрелкой на конце (из двух чёрточек). Общий случай агрегации и композиции. Показывает, что объект одной сущности связан с объектом другой сущности так, что можно перемещаться от одной сущности к другой. Ассоциация может быть двойной.
- Агрегация - линия с белым ромбиком на конце. Объект на стороне ромбика (контейнер) хранит ассоциированные объекты. Если контейнер будет уничтожен, то его содержимое продолжить существовать.
- Композиция - линия с чёрным ромбиком на конце. Более строгий вариант агрегации, только при уничтожении контейнера его содержимое тоже будет уничтожено.
Между блоками могут быть связи:
- Наследование (обобщение) - линия со стрелочкой в виде белого треугольника на конце. Стрелка указывает на родительский класс.
- Реализация (имплементация) - пунктирная линия со стрелочкой в виде белого треугольника на конце. Стрелка указывает на интерфейс или абстрактный класс.
У отношений может быть указана мощность (кратность):
0..1
- ноль или один экземпляр, например "собака имеет или не имеет хозяина"1
- обязательно один экземпляр, например "у собаки одна мать"0..*
или*
- ноль или более экземпляров, например "у собаки могут быть, а может и не быть щенят"1..*
- один или более экземпляров, например "у собаки есть хотя бы одно место, где она спит"