Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — CESPE / CEBRASPE 2025
Engenharia de Software›Padrões de Projeto (Engenharia de Software)
Código
ce417749
Banca
CESPE / CEBRASPE
Órgão
PC DF
Ano
2025
Cargo
GAAPC ( )
A respeito do padrão arquitetural MVVM (Model, View e View-Model) e dos padrões de projetos GoF, julgue o item a seguir.
O padrão Iterator oferece uma forma sequencial de acessar os elementos de uma coleção de objetos, expondo a estrutura interna dessa coleção.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Padrão Iterator: acesso sequencial sem expor a estrutura interna
Gabarito: Errado (E). O padrão Iterator oferece uma forma sequencial de acessar os elementos de uma coleção, mas sem expor sua estrutura interna — é exatamente o oposto do que afirma o enunciado. O objetivo central do Iterator é justamente encapsular a estrutura interna da coleção, permitindo percorrê-la sem que o cliente conheça como os elementos estão armazenados (GoF).
O padrão Iterator é um dos 23 padrões de projeto clássicos catalogados no livro Design Patterns (GoF — Gang of Four), pertencente à família dos padrões comportamentais. Ele resolve um problema recorrente: como percorrer os elementos de uma coleção (lista, árvore, pilha, etc.) sem acoplar o código cliente à estrutura interna dessa coleção. A solução é criar um objeto iterador que encapsula a lógica de navegação, expondo apenas operações como primeiro(), próximo(), atual() e terminou().
A grande sacada do Iterator é o princípio do encapsulamento: o cliente interage com a coleção apenas através da interface do iterador, sem saber se os elementos estão em um array contíguo, em uma lista encadeada, em uma árvore binária ou em qualquer outra estrutura. Isso permite que a coleção mude sua implementação interna sem afetar o código que a percorre. Por exemplo, se uma aplicação usa uma lista para armazenar objetos e depois precisa trocá-la por uma árvore por questões de desempenho, o código que itera sobre os elementos permanece inalterado, desde que o iterador continue oferecendo a mesma interface.
A pegadinha da banca está exatamente na segunda parte da afirmação: "expondo a estrutura interna dessa coleção". O Iterator faz o oposto — ele esconde a estrutura interna. Essa é uma inversão clássica que o CESPE explora: o candidato que conhece a primeira parte da definição (acesso sequencial) pode ser induzido a aceitar a segunda parte (exposição da estrutura) sem perceber a contradição com o princípio do encapsulamento.
Para fixar: o Iterator é sobre acesso sequencial (correto) e encapsulamento da estrutura (o que o enunciado erra ao dizer "expondo"). A palavra-chave que decide a questão é "expondo" — se fosse "sem expor" ou "ocultando", a afirmação estaria correta. Guarde essa fronteira: é exatamente nela que a banca arma a pegadinha.
Padrão Iterator (GoF): Família (Comportamental); Objetivo (Acesso sequencial aos elementos, Não expõe a estrutura interna, Encapsula a navegação); Interface típica (primeiro(), próximo(), atual(), terminou()); Benefício (Cliente não conhece a implementação, Troca de estrutura sem afetar o código)
Item — ❌ Errado
O enunciado afirma que o Iterator "expõe a estrutura interna" da coleção, o que é incorreto. O padrão Iterator tem como propósito encapsular a estrutura interna, fornecendo uma interface uniforme para percorrer os elementos sem expor detalhes de implementação. A primeira parte da frase ("oferece uma forma sequencial de acessar os elementos") está correta, mas a segunda parte ("expondo a estrutura interna") inverte o princípio fundamental do padrão. O correto seria: "sem expor a estrutura interna" ou "ocultando a estrutura interna".
NÃO CAIA NESSA!
A banca inverte o princípio do encapsulamento: o Iterator esconde a estrutura interna, não a expõe. O candidato que conhece a definição pela metade (acesso sequencial) pode aceitar a segunda parte sem perceber a contradição. Lembre-se: o Iterator é sobre acesso sequencial + encapsulamento — se a frase disser "expondo", está errada.