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

  1. 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.
  2. 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

  1. 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).
  2. Artefatos Concretos («artifact»):
    • Unidades físicas de código e configuração (ex.: sgb-api.jar, dist.js, imagem Docker sgb/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.
  3. 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).
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.