Questões de Concurso sobre Hierarquia de classes e herança

 
 
Disciplina
Assunto 1
Banca
Instituição
Cargo
Ano
Carreira
Área de formação
Escolaridade
Dificuldade
 
Comentários:
Professores
Alunos
Meus Comentários
Vídeo
 
Minhas questões:
Resolvidas
Não resolvidas
Certas
Erradas
 
Tipo de questão:
Certo e errado
Múltipla escolha
Incluir questões:
Anuladas
Desatualizadas
 
Questões:
Todas as questões
 
Filtro simplificado
 
Questões
Todas as questões
 
132 questões encontradas
Questões por página
20
Mais recentes
 

Em Programação Orientada a Objetos, o encapsulamento protege o estado interno de um objeto e define como ele pode ser acessado/modificado. Já a herança permite criar classes derivadas a partir de classes base, promovendo reuso e especialização. Dentro desse assunto, considere o trecho de código em Python, usado para modelar pessoas de uma escola.


Imagem associada para resolução da questão


Assinale a alternativa correta sobre o acesso ao atributo “__nome” e a herança entre as classes.


A

A herança só ocorre se “Aluno” declarar novamente o método “get_nome”; sem isso, objetos de “Aluno” não possuem “get_nome”.


B

O atributo “__nome” é público e pode ser acessado diretamente por “aluno.__nome” sem restrições, pois Python não tem encapsulamento.


C

A chamada “super().__init__(nome)” é inválida em Python; para herdar, corretamente, é necessário repetir todo o código do construtor de “Pessoa” dentro de “Aluno”.


D

O atributo “__nome” pode ser acessado por “Aluno” como “self.__nome” dentro de “Aluno”, pois a herança permite que subclasses utilizem diretamente os atributos definidos na classe base.


E

O atributo “__nome” está encapsulado na classe “Pessoa” e deve ser acessado por “get_nome()”; “Aluno” herda de “Pessoa” e reutiliza a inicialização do nome via “super().__init__(nome)”.

Durante uma análise de código para um sistema bancário, o perito identificou um problema de projeto conhecido como “Fragile Base Class Problem”, típico em hierarquias de herança.


Esse problema geralmente ocorre quando


A

se tenta sobrescrever métodos privados.


B

uma modificação na superclasse afeta negativamente o comportamento de subclasses existentes.


C

uma interface é implementada sem exploração de polimorfismo.


D

se tenta herdar de uma classe marcada como final.


E

o coletor de lixo remove objetos derivados antes dos objetos base.

Na linguagem Java, a herança múltipla é suportada apenas para tipos (interfaces), sendo vedada a herança múltipla de estado (campos) em classes. Analise as afirmativas a seguir:


(__)Interfaces podem declarar atributos de instância com modificadores variados, incluindo privados e não finais.

(__)É possível utilizar a sintaxe InterfaceName.super.metodo() para invocar explicitamente um método default de uma interface.

(__)Se uma classe implementar duas interfaces que possuem métodos default com a mesma assinatura, ela deve sobrescrever o método para resolver o conflito.


Assinale a alternativa que apresenta a sequência correta:


A

F − V − F.


B

V − F − F.


C

V − F − V.


D

F − V − V.


E

F − F − V.

São propriedades que o controle de concorrência em um sistema gerenciador de bancos de dados relacionais deve implementar:


1. Atomicidade

2. Consistência

3. Isolamento

4. Durabilidade

5. Disponibilidade


Assinale a alternativa que indica todas as afirmativas corretas.


A

São corretas apenas as afirmativas 1, 2, 3 e 4.


B

São corretas apenas as afirmativas 1, 2, 3 e 5.


C

São corretas apenas as afirmativas 1, 2, 4 e 5.


D

São corretas apenas as afirmativas 2, 3, 4 e 5.


E

São corretas as afirmativas 1, 2, 3, 4 e 5.

O Princípio de Substituição de Liskov (Liskov Substitution Principle — LSP) é um dos pilares da programação orientada a objetos. Ele estabelece regras fundamentais para o uso correto da herança entre classes. Assinale a alternativa que descreve corretamente o Princípio de Substituição de Liskov (LSP):


A

A composição deve ser preferida em relação à herança como principal forma de reutilização de código.


B

Classes derivadas devem herdar todos os métodos, incluindo os privados, da classe base.


C

Uma classe deve possuir apenas uma única responsabilidade bem definida, evitando múltiplos motivos para mudança.


D

Objetos de uma subclasse devem ser capazes de substituir objetos da superclasse sem alterar o comportamento esperado do programa ou comprometer sua correção.


E

Interfaces devem ser específicas e adaptadas às necessidades de cada cliente, evitando dependências desnecessárias.

Considere o seguinte código escrito em PHP 8.


Imagem associada para resolução da questão


Sobre a visibilidade dos atributos e a herança no código acima, assinale a alternativa COR RETA.


A

O método exibirDados na classe Computador resultará em erro, pois o atributo $codigo não pode ser acessado por classes filhas.


B

O atributo $status da classe pai poderia ser acessado e exibido dentro do método exibirDados da classe Computador sem restrições.


C

A classe Computador consegue acessar $nome e $codigo, mas não tem acesso direto ao atributo $status.


D

Em PHP, todos os atributos de uma classe pai são automaticamente convertidos para public quando herdados por uma classe filha.

Analise o seguinte código desenvolvido em Java SE 11:


class Animal {

public void fale() { }

}


class Cao extends Animal {

public void fale() {

System.out.print("au au ");

}

}


class Gato extends Animal {

public void fale() {

System.out.print("miau ");

}

}


class GatoPersa extends Gato {

public void fale() {

super.fale();

System.out.print("persa ");

}

}


class Tigre extends Gato {

public void fale() {

System.out.print("tigre ");

super.fale();

}

}


public class Principal {

public static void main(String[] args) {

Animal[] animais = {

new GatoPersa(),

new Cao(),

new Gato(),

new Tigre()

};


for (Animal a : animais) {

a.fale();

}

}

}


Assinale a alternativa que apresenta a saída impressa no console.


A

miau persa au au miau tigre miau


B

persa au au miau tigre miau


C

miau au au miau tigre miau


D

persa au au miau miau tigre


E

miau persa au au tigre miau

No desenvolvimento de um software de apoio à decisão, utilizado para consolidar dados epidemiológicos e administrativos do SUS, um DEV (programador) precisa garantir reuso de código, manutenibilidade, integridade das regras de negócio e confiabilidade dos resultados, especialmente ao modelar entidades do domínio da saúde. Considere o seguinte código em Python, utilizado na modelagem de relatórios gerados por diferentes módulos do sistema.


Imagem associada para resolução da questão


Fonte: a banca


Com base nos conceitos de herança, sobrescrita de métodos e uso de super(), assinale a alternativa que expressa CORRETAMENTE o comportamento do código e o conceito aplicado, considerando boas práticas na implementação de sistemas críticos de saúde pública.


A

A herança apresentada é desnecessária, pois as classes filhas em Python não podem reutilizar métodos da superclasse neste trecho de código.


B

O código utiliza herança para especializar o comportamento da classe base, permitindo reaproveitamento de código e extensão funcional, sendo o método super() responsável por invocar a implementação original do método na superclasse.


C

O código apresenta erro conceitual, pois o uso de herança não é recomendado em sistemas críticos do SUS devido a riscos de desempenho.


D

O método super() substitui completamente o método da superclasse, fazendo com que apenas o texto da classe filha seja exibido na saída.


E

O uso de herança neste código viola o princípio da integridade dos dados, pois a sobrescrita do método gerar() impede a reutilização da lógica definida na classe base.

O Polimorfismo Paramétrico em Java, implementado via Generics, utiliza o mecanismo de Type Erasure para manter a compatibilidade com versões legadas da JVM. Esse mecanismo impõe restrições à variância dos tipos. Para lidar com isso, a linguagem utiliza coringas (wildcards) com limites superiores (extends) e inferiores (super). Para a questão, considere o método apresentado:


Imagem associada para resolução da questão


Com base nas regras de covariância e contravariância, assinale a alternativa que apresenta uma operação tecnicamente válida, assumindo que a classe Cachorro herda explicitamente da classe Animal.


A

A instrução lista.add(new Object()); dentro do método, já que Object é um supertipo de Animal e, portanto, compatível com o limite inferior definido.


B

A instrução Animal a = lista.get(0); dentro do método, visto que o limite inferior garante que todos os elementos da lista sejam, no mínimo, do tipo Animal.


C

A chamada do método utilizando registrarAnimais(new ArrayList());, uma vez que Cachorro é um tipo compatível com a hierarquia de Animal.


D

A atribuição List lista = new ArrayList(); é inválida, pois o tipo genérico deve ser obrigatoriamente Animal ou um de seus descendentes.


E

A instrução lista.add(new Cachorro()); dentro do escopo do método, pois o wildcard ? super Animal garante que a lista pode aceitar com segurança instâncias de Animal ou de qualquer uma de suas subclasses.

Uma equipe desenvolveu um sistema de gerência de equipamentos de redes utilizando programação orientada a objetos. Nesse sistema, a classe DispositivoRede implementa o método exibirInfo() e possui dois atributos privados (modelo e enderecoIP) acessíveis apenas por meio de métodos públicos. A classe Roteador herda de DispositivoRede e redefine o método exibirInfo() para incluir informações da tabela de rotas, mantendo o mesmo nome e a mesma assinatura do método original. Com base nesse contexto, assinale a alternativa INCORRETA:


A

O acesso a modelo e enderecoIP por meio de métodos públicos caracteriza o encapsulamento, princípio que protege o estado interno do objeto contra modificações diretas não controladas.


B

A redefinição de exibirInfo() em Roteador mantendo o mesmo nome e a mesma assinatura do método da classe pai caracteriza sobrescrita de método (override).


C

Roteador herda os métodos públicos de DispositivoRede e pode utilizá-los diretamente sem necessidade de redefinição, pois a herança disponibiliza automaticamente à subclasse os métodos acessíveis da classe pai.


D

O fato de Roteador redefinir exibirInfo() permite que um objeto do tipo DispositivoRede, referenciando um Roteador, execute a versão do método definida em Roteador, o que caracteriza polimorfismo.


E

Como Roteador redefine exibirInfo() mantendo o mesmo nome e a mesma assinatura do método da classe pai, esse comportamento caracteriza sobrecarga de método (overloading), e não sobrescrita.

No desenvolvimento de um sistema hospitalar, utiliza-se o paradigma da Orientação a Objetos para modelar entidades como "Médico" e "Enfermeiro", que compartilham características comuns da entidade genérica "Funcionário". O mecanismo que permite criar novas classes a partir de classes já existentes, absorvendo seus atributos e métodos, é denominado tecnicamente. Assinale a alternativa correta.


A

Encapsulamento.


B

Instanciação.


C

Abstração.


D

Herança.


E

Polimorfismo.

Considere que um sistema projetado para gerenciar diferentes tipos de contas bancárias foi desenvolvido considerando os princípios da programação orientada a objeto, e considerando as características a seguir:


▪ Uma classe abstrata Conta, que declara o método calcularTarifa(), sem implementação.

▪ Uma classe ContaCorrente, que herda de Conta e sobrescreve calcularTarifa().

▪ Uma classe ContaPoupanca, que herda de Conta e não sobrescreve calcularTarifa().

▪ Uma interface Tributavel, que declara o método calcularImposto().

▪ A classe ContaCorrente implementa a interface Tributavel.

▪ O sistema utiliza polimorfismo para manipular objetos do tipo Conta por meio de referências da superclasse.


Com base nos princípios da orientação a objetos, marque a alternativa CORRETA.


A

O sistema está corretamente modelado, pois uma classe concreta pode herdar métodos abstratos sem implementá-los, desde que esses métodos não sejam utilizados em tempo de execução.


B

A classe ContaPoupanca viola o princípio do polimorfismo, pois não implementa o método abstrato da superclasse, o que caracteriza erro de lógica, mas não de modelagem, conforme o paradigma da orientação a objetos.


C

A modelagem apresenta inconsistências conceituais, pois uma classe concreta, que herda de uma classe abstrata, deve implementar todos os métodos abstratos, e a implementação de uma interface estabelece um contrato obrigatório.


D

O uso de uma referência do tipo Conta para apontar para objetos de ContaCorrente elimina a necessidade de sobrescrita de métodos, uma vez que a vinculação ocorre em tempo de compilação, no instante em que é executado.


E

A implementação da interface Tributavel pela classe ContaCorrente impede que objetos dessa classe sejam tratados polimorficamente como instâncias de Conta, o que garante um nível primário de encapsulamento do código.

Java é uma linguagem de programação orientada a objetos. Analise o seguinte código Java que utiliza os conceitos de herança e polimorfismo e assinale a alternativa referente à saída desse código.


Imagem associada para resolução da questão


A

Miau, Miau!


B

Som genérico!


C

Erro de compilação.


D

Nenhuma saída.

Em linguagens orientadas a objetos que não oferecem suporte nativo para herança múltipla, é possível obter essa funcionalidade da seguinte forma:


A

usando interfaces ou classes abstratas para implementar os comportamentos de outras classes, permitindo que uma classe herde múltiplos comportamentos sem precisar de herança múltipla.


B

implementando-se a herança múltipla utilizando apenas uma classe base e criando múltiplos construtores dentro dessa classe, que simula o comportamento de herança de outras classes.


C

criando objetos dentro de uma classe e utilizando os métodos dessas classes internas para simular herança múltipla, sem modificar diretamente a classe.


D

usando apenas herança simples e implementando a duplicação de métodos dentro de cada classe filha, criando múltiplas instâncias de uma única classe base.


E

implementando-se a herança múltipla apenas em linguagens que oferecem suporte a isso diretamente, como C++ ou Python, não sendo possível simular em linguagens como Java ou C#.

Considere o seguinte trecho de código em Java.


class BancobeDados {

void conectar (String url) throws Exception {

if (url == null || url. isEmpty()) {

throw new Exception("URL inválida.");

}

System.out.printin("Conectado ao banco: " + url);

}

}

class ConsultaProcesso extends BancoDeDados {

@Override

void conectar (String url) throws Exception {

System.out.println("Conexão validada.");

___I___


}

}

Com base nos conceitos de herança e sobrescrita e sabendo que o código será executado em condições ideais, a lacuna I deve ser corretamente preenchida com


A

super.conectar("");


B

super.conectar (url);


C

this.conectar ("jdbc:padrao");


D

System.out.println("Conexão concluída.");


E

throw new Exception("Conexão não implementada.");

Em uma implementação, para que a classe Prato herde os comportamentos e atributos da classe ItemCardapio, foi definido o seguinte código em Python 3.7:


Imagem associada para resolução da questão


Com base neste código e considerando as afirmativas abaixo, é INCORRETO dizer que:


A

O comando import permite a herança de informações e atributos da class Prato para a classe ItemCardapio.


B

A classe Prato está usando as informações e os atributos da classe ItemCardapio.


C

A class Prato(ltemCardapio) herda métodos e atributos de outra classe.


D

O uso do super() indica que estamos acessando informações de outra classe; nesse caso, da classe ItemCardapio.


E

A descrição não é da classe ItemCardapio; é referente ao prato.

Considere o seguinte trecho de código PHP que utiliza herança de classe. O código calcula o valor das férias de um trabalhador, incluindo o adicional de 1/3 sobre o salário.


Imagem associada para resolução da questão


Para que o trecho de código acima possa ser executado em condições ideais, a lacuna I deve ser corretamente preenchida com:


A

FeriasBase::calcularFerias($salario, $dias)


B

self::calcularFerias($salario, $dias)


C

parent.calcularFerias($salario, $dias)


D

$this.calcularFerias($salario, $dias)


E

parent::calcularFerias($salario, $dias)

Em Programação Orientada a Objetos (POO), a herança é um conceito fundamental que permite uma classe herdar características e comportamentos de outra. No que diz respeito à herança, assinale a afirmação verdadeira.


A

Em POO, a herança é uma forma de evitar a reutilização de código, pois permite que uma classe filha substitua completamente a classe pai.


B

A herança permite que uma classe filha acesse diretamente os membros privados da classe pai.


C

Uma classe filha pode herdar métodos e atributos de uma classe pai, mas não pode sobrescrever os métodos da classe pai.


D

A herança é um mecanismo que permite que uma classe filha herde métodos e atributos da classe pai, podendo modificar ou estender o comportamento da classe pai.


E

A herança impede que classes encapsulem dados.

As classes abstratas e concretas são fundamentais para organizar e estruturar sistemas de forma eficiente e flexível, pois promovem a reutilização de código e simplificam os processos de manutenção. O uso dessas classes permite ao desenvolvedor criar sistemas mais robustos, modulares e aderentes aos princípios da Programação Orientada a Objetos (POO).


Tendo como referência o tema classes concretas, classes abstratas e métodos abstratos, analise as afirmativas abaixo, assinalando V, para as Verdadeiras, e F, para as Falsas.


( ) As classes concretas atuam como modelos que definem um conjunto de características e comportamentos que suas subclasses devem seguir, sem estarem diretamente associadas a objetos.

( ) Superclasses abstratas obrigam suas subclasses a sobrescrever e implementar os métodos declarados como abstratos.

( ) Uma subclasse concreta deve fornecer implementações concretas de todos os métodos abstratos herdados da superclasse; caso contrário, será considerada abstrata também.


A sequência correta, de cima para baixo, é:


A

F – V – V.


B

V – V – F.


C

V – F – F.


D

F – F – V.

 
 
Gerar simulado