Guia de Sintaxe de Diagrama de Classes PlantUML

O que é um Diagrama de Classes?

Um UML Diagrama de Classesé o plano estrutural fundamental da modelagem orientada a objetos. Ele mapeia um sistema de software visualizando suas classes, seus atributos internos (campos de dados), seus métodos (funções) e as relações estruturais entre eles. Enquanto bases de código podem se tornar extensas e difíceis de interpretar, um diagrama de classes limpo fornece aos engenheiros uma referência visual imediata sobre como os objetos de código interagem, herdam comportamentos e gerenciam fronteiras de dados.

Usando VPasCode, você pode projetar layouts de classes detalhados inteiramente em texto simples, deixando a engenharia de layout, o dimensionamento de caixas e o espaçamento de linhas completamente a cargo dos nossos motores em nuvem integrados.

Guia de Sintaxe Básica: Elementos e Construções

Para escrever diagramas de classes de alta qualidade, você precisa entender três marcadores estruturais principais: definir o corpo da classe, atribuir modificadores de visibilidade aos membros e mapear as relações entre objetos.

1. Declarando Classes e Membros

Você declara um modelo padrão de objeto usando a classpalavra-chave. Dentro das chaves de fechamento, você lista seus campos e métodos em linhas separadas:

class CustomerAccount {
    String accountId
    String emailAddress
    Boolean isActive()
}

2. Modificadores de Visibilidade (Controle de Acesso)

O PlantUML mapeia as regras padrão de encapsulamento orientado a objetos (público, privado, protegido e pacote-privado) usando prefixos de texto simples logo antes do nome do campo ou método:

  • + Acesso Público claro (acessível por qualquer outra classe)
  • - Acesso Privado rigoroso (acessível apenas dentro desta classe específica)
  • # Acesso Protegido (acessível dentro desta classe e suas subclasses)
  • ~ Acesso de Pacote/Interno (acessível apenas dentro do módulo de código local)

3. Definindo Relações entre Objetos

Conectar classes exige notações específicas de setas para indicar a dependência estrutural ou composição do código da sua aplicação:

  • Herança / Generalização (É-Um): Usa uma ponta de seta triangular aberta apontando para a classe pai: SubClasse --|> ClassePai
  • Implementação / Realização: Usa uma linha pontilhada com uma triângulo aberto para mostrar a execução de uma interface: ClasseConcreta ..|> IInterface
  • Composição (Propriedade Estrita): Usa um losango sólido para mostrar que o objeto filho não pode existir sem o container pai: Pai *-- Filho
  • Agregação (Coleção Compartilhada): Usa um losango aberto para mostrar uma relação de coleção temporária: Departamento o-- Funcionário

Melhores Práticas para Mapas de Classes Práticos

  • Separe Layouts com Classes Abstratas: Use a classe abstrata ou interfacepalavras-chave para diferenciar visualmente seus limites estruturais dos modelos de banco de dados concretos.
  • Rotule Multiplicidades cedo: Sempre adicione multiplicidades numéricas (como "1" ou "0..*") em ambos os extremos das setas de relacionamento para tornar as restrições de dados explícitas para os desenvolvedores.
  • Controle o Espaçamento Vertical: Diagramas de classes podem crescer extremamente altos. Se o seu layout se estender muito verticalmente, substitua uma dupla barra (--) por uma única barra (-) dentro das setas de relacionamento para forçar uma alinhamento horizontal lado a lado.

Exemplos de Diagramas de Classes PlantUML do Mundo Real

Exemplo 1: Modelo de Domínio de E-Commerce (Visibilidade e Encapsulamento)

Este modelo demonstra modificadores de acesso padrão, objetos de dados básicos e mapeamentos básicos de multiplicidade de dados entre entidades centrais de compras online.

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

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

User "1" --> "0..*" Order : "coloca e possui"
@enduml

Análise de Sintaxe: O - prefixo mantém campos sensíveis como credenciais estritamente privados dentro do bloco da classe User classe, enquanto funções de acesso público usam o + marcador. A string de conexão destaca explicitamente que um usuário pode procurar zero ou muitos pedidos de forma contínua.

Exemplo 2: Gateway de Pagamento Avançado (Herança e Interfaces)

Este mapa abrangente de engenharia de software demonstra como organizar interfaces, ciclos de herança de classes e composições complexas dentro de um framework unificado.

@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)
}

' Declarações de relacionamento estrutural
BaseGateway ..|> IPaymentProcessor
StripeGateway --|> BaseGateway
PayPalGateway --|> BaseGateway
ShoppingCart *-- IPaymentProcessor
@enduml

Análise de Sintaxe: O ..|> notação estabelece que a classe abstrata implementa nossa interface raiz principal. As linhas sólidas triangulares (--|>) direcionam os gateways filhos de forma limpa para sua classe pai base, enquanto o losango sólido (*--) declara que um Carrinho de Compraspossui fundamentalmente seu processador de engine de pagamento durante o ciclo de vida de uma sessão.

Scroll to Top