1001Ferramentas
🧱Geradores

Gerador de Classe UML (Mermaid)

Constrói um diagrama de classes Mermaid (classDiagram) a partir de uma lista de classes com atributos e métodos.


  

Diagramas de classes UML: a estrutura estática de um sistema orientado a objetos

Um diagrama de classes é a visão canônica em UML da estrutura estática de um design orientado a objetos. Mostra as classes que compõem o sistema, os atributos e operações de cada uma e os relacionamentos que as conectam. Diagramas de classes antecedem a UML — vêm das notações OMT, Booch e OOSE do início dos anos 1990 — e foram unificados na UML 1.0 em 1997. O diagrama que você desenha hoje, em UML 2.5.1, parece substancialmente o mesmo que seus predecessores desenhavam há trinta anos.

Diferente do diagrama de sequência (temporal) ou do diagrama de estados (comportamental), o diagrama de classes é atemporal: descreve a forma dos objetos e como estão ligados, não o que fazem ou em que ordem. Por isso é a visão de cavalo de batalha para documentar modelos de domínio, projetar APIs e explicar padrões.

Anatomia de uma classe

Uma classe é desenhada como um retângulo com três compartimentos empilhados:

┌──────────────────────┐
│       Conta          │   ← nome (itálico = abstrata)
├──────────────────────┤
│ - saldo: Decimal     │   ← atributos
│ + titular: Usuario   │
├──────────────────────┤
│ + depositar(x)       │   ← operações (métodos)
│ + sacar(x): bool     │
│ + getSaldo(): Dec    │
└──────────────────────┘

Prefixos de visibilidade: + público, - privado, # protegido, ~ package. Cada atributo é tipado como nome: Tipo; cada operação como nome(arg: Tipo): TipoRetorno. Sublinhado marca um membro como estático; itálico marca uma classe ou operação como abstrata. Estereótipos como <<interface>>, <<abstract>> e <<enumeration>> aparecem acima do nome para refinar o tipo de elemento.

Relacionamentos: as seis linhas que conectam classes

  • Associação — linha sólida simples. "Um Pedido usa um Cliente." A ligação estrutural mais fraca.
  • Agregação — linha sólida com losango vazado no todo. "Um Time tem Jogadores (has-a fraco)." As partes sobrevivem ao todo.
  • Composição — linha sólida com losango preenchido. "Uma Casa é composta por Cômodos (part-of forte)." As partes morrem com o todo.
  • Herança / Generalização — linha sólida com triângulo vazado no pai. "Um Cachorro é-um Animal."
  • Realização / Implementação — linha tracejada com triângulo vazado. "ArrayList implementa List."
  • Dependência — seta tracejada. "ServicoPedido depende de EnviadorEmail (uso transitório)."

Multiplicidade rotula cada ponta com uma cardinalidade: 1, 0..1, * (zero ou mais), 1..* (um ou mais), 2..5.

Sintaxe Mermaid classDiagram

classDiagram
  class Animal {
    +String nome
    +int idade
    +comer()
    +dormir()
  }
  class Cachorro {
    +String raca
    +latir()
  }
  class Dono {
    +String nome
  }
  Animal <|-- Cachorro          : herança
  Animal "1" o-- "*" Dono       : agregação
  <<interface>> Comparavel
  Animal ..|> Comparavel        : realização

O Mermaid suporta tipos genéricos com sintaxe de til: class List~T~. O parser classDiagram também aceita -- para associação, *-- para composição, ..> para dependência.

Boa prática: qual o tamanho ideal de um diagrama?

A ciência cognitiva oferece um limite firme: a clássica regra "7 ± 2" de George Miller diz que a memória de trabalho retém de cinco a nove pedaços. Mire em sete classes por diagrama, nunca mais que nove. Se o sistema tem cinquenta classes, faça cinco diagramas agrupados por package ou módulo, cada um focado em um padrão ou feature — Composite para o subsistema de renderização, Strategy para faturamento, Observer para o event bus. Mostre apenas os relacionamentos relevantes para a história; um diagrama exaustivo é ilegível. Anote em cada diagrama o padrão de design que ele ilustra.

Ferramentas, geração de código e engenharia reversa

Diagrams-as-code: Mermaid, PlantUML. Editores visuais: StarUML, Visual Paradigm, Lucidchart, draw.io. O IntelliJ IDEA Ultimate traz diagramas UML nativos derivados diretamente do bytecode compilado. Os dois fluxos complementares são geração de código (UML → código scaffold, popular em ferramentas MDA) e engenharia reversa (código → UML, útil ao entrar em um projeto legado).

FAQ

A UML não foi substituída por algo mais moderno? Para arquitetura de alto nível, muitos times migraram para o C4 Model (Context, Container, Component, Code) de Simon Brown, ou para arc42. Para design em nível de classe, o diagrama de classes UML continua sendo a lingua franca — toda IDE séria entende.

Posso mostrar tipos genéricos / parametrizados? Sim — o Mermaid usa ~T~: class Repository~T~. A UML pura desenha um pequeno retângulo de canto tracejado no topo-direito da classe com o nome do parâmetro.

Meu diagrama tem linhas demais. E agora? Quebre. Mova o subconjunto barulhento para um diagrama focado e substitua as conexões no diagrama pai por uma única dependência para o package daquele subsistema.

Qual a diferença entre agregação e composição? Tempo de vida. Com composição, apagar o todo apaga as partes (Casa → Cômodos). Com agregação, as partes podem sobreviver ao todo (Time → Jogadores).

Devo incluir métodos privados? Apenas em diagramas voltados para implementadores. Diagramas em nível de arquitetura ficam só com membros públicos e estereótipos.

Ferramentas Relacionadas