Pular para o conteúdo principal

Questão de Engenharia de Software — Orientação a Objetos — FCC 2017

Engenharia de SoftwareOrientação a Objetos
Código
fc037984
Banca
FCC
Órgão
TRE-PR
Ano
2017
Nível
Médio
Cargo
Técnico Judiciário - Programação de Sistemas
Os princípios SOLID reúnem cinco boas práticas para projetos Orientados a Objetos-OO. O princípio S, que se refere ao Single Responsability Principle-SRP ou Princípio de Responsabilidade Única, indica que uma classe deve ter uma e, apenas uma, razão para mudar. Considere a classe Java abaixo.public class UrnaEleitoral {public void AdicionarCandidato(String nome, int numero, int partido) { }public decimal CalcularTotalVotosCandidato() { }public void CadastrarPartidos() { }public void CadastrarEleitores() { }public void CadastrarMesarios() { }}Com base no princípio SRP e nas boas práticas para projetos OO, é correto afirmar:
  1. AO SRP visa aumentar o acoplamento entre classes e separar responsabilidades como forma de melhorar o código da aplicação OO sendo desenvolvida.
  2. BA classe UrnaEleitoral tem acoplamento baixo, ou seja, tem um número pequeno de dependências e, portanto, fica mais sujeita a mudanças em decorrência de alterações em outras classes.
  3. CUma classe com mais de um motivo para mudar possui mais de uma responsabilidade e apresentando dificuldade de manutenção, mas, por outro lado, tem maior facilidade de reúso e de coesão.
  4. DA classe UrnaEleitoral apresenta uma quebra do SRP, uma vez que possui responsabilidades que deveriam ser de componentes distintos do software.
  5. EEm um projeto com várias classes seguindo o padrão da classe UrnaEleitoral fica mais fácil manter a coesão em um nível mais alto ou em nível de componentes, pois o software fica com uma divisão clara de camadas.
Revelar gabarito e comentário

GabaritoD — A classe UrnaEleitoral apresenta uma quebra do SRP, uma vez que possui responsabilidades que deveriam ser de componentes distintos do software.

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”.

Princípio da Responsabilidade Única (SRP) e a classe UrnaEleitoral

Gabarito: letra D. A classe UrnaEleitoral viola o Princípio da Responsabilidade Única (SRP) porque reúne em uma única classe responsabilidades que deveriam estar em componentes separados: cadastro de candidatos, partidos, eleitores, mesários e cálculo de votos. O SRP estabelece que "Nunca deve haver mais que uma razão para uma classe mudar" (definição clássica de Robert C. Martin). As demais alternativas ou confundem os efeitos do princípio sobre acoplamento e coesão ou fazem afirmações contrárias à boa prática.

Alternativa

Afirmação sobre SRP / Classe UrnaEleitoral

Correta?

Justificativa

A

O SRP visa aumentar o acoplamento entre classes.

O SRP visa reduzir o acoplamento, separando responsabilidades.

B

A classe UrnaEleitoral tem acoplamento baixo e fica mais sujeita a mudanças.

Acoplamento baixo reduz sujeição a mudanças; a classe tem alto acoplamento.

C

Múltiplas responsabilidades trazem dificuldade de manutenção, mas maior reúso e coesão.

Classes inchadas têm baixa coesão e dificuldade de reúso.

D

A classe UrnaEleitoral quebra o SRP, pois possui responsabilidades de componentes distintos.

Reúne cadastro de candidatos, partidos, eleitores, mesários e cálculo de votos.

E

Seguir o padrão da classe UrnaEleitoral facilita coesão alta e divisão clara de camadas.

O padrão viola SRP, reduzindo coesão e dificultando a divisão de camadas.

1Definição
Uma classe = uma razão para mudar
Reduz acoplamento
Aumenta coesão
2Violação (classe UrnaEleitoral)
Cadastro de candidatos
Cadastro de partidos
Cadastro de eleitores
Cadastro de mesários
Cálculo de votos
3Consequências da violação
Baixa coesão
Alto acoplamento
Dificuldade de manutenção
Dificuldade de reúso
SRP (Single Responsibility Principle)
LEVELsoulevel.com.br
SRP (Single Responsibility Principle): Definição (Uma classe = uma razão para mudar, Reduz acoplamento, Aumenta coesão); Violação (classe UrnaEleitoral) (Cadastro de candidatos, Cadastro de partidos, Cadastro de eleitores, Cadastro de mesários, Cálculo de votos); Consequências da violação (Baixa coesão, Alto acoplamento, Dificuldade de manutenção, Dificuldade de reúso)

Alternativa A — ❌ Incorreta

Afirma que o SRP visa aumentar o acoplamento entre classes. Na verdade, o SRP tem como um de seus objetivos reduzir o acoplamento, pois ao separar responsabilidades cada classe depende de menos outras classes. O aumento de acoplamento é prejudicial ao projeto.

Alternativa B — ❌ Incorreta

Diz que a classe UrnaEleitoral tem acoplamento baixo e, por isso, fica "mais sujeita a mudanças em decorrência de alterações em outras classes". Essa afirmação é contraditória: acoplamento baixo significa menos dependência e, portanto, menos sujeição a mudanças externas. Além disso, uma classe com múltiplas responsabilidades tende a ter alto acoplamento, não baixo.

Alternativa C — ❌ Incorreta

Reconhece corretamente que múltiplas responsabilidades trazem dificuldade de manutenção, mas erra ao afirmar que isso traz "maior facilidade de reúso e de coesão". Na prática, classes inchadas (como UrnaEleitoral) têm baixa coesão e são difíceis de reutilizar, já que cada cliente que precisa de uma funcionalidade acaba dependendo de métodos que não lhe interessam.

Alternativa D — ✅ Correta ⟵ GABARITO

A classe UrnaEleitoral claramente quebra o SRP. Ela possui ao menos cinco responsabilidades distintas: adicionar candidatos, calcular votos, cadastrar partidos, cadastrar eleitores e cadastrar mesários. Cada uma dessas responsabilidades deveria estar em uma classe separada (ex.: CandidatoService, VotoService, PartidoService, EleitorService, MesarioService), respeitando o princípio de que cada classe deve ter uma única razão para mudar.

Alternativa E — ❌ Incorreta

Sugere que várias classes como UrnaEleitoral facilitam a manutenção da coesão e criam uma divisão clara de camadas. É o oposto: classes com múltiplas responsabilidades prejudicam a coesão e embaralham as camadas do sistema, tornando a manutenção mais difícil, não mais fácil.

PEGA ESSA DICA!

Ao avaliar se uma classe viola o SRP, pergunte-se: "Se eu precisar alterar a forma de cadastrar eleitores, isso impactaria outros comportamentos (como calcular votos)?" Se sim, a classe tem mais de uma responsabilidade. No caso da UrnaEleitoral, cada método representa uma responsabilidade diferente — um clássico exemplo de violação.

Gabarito: letra D. A classe UrnaEleitoral viola o Single Responsibility Principle.

Link permanente: /questoes/fc037984