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
Gerador de Fluxograma Mermaid
A partir de uma lista de transições "A → B" gera código Mermaid (flowchart TD) pronto para colar em GitHub e docs.
Gerador de Diagrama ER (Mermaid)
Gera erDiagram do Mermaid a partir de tabelas + chaves estrangeiras. Sintaxe: "Tabela: campo1, campo2 ... | FK: tabelaA -> tabelaB".
Gerador de Graph DOT (Graphviz)
Gera código DOT (Graphviz) a partir de uma lista de arestas. Suporta digrafo (->) e grafo (--). Pronto para colar em viz.js.