🧱 Cap 15: Componentes, Estrutura Composta e Implantação
Guia Extra: Engenharia de Software e Modelagem UML • Bloco 4: Comportamento e Arquitetura
🗺️ Mapa Conceitual do Capítulo
flowchart TD
subgraph LOGICAL["Visão Lógica e de Desenvolvimento (Kruchten 4+1)"]
COMP["Diagrama de Componentes\n• Interfaces Providas (Lollipop) e Requeridas (Socket)\n• Portas de Contrato & Encapsulamento\n• Conectores de Montagem e Delegação"]
CS["Estrutura Composta (Composite Structure)\n• Partes Internas em Execução\n• Colaborações e Conectores de Papéis"]
end
subgraph PHYSICAL["Visão Física e de Implantação"]
DEP["Diagrama de Implantação\n• Nós de Hardware: «device»\n• Ambientes de Execução: «executionEnvironment»\n• Caminhos de Comunicação & Protocolos de Rede"]
ART["Artefatos Concretos («artifact»)\n• Manifestação Física: «manifest»\n• Imagens OCI, Bundles Binários, Configs"]
end
COMP -->|Delegação Estrutural| CS
COMP -->|Materializado como| ART
ART -->|Implantado em| DEP
DEP --> IAC["Infraestrutura como Código (IaC)\nDocker Compose · Kubernetes Manifests · Terraform"]
style LOGICAL fill:#ede7f6,stroke:#512da8,stroke-width:2px
style PHYSICAL fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style IAC fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
🧩 1. Diagrama de Componentes (UML 2.x)
Na especificação formal da OMG, um Componente («component») é uma unidade de software autônoma, modular e substituível que encapsula seus detalhes internos de implementação e expõe suas capacidades estritamente por meio de interfaces contratuais bem definidas.
Anatomia Notacional dos Componentes
| Elemento Notacional | Símbolo Gráfico | Semântica Arquitetural e Uso |
|---|---|---|
| Componente | Retângulo com «component» ou ícone de dois pinos |
Fronteira de encapsulamento que agrupa classes, pacotes ou submódulos. |
| Interface Provida | Círculo completo (Lollipop / pirulito) —(o |
Conjunto de operações que o componente implementa e disponibiliza aos clientes. |
| Interface Requerida | Meia-lua (Socket / soquete) —c |
Dependência obrigatória: serviços externos que o componente exige para operar. |
| Porta | Quadrado na borda do componente | Ponto formal de interação que agrupa interfaces providas e requeridas de um canal específico. |
| Conector de Montagem | Encaixe esférico (Ball-and-Socket) | Acoplamento desacoplado entre quem requer e quem fornece uma interface idêntica. |
| Conector de Delegação | Flecha direcionada interna | Encaminha mensagens recebidas na porta externa diretamente para uma classe interna. |
flowchart LR
subgraph SGB_API["«component» SGB-API"]
P1["Porta: :WebHook"]
end
subgraph PAGTO["«component» GatewayPagamento"]
P2["Porta: :BillingPort"]
end
IPagamento((IPagamentoService))
PAGTO --- IPagamento
P1 -.->|requer| IPagamento
style SGB_API fill:#ede7f6,stroke:#512da8,stroke-width:2px
style PAGTO fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
Abordagens de Modelagem: Caixa-Preta vs Caixa-Branca
- Visão Caixa-Preta (Black-Box): Foca exclusivamente nos contratos externos (interfaces expostas e dependências requeridas). O consumidor conhece apenas as assinaturas de métodos e protocolos, desconhecendo bancos de dados ou algoritmos internos.
- Visão Caixa-Branca (White-Box): Disseca o interior do componente, revelando como classes de domínio, repositórios e adaptadores de infraestrutura realizam as interfaces providas via conectores de delegação.
💡 Critério de Substitutibilidade Arquitetural: Se uma implementação de componente (ex.:
NotificacaoViaSMS) puder ser substituída por outra (NotificacaoViaPush) sem qualquer refatoração no componente cliente, o encapsulamento foi atingido com sucesso.
🧬 2. Diagrama de Estrutura Composta (Composite Structure)
Introduzido na UML 2.0, o Diagrama de Estrutura Composta descreve a configuração interna de execução de um classificador complexo (uma classe ou componente), especificando as partes (parts), portas (ports) e conectores (connectors) que atuam em tempo de execução.
Classes vs Estrutura Composta
Enquanto o Diagrama de Classes define relacionamentos universais entre tipos (ex.: “A classe Pedido conhece a classe ItemPedido”), a Estrutura Composta define instâncias no contexto circunscrito do todo:
- Partes (Parts): Propriedades representadas por retângulos com borda sólida dentro do classificador pai. Indicam instâncias que existem exclusivamente dentro daquele ciclo de vida.
- Portas de Interação: Isolam a implementação interna, impedindo acoplamento direto entre classes internas e clientes externos.
- Conectores de Colaboração: Vínculos que viabilizam a comunicação e troca de dados entre portas ou partes complementares.
flowchart TB
subgraph CirculacaoService["«component» ServicoCirculacao"]
direction TB
PortFront["Porta :ApiRest"]
Validador["validador :RegraEmprestimoValidator"]
Repo["repo :AcervoRepository"]
Notificador["notif :EmailDispatcher"]
PortFront --> Validador
Validador --> Repo
Repo --> Notificador
end
style CirculacaoService fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
🖥️ 3. Diagrama de Implantação (Deployment Diagram)
O Diagrama de Implantação mapeia a topologia física da infraestrutura de hardware e ambientes de software onde os artefatos compilados residem e executam em produção.
Elementos Estruturais da Visão Física
- Nós Computacionais (
«node»):- Dispositivo (
«device»): Hardware físico concreto com capacidade de processamento (servidores bare-metal, smartphones, balanceadores F5, leitores RFID). - Ambiente de Execução (
«executionEnvironment»): Camada de software hospedeira sobre a qual outros programas executam (ex.: GNU/Linux Alpine, OpenJDK 21, NodeJS V8, Cluster Kubernetes).
- Dispositivo (
- Artefatos Concretos (
«artifact»):- Unidades físicas de código e configuração (ex.:
sgb-api.jar,dist.js, imagem Dockersgb/api:v1.2, arquivos.env). - Relacionamento de Manifestação (
«manifest»): Liga formalmente o artefato de código compilado ao componente lógico UML que ele implementa.
- Unidades físicas de código e configuração (ex.:
- Caminhos de Comunicação (
«communicationPath»):- Arestas entre nós anotadas com o protocolo de rede subjacente e garantias operacionais (ex.:
TLS 1.3 / HTTPS:443,gRPC / HTTP/2,JDBC / TCP:5432,Kafka / SSL:9092).
- Arestas entre nós anotadas com o protocolo de rede subjacente e garantias operacionais (ex.:
flowchart TD
subgraph CloudAWS["Nuvem AWS (VPC 10.0.0.0/16)"]
subgraph PublicSubnet["Sub-rede Pública (DMZ)"]
ALB["«device»\nApplication Load Balancer"]
end
subgraph PrivateSubnet["Sub-rede Privada"]
subgraph K8s["«executionEnvironment»\nCluster EKS (Kubernetes)"]
Pod1["«executionEnvironment» Pod API\n«artifact» sgb-backend:latest"]
Pod2["«executionEnvironment» Pod Worker\n«artifact» sgb-worker:latest"]
end
subgraph RDS["«executionEnvironment»\nAWS Aurora PostgreSQL"]
DB[("Banco de Dados\nsgb_production")]
end
end
end
Client["«device»\nNavegador Web / Mobile"] -->|HTTPS:443| ALB
ALB -->|HTTP/2 gRPC| Pod1
Pod1 -->|TCP Pool:5432| DB
Pod2 -->|TCP Pool:5432| DB
style CloudAWS fill:#f5f5f5,stroke:#333,stroke-width:1px
style PublicSubnet fill:#fff3e0,stroke:#e65100,stroke-width:1px
style PrivateSubnet fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px
style K8s fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
🧭 4. Da Modelagem UML para DevOps e Infraestrutura como Código (IaC)
A modelagem de componentes e implantação fornece o blueprint conceitual direto para a automação moderna de infraestrutura:
| Conceito da Modelagem UML | Manifestação Prática em Engenharia de Produção |
|---|---|
| Componente Lógico | Microserviço autônomo com repositório próprio (Git repo / módulo monorepo). |
| Interface Provida | OpenAPI / Swagger, Protocol Buffers (.proto), GraphQL Schema. |
Artefato («artifact») |
Imagem OCI/Docker tagueada no registry, pacote Maven, binário Go ELF. |
| Nó de Execução | Kubernetes Pod, Deployment ou AWS ECS Task Definition. |
| Caminho de Comunicação | Kubernetes Service, Ingress Route, AWS VPC Peering, Istio VirtualService. |
| Ambiente de Hospedagem | Manifestos Terraform / OpenTofu provisionando instâncias EC2, RDS e redes. |
A sincronização entre o Diagrama de Implantação e os arquivos docker-compose.yml ou scripts Helm assegura que requisitos não funcionais de segurança de rede (DMZ, sub-redes privadas, segregação de banco de dados) sejam validados antes do deploy em esteiras de CI/CD.