Exercícios: Aula 12 - Diagrama de Componentes 📝
Entenda como o software é organizado fisicamente e como seus módulos se conectam.
1. Unidades de Software (Básico 1)
Contexto: Ao contrário das classes, que são lógicas, os componentes são físicos.
Pergunta: O que pode ser considerado um Componente no mundo real do desenvolvimento? Dê dois exemplos práticos.
2. Plug and Play (Básico 2)
Contexto: Componentes usam interfaces para se comunicar sem conhecer a implementação interna um do outro.
Pergunta: Explique a diferença visual e funcional entre uma Interface Fornecida (lollipop) e uma Interface Requerida (socket) na UML.
3. Dependências Físicas (Intermediário 1)
Contexto: Componentes raramente funcionam isolados.
Pergunta: Se o Componente A depende de uma interface que o Componente B fornece, mas o Componente B é substituído por uma nova versão, o que deve acontecer com o Componente A?
4. Mapa da Arquitetura (Intermediário 2)
Contexto: O Diagrama de Componentes é vital para o time de DevOps e Infraestrutura.
Pergunta: Como este diagrama ajuda o analista a decidir quais partes do sistema podem se tornar Microserviços independentes?
5. Desafio: Modelagem de Integração (Desafio)
Contexto: Um sistema de e-commerce possui um componente de Checkout que precisa se comunicar com um Gateway de Pagamento de terceiros através de uma API REST.
Pergunta: Como você representaria essa dependência externa em um Diagrama de Componentes? Use o conceito de interfaces para garantir que o sistema possa trocar de Gateway (ex: PayPal para Stripe) no futuro.
---
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
Respostas e explicações para os exercícios da **Aula 12**. --- ### ✅ 1. O que é um Componente? (Básico) **Resposta Sugerida:** Um componente é uma parte física e substituível do sistema que encapsula um conjunto de funções e se comunica apenas através de interfaces. Ex: Uma DLL, um arquivo JAR, um script Python ou um microserviço. --- ### ✅ 2. Lollipop e Socket (Básico) **Resposta Sugerida:** * **Provided Interface (Lollipop/Pirulito):** A interface que o componente "oferece" para os outros usarem. * **Required Interface (Socket/Tomada):** A interface que o componente "precisa" que outro forneça para funcionar. --- ### ✅ 3. Acoplamento de Componentes (Intermediário) **Explicação:** O acoplamento deve ser baseado em interfaces, não em implementações. Se o Componente A depende da interface `IPagamento`, eu posso trocar o Componente B (PayPal) pelo Componente C (Stripe) sem precisar alterar o código interno do Componente A. --- ### ✅ 4. Camadas vs Componentes (Intermediário) **Explicação:** Camadas são organizações lógicas (ex: Camada de Visão). Componentes são organizações físicas (ex: `index.html`, `main.js`). Em uma boa arquitetura, os componentes são distribuídos dentro das camadas de forma a manter a alta coesão. --- ### ✅ 5. Desafio: Design de API (Desafio) **Resolução Sugerida:**graph LR
App[Mobile App] -- IAuth --> API[Gateway API]
API -- IOrder --> Srv[Serviço Pedidos]
Srv -- IPay --> Gateway[Gateway Externo]
style API fill:#e1f5fe
style Srv fill:#fff3e0 ---