Questão nº 51
Questão de Tecnologia da Informação · FCC TRT2 2018 (nº 51)
Coesão e acoplamento são umas das mais importantes métricas de qualidade em projetos Orientados a Objetos (OO). Considere os trechos de código Java abaixo, sabendo-se que é necessário que seja calculada a média dos rendimentos dos depósitos de valores referentes ao Fundo de Garantia por Tempo de Serviço (FGTS) de cada trabalhador e que este cálculo pode ser alterado em função de novas leis regulatórias.
Trecho 1
```
public class Trabalhador(){
String nome;
double[] fgts;
/declaração de outros atributos e
códigos dos outros métodos
getters e setters /
public void setNome(String nome){
this.nome=nome;
}
public String getNome(){
return nome;
}
public void setFgts(double[] fgts){
this.fgts=fgts;
}
public double calculaMedia(){
//código para calcular média
return media;
}
}
```
Trecho 2
```
public class Trabalhador(){
String nome;
/declaração de outros atributos e
códigos dos outros métodos
getters e setters /
public void setNome(String nome){
this.nome=nome;
}
public String getNome(){
return nome;
}
}
public class Fgts{
Trabalhador trabalhador;
double[] fgts;
public Fgts(Trabalhador trabalhador){
this.trabalhador=trabalhador;
}
public void setFgts(double[] fgts){
this.fgts=fgts;
}
public double calculaMedia(){
//código para calcular média
return media;
}
}
```
Ao analisar os trechos de código em condições ideais, um Analista de Informática afirma que o trecho
- A2 apresenta elementos muito acoplados, pois dependem muito uns dos outros, de forma que, se um for alterado os outros também devem ser alterados.
- B1 apresenta baixa coesão e o trecho 2 corrige o trecho 1 aumentando a coesão. (alternativa correta)
- C1 apresenta baixo acoplamento e o trecho 2 corrige o trecho 1 aumentando o acoplamento.
- D1 apresenta uma classe que faz mais do que ela deveria fazer, ou seja, está com uma coesão alta, e isso é ruim em OO.
- E2 apresenta classes com baixa coesão, pois os elementos não dependem muito uns dos outros, de forma que, se um for alterado os outros não serão afetados.
Resposta comentada
Gabarito Alternativa B
Coesão (Cohesion) é o grau em que os elementos dentro de um módulo (como uma classe) trabalham juntos para realizar uma única tarefa bem definida. Alta coesão é desejável. Acoplamento (Coupling) é o grau de interdependência entre diferentes módulos (classes). Baixo acoplamento é desejável.
- (A) Incorreta: O Trecho 2 introduz um acoplamento entre
FgtseTrabalhador(a classeFgtsreferenciaTrabalhador), mas isso é um acoplamento controlado e necessário para a relação. A afirmação de que "se um for alterado os outros também devem ser alterados" é uma generalização exagerada; muitas alterações internas não afetariam o outro, e o benefício da coesão supera esse acoplamento. - (B) Correta: No Trecho 1, a classe
Trabalhadoré responsável por dados do trabalhador e também pelo cálculo da média do FGTS. Isso significa que ela tem múltiplas responsabilidades não diretamente relacionadas, caracterizando baixa coesão. O Trecho 2 corrige isso separando as responsabilidades: a classeTrabalhadorcuida apenas dos dados do trabalhador, e a classeFgtscuida dos dados e do cálculo do FGTS. Cada classe agora tem uma única responsabilidade bem definida, o que aumenta a coesão de ambas. - (C) Incorreta: O Trecho 1 apresenta baixa coesão, não baixo acoplamento (o problema principal não é a interdependência com outras classes, mas a mistura de responsabilidades internas). Embora o Trecho 2 de fato aumente o acoplamento entre as classes
TrabalhadoreFgts(já queFgtsagora depende deTrabalhador), a correção principal do Trecho 1 não é aumentar o acoplamento, mas sim melhorar a coesão. A armadilha aqui é que, embora o acoplamento aumente, isso não é a "correção" em si, mas uma consequência aceitável para alcançar a alta coesão. - (D) Incorreta: Uma classe que "faz mais do que ela deveria fazer" de fato tem baixa coesão, não alta. Alta coesão significa que a classe faz apenas o que deveria fazer, e faz bem. A afirmação confunde o conceito de coesão.
- (E) Incorreta: A descrição "elementos não dependem muito uns dos outros, de forma que, se um for alterado os outros não serão afetados" refere-se a baixo acoplamento, que é desejável. No entanto, o Trecho 2 não apresenta classes com baixa coesão; pelo contrário, ele foi projetado para aumentar a coesão de ambas as classes ao separarem suas responsabilidades. A alternativa confunde acoplamento com coesão.
Fonte: FCC TRT2 2018 Analista Judiciário - Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.