Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FGV 2024

ProgramaçãoProgramação Orientada a Objetos
Código
fg077100
Banca
FGV
Órgão
CGM de Belo Horizonte - MG
Ano
2024
Nível
Superior
Cargo
Auditor Interno - Ciência da Computação - Manhã
Com relação à programação orientada a objetos usando Java, avalie o código a seguir. 


Imagem associada para resolução da questão


Em relação ao código, analise as afirmativas a seguir e assinale (V) para a verdadeira e (F) para a falsa.

( ) A classe Mobi é um exemplo de herança, um dos fundamentos da programação orientada a objetos.

( ) A classe Veiculo não pode ser instanciada porque é uma classe abstrata.

( ) O método getPortas() é um exemplo de encapsulamento, outro fundamento da programação orientada a objetos.


As afirmativas são, respectivamente,
  1. AV – V – F.
  2. BV – F – V.
  3. CF – V – V.
  4. DF – F – V.
Revelar gabarito e comentário

GabaritoB — V – F – V.

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

Programação Orientada a Objetos em Java: herança, classes abstratas e encapsulamento

Gabarito: letra B (V – F – V). A primeira afirmativa é verdadeira porque a classe Mobi estende Veiculo, caracterizando herança; a segunda é falsa porque, embora Veiculo seja abstrata, a afirmativa generaliza que "não pode ser instanciada" sem considerar que subclasses concretas podem ser instanciadas; a terceira é verdadeira porque getPortas() é um método getter que expõe o atributo privado portas, exemplificando encapsulamento. A análise se baseia nos fundamentos da POO: herança, classes abstratas e encapsulamento.

A programação orientada a objetos (POO) é um paradigma que organiza o código em torno de "objetos", que são instâncias de classes. Uma classe define a estrutura (atributos) e o comportamento (métodos) dos objetos. Os quatro pilares fundamentais da POO são: abstração, encapsulamento, herança e polimorfismo. Nesta questão, três desses conceitos são diretamente cobrados: herança, classes abstratas (relacionadas à abstração) e encapsulamento.

Herança é o mecanismo pelo qual uma classe (subclasse ou classe filha) herda atributos e métodos de outra classe (superclasse ou classe pai). Em Java, isso é feito com a palavra-chave extends. A classe Mobi estende Veiculo, portanto, Mobi é uma subclasse de Veiculo e herda seus membros. Isso permite a reutilização de código e a criação de hierarquias de classes.

Classes abstratas são classes que não podem ser instanciadas diretamente; elas servem como modelo para outras classes. Em Java, uma classe é declarada abstrata com a palavra-chave abstract. Uma classe abstrata pode conter métodos abstratos (sem implementação) e métodos concretos. Subclasses concretas devem implementar os métodos abstratos, e é a partir delas que objetos podem ser criados. A afirmativa II diz que "A classe Veiculo não pode ser instanciada porque é uma classe abstrata". Isso é verdadeiro em relação à classe Veiculo em si, mas a afirmativa é apresentada de forma absoluta, sem considerar que subclasses concretas podem ser instanciadas. A banca explora essa generalização indevida.

Encapsulamento é o princípio de esconder os detalhes internos de um objeto e restringir o acesso direto aos seus atributos, expondo apenas o necessário por meio de métodos públicos (getters e setters). Em Java, isso é feito declarando atributos como private e fornecendo métodos públicos para acessá-los e modificá-los. O método getPortas() é um getter que retorna o valor do atributo privado portas, exemplificando encapsulamento.

A pegadinha desta questão está na segunda afirmativa: ela mistura uma verdade (a classe Veiculo é abstrata e não pode ser instanciada) com uma generalização indevida (a afirmativa sugere que isso é uma regra absoluta, ignorando que subclasses concretas podem ser instanciadas). A banca quer que o candidato perceba que a afirmativa é falsa porque, embora Veiculo não possa ser instanciada, isso não impede que suas subclasses concretas sejam instanciadas.

Afirmativa 1 — ✅ Verdadeira

A classe Mobi estende Veiculo, o que caracteriza herança. Em Java, a herança é implementada com a palavra-chave extends, e a subclasse herda os atributos e métodos da superclasse. Isso permite a reutilização de código e a criação de hierarquias de classes, um dos fundamentos da POO.

Afirmativa 2 — ❌ Falsa

A afirmativa diz que "A classe Veiculo não pode ser instanciada porque é uma classe abstrata". Embora seja verdade que classes abstratas não podem ser instanciadas diretamente, a afirmativa é falsa porque generaliza de forma indevida: subclasses concretas de Veiculo podem ser instanciadas. A classe Mobi, por exemplo, se for concreta, pode ser instanciada. A banca explora a generalização indevida, apresentando uma verdade parcial como absoluta.

Afirmativa 3 — ✅ Verdadeira

O método getPortas() é um getter que retorna o valor do atributo privado portas. Isso exemplifica encapsulamento, pois o atributo é privado e o acesso é feito por um método público. O encapsulamento é um dos fundamentos da POO, permitindo controlar o acesso aos dados e garantir a integridade do objeto.

Conclusão: As afirmativas verdadeiras são a 1 e a 3, e a falsa é a 2. Portanto, a sequência correta é V – F – V, correspondente à letra B.

NÃO CAIA NESSA!

A banca adora generalizar indevidamente. A afirmativa 2 mistura uma verdade (classe abstrata não pode ser instanciada) com uma generalização falsa (ignora que subclasses concretas podem ser instanciadas). Fique atento a palavras como "não pode" e "sempre" — elas costumam sinalizar exceções.

PEGA ESSA DICA!

Para resolver questões de POO, identifique os pilares: herança (extends), encapsulamento (atributos private + getters/setters), abstração (classes abstratas/interfaces) e polimorfismo (sobrecarga/sobrescrita). Se a afirmativa mencionar um conceito, verifique se o código realmente o implementa.

Gabarito: letra B

Link permanente: /questoes/fg077100