Руководство по синтаксису диаграмм классов PlantUML

Что такое диаграмма классов?

UML Диаграмма классовявляется основополагающим структурным чертежом объектно-ориентированного моделирования. Он визуализирует программную систему, отображая ее классы, внутренние атрибуты (поля данных), методы (функции) и структурные отношения между ними. В то время как кодовые базы могут становиться обширными и трудно читаемыми, четкая диаграмма классов предоставляет инженерам немедленную визуальную справку о том, как взаимодействуют объекты кода, наследуют поведение и управляют границами данных.

Используя VPasCode, вы можете создавать детальные макеты классов исключительно в виде обычного текста, оставляя инженерные задачи по компоновке, размерам блоков и интервалам между строками полностью нашим интегрированным облачным движкам.

Руководство по основному синтаксису: элементы и конструкции

Чтобы создавать качественные диаграммы классов, необходимо понимать три основных структурных маркера: определение тела класса, назначение модификаторов видимости членам и отображение отношений между объектами.

1. Объявление классов и членов

Вы объявляете стандартный шаблон объекта с помощью ключевого слова class . Внутри закрывающих фигурных скобок вы перечисляете свои поля и методы на отдельных строках:

2. Модификаторы видимости (управление доступом)

PlantUML отображает стандартные правила инкапсуляции объектно-ориентированного программирования (public, private, protected и package-private) с помощью простых текстовых префиксов, расположенных непосредственно перед именем поля или метода:

  • + Четкий публичный доступ (доступен любому другому классу)
  • - Строгий приватный доступ (доступен только внутри этого конкретного класса)
  • # Защищенный доступ (доступен внутри этого класса и его подклассов)
  • ~ Доступ по пакету/внутренний (доступен только внутри локального модуля кода)

3. Определение отношений между объектами

Связывание классов требует использования специфических обозначений стрелок для указания структурной зависимости или композиции вашего кода приложения:

  • Наследование / Обобщение (Является-А): Использует открытую стрелку треугольной формы, указывающую на родительский класс: Подкласс --|> РодительскийКласс
  • Реализация / Осуществление: Использует пунктирную линию с открытой треугольной стрелкой для отображения выполнения интерфейса: КонкретныйКласс ..|> IИнтерфейс
  • Композиция (строгая собственность): Использует сплошной ромб, чтобы показать, что дочерний объект не может существовать без родительского контейнера: Родитель *-- Дочерний
  • Агрегация (общая коллекция): Использует открытый ромб, чтобы показать временную связь коллекции: Отдел o-- Сотрудник

Лучшие практики для практических диаграмм классов

  • Разделяйте макеты с помощью абстрактных классов: Используйте абстрактный класс или интерфейс ключевые слова, чтобы визуально отличать ваши структурные границы от конкретных моделей баз данных.
  • Рано помечайте множественность: Всегда добавляйте числовые множественности (например, "1" или "0..*") на обоих концах стрелок отношений, чтобы явно указать ограничения данных для разработчиков.
  • Контролируйте вертикальные интервалы: Диаграммы классов могут становиться чрезвычайно высокими. Если ваш макет слишком сильно растянут по вертикали, замените двойную тире (--) на одинарную тире (-) внутри стрелок отношений, чтобы принудительно выровнять их по горизонтали.

Примеры диаграмм классов PlantUML из реального мира

Пример 1: Модель домена электронной коммерции (видимость и инкапсуляция)

Этот чертеж демонстрирует стандартные модификаторы доступа, базовые объекты данных и базовые отображения множественности данных между основными сущностями онлайн-шопинга.

@startuml
class User {
    - String userId
    - String hashedSecret
    + Boolean verifyLogin(String input)
}

class Order {
    + String orderId
    + Date timestamp
    - Double calculateTotal()
}

User "1" --> "0..*" Order : "places and owns"
@enduml

Разбор синтаксиса: Символ - префикс сохраняет чувствительные поля, такие как учетные данные, строго приватными внутри блока класса User класса, в то время как функции публичного доступа используют маркер + маркер. Строка соединения явно подчеркивает, что один пользователь может без проблем найти ноль или несколько заказов.

Пример 2: Расширенный шлюз оплаты (наследование и интерфейсы)

Этот всесторонний чертеж инженерии программного обеспечения демонстрирует, как организовать интерфейсы, циклы наследования классов и сложные композиции в единой структуре.

@startuml
interface IPaymentProcessor {
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

abstract class BaseGateway {
    # String merchantApiKey
    # String endpointUrl
    + void logTransaction(String payload)
}

class StripeGateway {
    - String stripeToken
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class PayPalGateway {
    - String paypalEmail
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class ShoppingCart {
    - List items
    + void checkout(IPaymentProcessor engine)
}

' Структурные объявления отношений
BaseGateway ..|> IPaymentProcessor
StripeGateway --|> BaseGateway
PayPalGateway --|> BaseGateway
ShoppingCart *-- IPaymentProcessor
@enduml

Разбор синтаксиса: Символ ..|> обозначение устанавливает, что абстрактный класс реализует наш основной корневой интерфейс. Линии с сплошным треугольником (--|>) чисто направляют дочерние шлюзы в их базовый родительский класс, в то время как сплошной ромб (*--) объявляет, что Корзина покупок в первую очередь владеет своим процессором платежной системы в течение жизненного цикла сеанса.

Прокрутить вверх