Диаграмма классов в UML

Каждый блок это класс.

Блоки разделены на 3 части:

  • шапка - тут по центру полужирным написано название класса, а абстрактные классы пишутся полужирным курсивом
  • в центре указаны поля, по левому краю с маленькой буквы
  • внизу методы, тоже по левому краю с маленькой буквы

Перед названием поля или метода может быть указана область видимости:

  • + - public
  • - - private
  • # - protected
  • / - derived, потомок
  • ~ - пакет

Между объектами класса могут быть следующие связи:

  • Зависимость - пунктирная линия с обычной стрелкой на конце (из двух чёрточек). Означает, что изменение класса может повлиять на зависимый класс, но не наоборот.
  • Ассоциация - линия с обычной стрелкой на конце (из двух чёрточек). Общий случай агрегации и композиции. Показывает, что объект одной сущности связан с объектом другой сущности так, что можно перемещаться от одной сущности к другой. Ассоциация может быть двойной.
  • Агрегация - линия с белым ромбиком на конце. Объект на стороне ромбика (контейнер) хранит ассоциированные объекты. Если контейнер будет уничтожен, то его содержимое продолжить существовать.
  • Композиция - линия с чёрным ромбиком на конце. Более строгий вариант агрегации, только при уничтожении контейнера его содержимое тоже будет уничтожено.

Между блоками могут быть связи:

  • Наследование (обобщение) - линия со стрелочкой в виде белого треугольника на конце. Стрелка указывает на родительский класс.
  • Реализация (имплементация) - пунктирная линия со стрелочкой в виде белого треугольника на конце. Стрелка указывает на интерфейс или абстрактный класс.

У отношений может быть указана мощность (кратность):

  • 0..1 - ноль или один экземпляр, например "собака имеет или не имеет хозяина"
  • 1 - обязательно один экземпляр, например "у собаки одна мать"
  • 0..* или * - ноль или более экземпляров, например "у собаки могут быть, а может и не быть щенят"
  • 1..* - один или более экземпляров, например "у собаки есть хотя бы одно место, где она спит"