Pular para o conteúdo

Lista de Exercícios 016: Iterator

Analise cada situação e diga se o padrão Iterator é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.

  1. Situação 1: um sistema precisa percorrer tanto uma lista de alunos quanto uma árvore de disciplinas usando a mesma lógica cliente.
  2. Situação 2: uma classe Somador recebe sempre dois números fixos e nunca trabalha com coleções.
  3. Situação 3: uma plataforma educacional precisa oferecer navegação normal e reversa pelos módulos de um curso.
  4. Situação 4: uma aplicação percorre uma única lista pequena em um único ponto do código, sem expectativa de mudança.
  5. Situação 5: um mecanismo de busca interno precisa iterar resultados paginados sem expor detalhes de paginação ao cliente.

Leia o código abaixo, identifique o problema conceitual relacionado ao acoplamento com a estrutura interna da coleção e sugira como melhorá-lo em alto nível usando Iterator.

import java.util.List;
class RelatorioCurso {
public void imprimir(List<String> modulos) {
for (int i = 0; i < modulos.size(); i++) {
System.out.println(modulos.get(i));
}
}
}

Considere na resposta os conceitos de encapsulamento, interface de iteração, estado da travessia e independência entre cliente e coleção concreta.

Uma equipe quer permitir que o mesmo conjunto de módulos de um curso seja percorrido em ordem normal, reversa e filtrada, sem alterar o código cliente que consome esses módulos. Qual alternativa descreve melhor a solução?

A. Usar Iterator para encapsular diferentes formas de travessia por uma interface comum.

B. Usar Flyweight para compartilhar os módulos entre várias turmas e reduzir memória.

C. Usar Singleton para garantir que exista apenas uma coleção de módulos no sistema.

D. Usar Facade para esconder o subsistema de matrícula sem alterar a forma de percorrer dados.

Gabarito: alternativa A.

Implemente uma solução simples usando Iterator para representar a navegação por aulas de um curso online.

  • Crie uma interface IteradorAula com métodos como temProximo() e proximo().
  • Crie uma classe CursoOnline que armazene aulas.
  • Faça CursoOnline fornecer um iterador para percorrer as aulas em ordem normal.
  • Crie um segundo iterador para percorrer em ordem inversa.
  • No main, demonstre os dois percursos sobre a mesma coleção.