Что такое диаграмма классов?
UML Диаграмма классовявляется основополагающим структурным чертежом объектно-ориентированного моделирования. Он визуализирует программную систему, отображая ее классы, внутренние атрибуты (поля данных), методы (функции) и структурные отношения между ними. В то время как кодовые базы могут становиться обширными и трудно читаемыми, четкая диаграмма классов предоставляет инженерам немедленную визуальную справку о том, как взаимодействуют объекты кода, наследуют поведение и управляют границами данных.
Используя VPasCode, вы можете создавать детальные макеты классов исключительно в виде обычного текста, оставляя инженерные задачи по компоновке, размерам блоков и интервалам между строками полностью нашим интегрированным облачным движкам.
Руководство по основному синтаксису: элементы и конструкции
Чтобы создавать качественные диаграммы классов, необходимо понимать три основных структурных маркера: определение тела класса, назначение модификаторов видимости членам и отображение отношений между объектами.
1. Объявление классов и членов
Вы объявляете стандартный шаблон объекта с помощью ключевого слова class . Внутри закрывающих фигурных скобок вы перечисляете свои поля и методы на отдельных строках:
class CustomerAccount {
String accountId
String emailAddress
Boolean isActive()
} 
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 
Разбор синтаксиса: Символ ..|> обозначение устанавливает, что абстрактный класс реализует наш основной корневой интерфейс. Линии с сплошным треугольником (--|>) чисто направляют дочерние шлюзы в их базовый родительский класс, в то время как сплошной ромб (*--) объявляет, что Корзина покупок в первую очередь владеет своим процессором платежной системы в течение жизненного цикла сеанса.