📐 CAPÍTULO 09: FUNDAMENTOS DA MODELAGEM E UML
🎯 1. Objetivos de Aprendizagem & Competências
Estimativa de Dedicação: 2 horas de estudo autoguiado.
Ao final deste capítulo, você será capaz de:
- 🔹 Compreender o papel da UML (Unified Modeling Language - OMG) como linguagem visual padrão da indústria para especificação e design de sistemas.
- 🔹 Dominar o Modelo 4+1 Visões de Arquitetura de Philippe Kruchten (Lógica, Implementação, Processo, Implantação e Casos de Uso).
- 🔹 Classificar a taxonomia da UML 2.5 entre Diagramas Estruturais (estáticos) e Comportamentais (dinâmicos).
- 🔹 Construir diagramas arquiteturais profissionais utilizando a abordagem Diagrams as Code com Mermaid e Draw.io.
🏢 2. Cenário Corporativo & Estudo de Caso (TecProExpress)
Na TecProExpress, a primeira versão do sistema de Gestão de Hubs Logísticos falhou antes do deploy em produção. Cada desenvolvedor implementou as entidades de banco com nomes diferentes (Cliente, Usuario, Destinatario), gerando incompatibilidade total entre os microsserviços.
O Desafio: Como Arquiteto de Software, você deve instituir a cultura de Modeling First (Diagrams as Code). Nenhuma linha de código ou tabela relacional deve ser criada sem que a planta baixa arquitetural e as interfaces de classes tenham sido previamente modeladas e validadas pela equipe.
🧠 3. Fundamentação Teórica & Modelos Visuais
3.1. O Modelo 4+1 Visões de Philippe Kruchten
Para atender às necessidades de diferentes públicos (desenvolvedores, clientes, operadores e analistas), a arquitetura é organizada em 5 visões integradas:
flowchart TD
subgraph KRUCHTEN ["MODELO 4+1 VISÕES DE ARQUITETURA (KRUCHTEN)"]
UC["🎯 5. VISÃO DE CASOS DE USO<br>(Usuários Finais & Requisitos de Negócio)"]
V1["🧠 1. Visão Lógica<br>(Classes, Pacotes & DER)<br>Público: Desenvolvedores"]
V2["⚡ 2. Visão de Processos<br>(Threads, Concorrência & SLA)<br>Público: Integradores"]
V3["📦 3. Visão de Implementação<br>(Módulos, Bibliotecas & Git)<br>Público: Programadores"]
V4["🌐 4. Visão de Implantação<br>(Servidores, Docker, Nuvem & Redes)<br>Público: DevOps & SRE"]
UC --> V1
UC --> V2
UC --> V3
UC --> V4
end
style KRUCHTEN fill:#f8fafc,stroke:#475569
style UC fill:#fef3c7,stroke:#d97706
style V1 fill:#e0f2fe,stroke:#0284c7
style V2 fill:#ede7f6,stroke:#5e35b1
style V3 fill:#dcfce7,stroke:#16a34a
style V4 fill:#fee2e2,stroke:#ef4444
3.2. Taxonomia dos Diagramas da UML 2.5
A UML 2.5 padroniza 14 diagramas divididos em duas grandes famílias:
flowchart TD
subgraph UML ["TAXONOMIA DA UML 2.5"]
ESTRUTURA["🧱 DIAGRAMAS ESTRUTURAIS (ESTÁTICOS)<br>• Diagrama de Classes<br>• Diagrama de Componentes<br>• Diagrama de Implantação<br>• Diagrama de Pacotes<br>• Diagrama de Objetos"]
COMPORTAMENTO["⚡ DIAGRAMAS COMPORTAMENTAIS (DINÂMICOS)<br>• Diagrama de Casos de Uso<br>• Diagrama de Sequência<br>• Diagrama de Atividades<br>• Diagrama de Transição de Estados<br>• Diagrama de Comunicação"]
end
style ESTRUTURA fill:#e0f2fe,stroke:#0284c7
style COMPORTAMENTO fill:#dcfce7,stroke:#16a34a
💻 4. Aplicação Prática & Código Executável (Python 3.11+)
Implementação da planta de classes modelada em código Python com tipagem, relacionamentos estruturados e exportação Diagrams as Code (Mermaid).
📋 Pré-requisitos e Instalação
Este módulo utiliza exclusivamente recursos nativos do Python 3.11+ (dataclasses e decimal). Nenhuma instalação externa é necessária:
# Ambiente padrão Python 3.11+ (sem dependências externas)
💻 Código Completo e Autocontido (modelo_logistica_classes.py)
Crie o arquivo modelo_logistica_classes.py e insira o código abaixo integralmente:
"""
Módulo: modelo_logistica_classes.py
Domínio: Transposição de diagrama de classes UML (Kruchten 4+1) e exportação Diagrams as Code.
Stack: Python 3.11+
"""
from dataclasses import dataclass, field
from decimal import Decimal
@dataclass
class PontoParada:
id_ponto: int
endereco: str
concluido: bool = False
@dataclass
class RotaEntrega:
id_rota: str
motorista_responsavel: str
pontos: list[PontoParada] = field(default_factory=list)
quilometragem_total: Decimal = Decimal("0.0")
def adicionar_parada(self, parada: PontoParada) -> None:
self.pontos.append(parada)
def calcular_progresso(self) -> float:
if not self.pontos:
return 0.0
concluidos = sum(1 for p in self.pontos if p.concluido)
return (concluidos / len(self.pontos)) * 100.0
def gerar_mermaid_class_diagram(self) -> str:
"""Exporta a estrutura da planta lógica em notação Diagrams as Code (Mermaid)."""
return (
"classDiagram\n"
" class RotaEntrega {\n"
" +String id_rota\n"
" +String motorista_responsavel\n"
" +Decimal quilometragem_total\n"
" +adicionar_parada(PontoParada)\n"
" +calcular_progresso() float\n"
" }\n"
" class PontoParada {\n"
" +Int id_ponto\n"
" +String endereco\n"
" +Boolean concluido\n"
" }\n"
' RotaEntrega "1" *-- "many" PontoParada : contem'
)
if __name__ == "__main__":
rota = RotaEntrega("ROTA-2026-SP", "Marcos Antunes", quilometragem_total=Decimal("45.8"))
rota.adicionar_parada(PontoParada(1, "Av. Paulista, 1000", concluido=True))
rota.adicionar_parada(PontoParada(2, "Rua Augusta, 500", concluido=False))
print(f"📦 Rota: {rota.id_rota} | Motorista: {rota.motorista_responsavel}")
print(f"📊 Progresso da Rota: {rota.calcular_progresso():.1f}%")
print("\n📐 DIAGRAMA MERMAID GERADO (DIAGRAMS AS CODE):")
print(rota.gerar_mermaid_class_diagram())
🚀 Como Executar
Execute o script no terminal:
python modelo_logistica_classes.py
🖥️ Saída Esperada no Terminal
📦 Rota: ROTA-2026-SP | Motorista: Marcos Antunes
📊 Progresso da Rota: 50.0%
📐 DIAGRAMA MERMAID GERADO (DIAGRAMS AS CODE):
classDiagram
class RotaEntrega {
+String id_rota
+String motorista_responsavel
+Decimal quilometragem_total
+adicionar_parada(PontoParada)
+calcular_progresso() float
}
class PontoParada {
+Int id_ponto
+String endereco
+Boolean concluido
}
RotaEntrega "1" *-- "many" PontoParada : contem
💡 5. Checkpoint de Engenharia & Boas Práticas
- Diagrams as Code (Mermaid): Mantenha os diagramas UML dentro do próprio repositório Git em arquivos Markdown ou
.mmd. Assim, a documentação visual é versionada junto com os commits de código. - Anti-Pattern Modelagem Exaustiva (BDUF - Big Design Up Front): Não tente modelar 100% de cada atributo antes de programar. Modele a arquitetura essencial, as entidades chave e as interações críticas em ciclos iterativos.
🔗 6. Conexão com os Projetos Integradores
| Projeto Integrador | Como o conceito deste capítulo é aplicado no PI |
|---|---|
| PI-05: ParkFlow | Modelagem do diagrama estrutural de classes relacionando Setores, Vagas, Veículos e Tickets. |
| PI-10: ImobiFlow | Visão Lógica integrando Proprietários, Contratos, Faturas e Vistorias de Imóveis. |
🧪 7. Quiz de Fixação e Autoavaliação (Formative Assessment)
🧪 Quiz de Autoavaliação — Capítulo 09
🧪 Quiz de Autoavaliação — Capítulo 09
1. Qual é a principal finalidade do 'Modelo 4+1 Visões' proposto por Philippe Kruchten?
- A) Substituir o banco de dados relacional por NoSQL.
- B) Descrever a arquitetura de software a partir de múltiplas perspectivas integradas para atender a diferentes públicos (desenvolvedores, operadores, usuários e analistas).
- C) Forçar a escrita de testes manuais em planilhas Excel.
- D) Dividir o projeto em exatamente 5 semanas de desenvolvimento.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: O modelo 4+1 organiza a complexidade da arquitetura em 4 visões especializadas (Lógica, Processos, Implementação e Implantação), amarradas pela visão central de Casos de Uso.
2. Na UML 2.5, qual dos seguintes diagramas pertence à categoria de Diagramas Estruturais (Estáticos)?
- A) Diagrama de Sequência.
- B) Diagrama de Atividades.
- C) Diagrama de Classes.
- D) Diagrama de Transição de Estados.
💡 Ver Resposta e Justificativa
Resposta Correta: C
Justificativa: O Diagrama de Classes descreve a estrutura estática do sistema (classes, atributos, métodos e associações), sem representar a passagem do tempo ou mensagens dinâmicas.
3. O que define o conceito de 'Diagrams as Code' (como no Mermaid e PlantUML)?
- A) Desenhar diagramas à mão em papel sulfite.
- B) Escrever diagramas utilizando texto declarativo legível, permitindo versionamento, diff e integração contínua no Git.
- C) Usar programas pesados que exportam apenas arquivos binários proprietários.
- D) Proibir o uso de comentários no código.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: Diagrams as Code permite criar, versionar e revisar diagramas em texto plano (Markdown/Mermaid) diretamente na esteira de desenvolvimento do repositório.
🛠️ 8. Ponte para a Ação: Laboratório Prático
Coloque esta teoria em prática executando o roteiro de laboratório autoguiado:
👉 ATIVIDADE 05: CASOS DE USO (UML)
📌 9. Resumo Executivo & Key Takeaways
- UML é o Padrão da Indústria: Permite comunicação visual inequívoca entre analistas, arquitetos e desenvolvedores.
- Modelo 4+1: Estrutura o sistema nas visões Lógica, Processo, Implementação e Implantação em torno dos Casos de Uso.
- Estático vs Dinâmico: Diagramas Estruturais mostram o que o sistema é; Diagramas Comportamentais mostram o que o sistema faz ao longo do tempo.
- Diagrams as Code: Garante que a arquitetura visual seja versionada no Git lado a lado com o código-fonte.