Questão nº 28
Questão de Análise de Sistemas · FGV TJDFT 2022 (nº 28)
Observe as classes abaixo descritas na linguagem de programação Java.
```java
public class DocumentoProcesso extends Object
{
private String docNumero;
private int classificacao;
public DocumentoProcesso(String docNumero, int classificacao){
if (classificacao < 1)
throw new IllegalArgumentException(
"A classificação do documento deve ser no mínimo 1.");
this.docNumero = docNumero;
this.classificacao = classificacao;
}
public String getDocNumero()
{ return docNumero; }
public int getClassificacao()
{ return classificacao; }
public void setDocNumero(String docNumero)
{ this.docNumero = docNumero; }
public void setClassificacao(int classificacao)
{ this.classificacao = classificacao; }
public int promove()
{ return classificacao + 1; }
}
public class Oficio extends DocumentoProcesso
{
private int precedencia;
public Oficio(String docNumero, int classificacao, int precedencia)
{ super(docNumero,classificacao);
this.precedencia = precedencia; }
public int getPrecedencia()
{ return precedencia;
}
public void setPrecedencia(int precedencia)
{ this.precedencia = precedencia; }
@Override
public int promove()
{ return precedencia + 1; }
}
```
Com base nos conceitos de orientação a objetos, é correto afirmar que:
- Aos atributos private de DocumentoProcesso são acessíveis por Oficio;
- Ba anotação @Override indica que o método promove() é abstrato e polimórfico;
- Ca classe Oficio representa uma herança múltipla das classes DocumentoProcesso e Object;
- Da classe Oficio é composta pela classe DocumentoProcesso, permitindo que uma instância da classe Oficio faça referências a instâncias da classe DocumentoProcesso;
- Eos métodos getDocNumero() e setDocNumero() da classe DocumentoProcesso encapsulam o atributo docNumero e asseguram que os objetos da classe mantenham estados consistentes. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Conceito-chave: Encapsulamento é a ideia de esconder os dados (atributos) de uma classe, permitindo que eles sejam acessados ou modificados apenas por métodos controlados (os getters e setters). Isso protege o objeto de estados inválidos, pois o método pode validar o valor antes de atribuí-lo.
- (A) Incorreta: Atributos
privatesão acessíveis somente dentro da própria classeDocumentoProcesso; a subclasseOficionão pode acessá-los diretamente, apenas via métodos públicos comogetDocNumero(). - (B) Incorreta: A anotação
@Overrideapenas indica que o métodopromove()da subclasse sobrescreve (redefine) o método da superclasse; não significa que o método é abstrato (ele tem implementação) nem que é polimórfico por si só (o polimorfismo ocorre em tempo de execução, mas a anotação não o define). - (C) Incorreta: A classe
Oficioherda de uma única classe (DocumentoProcesso), que por sua vez herda deObject; isso é herança simples, não múltipla. - (D) Incorreta: A relação entre
OficioeDocumentoProcessoé de herança (é um), não de composição (tem um). A classeOficionão contém uma referência a um objetoDocumentoProcesso; ela é umDocumentoProcesso. - (E) Correta: Os métodos
getDocNumero()esetDocNumero()encapsulam o atributodocNumero, controlando o acesso a ele. Embora osetDocNumero()não valide o valor, o encapsulamento permite que validações sejam adicionadas futuramente, mantendo a consistência do objeto. Além disso, o construtor já validaclassificacao, mostrando a intenção de proteger o estado.
Armadilha do distrator mais tentador (A): A banca quer que você confunda herança com acesso direto. Muitos alunos acham que, por Oficio herdar de DocumentoProcesso, ela pode acessar os atributos private da superclasse. Não pode! O private é o nível mais restritivo: só a própria classe enxerga. A subclasse só acessa via métodos públicos ou protected.
Fonte: FGV TJDFT 2022 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.