Lista de Exercícios 009: Composite
Exercício 1 : Situações para análise
Seção intitulada “Exercício 1 : Situações para análise”Analise cada situação e diga se o padrão Composite é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.
- Situação 1: um sistema de arquivos precisa tratar pastas e arquivos usando a mesma operação
obterTamanho(). - Situação 2: um módulo de autenticação só possui duas implementações independentes e nenhuma delas contém outras internamente.
- Situação 3: um menu de navegação web possui itens simples e submenus aninhados em vários níveis.
- Situação 4: um carrinho de compras guarda apenas uma lista plana de produtos sem kits, pacotes ou agrupamentos.
- Situação 5: uma plataforma de cursos organiza aulas, módulos e trilhas, permitindo que uma trilha contenha módulos e outros agrupamentos.
Exercício 2 : Código com problema
Seção intitulada “Exercício 2 : Código com problema”Leia o código abaixo, identifique o problema conceitual relacionado ao uso de estruturas hierárquicas e sugira como melhorá-lo em alto nível usando Composite.
class Produto { String nome; double preco;}
class Caixa { List<Object> itens = new ArrayList<>();}
class CalculadoraPedido { public double calcular(Object item) { if (item instanceof Produto) { return ((Produto) item).preco; }
if (item instanceof Caixa) { double total = 0; for (Object filho : ((Caixa) item).itens) { total += calcular(filho); } return total; }
return 0; }}Exercício 3 : Múltipla escolha
Seção intitulada “Exercício 3 : Múltipla escolha”Uma equipe está desenvolvendo um editor visual em que cada elemento pode ser uma forma simples ou um grupo de formas. O cliente precisa aplicar desenhar() tanto em uma única forma quanto em um grupo inteiro sem saber exatamente o tipo concreto do elemento. Qual alternativa descreve melhor a solução mais adequada?
a. Usar Adapter para converter cada forma em uma interface de desenho diferente a cada chamada.
b. Usar Composite para definir uma interface comum entre formas simples e grupos, delegando a execução pela árvore.
c. Usar Singleton para garantir que exista apenas um grupo de formas na aplicação.
d. Usar Factory Method para eliminar a necessidade de uma estrutura hierárquica no editor.
e. Usar Strategy para escolher dinamicamente a implementação de desenho para cada forma, sem criar uma hierarquia.
Exercício 4 : Implementação simples
Seção intitulada “Exercício 4 : Implementação simples”Implemente uma solução simples usando Composite para representar a estrutura de conteúdos de uma disciplina.
- Crie uma interface
ComponenteConteudocom o métodoint calcularDuracao(). - Crie uma classe folha
VideoAulacom título e duração em minutos. - Crie uma classe composite
Moduloque possa armazenar váriosComponenteConteudo. - Faça
Modulocalcular a duração total somando todos os filhos. - Apresente no
mainuma estrutura com pelo menos um módulo contendo duas videoaulas e um submódulo com três videoaulas e imprima a duração total do módulo principal.