🔗 Interações Dinâmicas (Relacionamentos)
Os componentes da nossa nuvem não vivem em silos. Se um "Caso de Uso" não se comunicar com nenhum Ator, ele é um caso de "Código Lixo/Morto".
Segundo Melo (2004), a UML usa associações em setas e pontilhados para gerenciar funções compostas dentro de componentes de software sem duplicar código.
🏗️ Padrões de Componentização
A UML provê maneiras nativas de representar reuso de código no back-end (Para garantir o princípio do "Don't Repeat Yourself" ou DRY):
| Estereótipo (Tag) | Execução na Vida Real e Padrão UML |
|---|---|
| 🤝 Associação Reta | Uma linha simples conectando a Entidade Ator Externa até qual Funcionalidade (Caso de Uso) ele pode chamar. |
| ➕ Include (Ação Obrigatória) | Aponta de uma rota para outra Função. Antes de Salvar o Pedido no Banco (Processo A), o sistema deve rodar um Script de Checar Estoque (Processo B). O Fluxo B é injetado (include) mandatoriamente no fluxo do Pedido A. |
| 🛡️ Extend (Caminho Alternativo) | Aponta o contrário do Include. Somente SE o Pedido foi rejeitado pelo cartão (Condicional), uma rota Opcional de "Acionar Cobrança por Suporte" se estenderá (extend) para aquele momento. |
graph LR
A["Usuário Mobile"] --- C1(["Finalizar Compra"])
C1 -.->|"<<include>> (Sempre Executa)"| IN(["Validar Cartão de Crédito"])
EX(["Calcular Imposto Internacional"]) -.->|"<<extend>> (Se mora Fora)"| C1
style C1 fill:#e3f2fd,stroke:#1e88e5
style IN fill:#c8e6c9,stroke:#4caf50
style EX fill:#fff3e0,stroke:#ff9800