Logo Passei Direto
Buscar

Fundamentos da Programação Orientada a Objetos AR

Ferramentas de estudo

Questões resolvidas

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Prévia do material em texto

Fundamentos da Programação Orientada a Objetos
Figura 2 – Visibilidade x modificadores de acesso
1. Analise o código em Java apresentado a seguir.
1 package P2;
2
3 public class Lampada {
4 private boolean ligada;
5 private String tipo;
6 private int cor;
7
8 public Lampada (String tipo, int cor) {
9 this.ligada = false;
10 this.tipo = tipo;
11 this.cor = cor;
12 }
13
14 public void acende () {
15 this.ligada = true;
16 }
17
18 public void apaga () {
19 this.ligada = false;
20 }
21
22 public String estadoLampada() {
23 String ret = "";
24 if (this.ligada)
25 ret += "ligada";
26 else
27 ret += "desligada";
28 if (this.cor == 1)
29 ret += ", luz branca";
30 else if (this.cor == 2)
31 ret += ", luz verde";
32 else
33 ret += ", luz vermelha";
34 ret += ", tipo " + this.tipo;
35 return ret;
36 }
37 }
1 package P2;
2 public class Casa {
3 Lampada lampA;
4 Lampada lampB;
5 Lampada lampC;
6
7 public static void main(String[] args) {
8 int cor1 = 1;
9 int cor2 = 2;
10 int cor3 = 3;
11
12 Casa minhaCasa = new Casa();
13 minhaCasa.lampA = new Lampada("incandescente", cor3);
14 minhaCasa.lampB = new Lampada("LED", cor1);
15 minhaCasa.lampC = new Lampada("fluorescente", cor2);
16 
17 minhaCasa.lampA.acende();
18 minhaCasa.lampC.acende();
19 System.out.println("Lamp1 " + minhaCasa.lampB.estadoLampada());
20 System.out.println("Lamp2 " + minhaCasa.lampC.estadoLampada());
21 System.out.println("Lamp3 " + minhaCasa.lampA.estadoLampada());
22 } 
23 } 
De acordo com o código, assinale a alternativa a seguir que representa corretamente o que aparece na tela de console ao final da execução do programa.
E) Gabarito da questão
Lamp1 desligada, luz branca, tipo LED
Lamp2 ligada, luz verde, tipo fluorescente
Lamp3 ligada, luz vermelha, tipo incandescente.
Feedback:
De acordo com a sequência de comandos do programa, nas linhas 13, 14 e 15 do código da classe Casa, temos os atributos das lâmpadas com os seguintes tipos e cores:
 
             minhaCasa.lampA = new Lampada("incandescente", cor3);
             minhaCasa.lampB = new Lampada("LED", cor1);
             minhaCasa.lampC = new Lampada("fluorescente", cor2);
 
Além disso, de acordo com as linhas 17 e 18 do código da classe casa, apenas as lâmpadas minhaCasa.lampA e  minhaCasa.lampC estão acesas.
 
Logo, os comandos para imprimir:
              System.out.println("Lamp1 " + minhaCasa.lampB.estadoLampada());
              System.out.println("Lamp2 " + minhaCasa.lampC.estadoLampada());
             System.out.println("Lamp3 " + minhaCasa.lampA.estadoLampada());
 
Apresentam na tela de console o seguinte conteúdo:
 
Lamp1 desligada, luz branca, tipo LED                 é a lampB
Lamp2 ligada, luz verde, tipo fluorescente            é a lampC
Lamp3 ligada, luz vermelha, tipo incandescente   é a lampA.
 
2. Um website de uma loja disponibiliza inúmeros produtos para a venda. O fragmento de código a seguir apresenta a declaração da classe CarrinhoDeCompras desse sistema.
1 public class CarrinhoDeCompras {
2 private Cliente c;
3 private Produto[] produtos = new Produto[20];
4
5 }
Considerando o fragmento apresentado, assinale a alternativa correta a seguir.
C) Gabarito da questão
Seria melhor substituir o vetor de produtos por um ArrayList, uma vez que não se sabe quantos produtos podem ser incluídos no carrinho.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
Uma das grandes características dos vetores é que ele possui tamanho fixo, no caso do vetor apresentado, 20 elementos (Produto[20]). Isso significa que o sistema não permitirá a adição de mais de 20 elementos no carrinho. Como é impossível saber de antemão quantos elementos um usuário do sistema poderá incluir em sua compra, o ideal é substituir essa estrutura pela classe ArrayList, que é dinâmica, ou seja, aumenta de tamanho conforme a necessidade.
3. Considere os blocos try...catch...finally a seguir.
try {
 System.out.print("A");
 try {
 System.out.print("B");
 throw new Exception("Olá!");
 } catch (RuntimeException e) {
 System.out.print("C");
 } catch (Exception e) {
 System.out.print("D");
 if (true)
 return;
 } finally {
 System.out.print("E");
 }
 System.out.print("F");
} finally {
 System.out.print("G");
}
System.out.println("H");
Com base no código apresentado, assinale a alternativa correta.
B) Gabarito da questão
O código imprime ABDEG.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
Analisemos o código passo a passo a seguir.
1.       Inicialmente, o código roda o comando System.out.print("A"), imprimindo A.
2.       Em seguida, a linha System.out.print("B") é executada, imprimindo B.
3.       A linha throw new Exception("Olá!"); executa em seguida, disparando a exceção. Isso desvia o código para o catch de Exception.
4.       O código System.out.print("D"); é executado, imprimindo D.
5.       Em seguida, a linha if (true) return; executa, forçando o método a sair da função.
6.       Porém, antes de sair, o bloco finally mais interno é executado, imprimindo E.
7.       E em seguida, o bloco finally mais externo é executado, imprimindo G.
 
Portanto: ABDEG.
4. Os comandos condicionais, ou de desvio, permitem alterar o fluxo de execução de um código, dependendo do resultado de uma condição, que pode ser verdadeira ou falsa. Verifique como é utilizado o condicional do código Java a seguir.
1 package P1;
2
3 public class Main {
4 public static void main(String[] args) {
5 int a = -2;
6 int b = 5;
7 int c;
8
9 if (a b ? 2 - a : -5 * b);
11 } else {
12 c = a + b;
13 }
14
15 System.out.println("fim = " + c);
16 }
17 }
O que aparecerá impresso após a execução? Assinale a alternativa correta.
Alternativas
A) Gabarito da questão
Fim = -25
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
O primeiro comando de decisão if (a b ? 2-a : -5*b);
que atribui seu resultado a c.
5. O código a seguir descreve uma situação de uso de herança. Analise-o com atenção.
class A {
 void print1() {
 System.out.println("A");
 }
 void print2() {
 System.out.println("A2");
 }
 void printAll() {
 print1();
 print2();
 }
}
class B extends A {
 void print2() {
 System.out.println("B");
 }
}
public class C extends B {
 void print1() {
 System.out.println("C");
 }
 public static void main(String[] args) {
 B teste = new C();
 teste.printAll();
 }
}
Sobre o código apresentado, assinale a alternativa correta a seguir.
C) Gabarito da questão
O código imprimirá C e B, uma vez que a criação do objeto foi feita com new C().
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
O código demonstra o uso do polimorfismo. Essa característica fará com que o Java execute sempre o método mais específico, considerando o tipo do objeto criado. O objeto é criado por meio da palavra-chave new e, como podemos notar, ele é do tipo C. A classe C sobrescreve diretamente o método print1() da classe A. Por ser filha da classe B, e esta sobrescrever o método print2() da classe A, gerando uma versão mais específica, essa será a versão do método utilizada. Observe também que o fato de os métodos print1() e print2() serem chamados de dentro de um método da classe A não impede que o polimorfismo ocorra, ou seja, não obriga o Java a chamar as versões presentes em A.
6. Considere a linha de código a seguir.
      Retangulo retg1 = new Retangulo();
      Terreno t = new Terreno();
      t.forma = retg1;System.out.println(t.area());
Agora, analise as afirmativas a seguir.
 
I. Area é um atributo do terreno.
II. O objeto de retangulo está sendo associado ao terreno por meio do atributo forma.
III. Retg1 e t são atributos de classe.
IV. Retangulo e terreno são instâncias de classes.
Assinale a alternativa a seguir que representa a(s) afirmativa(s) correta(s).
D) Gabarito da questão
II.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
A afirmativa II está correta, pois atributos são as características dos objetos. Na programação, essas características são representadas por meio de variáveis especiais, declaradas no interior da classe e subordinadas a ela. O atributo forma, na variável t, é um atributo de terreno. Ao permitir a atribuição de ret1g, as duas classes ficaram associadas.
7. Na Programação Orientada a Objetos (POO), a herança é um mecanismo que possibilita que uma classe mais genérica seja especializada em outras classes, permitindo o reuso de código.
Sobre a relação de herança em Java, assinale a alternativa correta a seguir.
Alternativas
C) Gabarito da questão
É implementada no Java quando utilizamos a palavra-chave extends, declarada logo após o nome da classe.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
A relação de herança em Java é implementada com a palavra-chave extends. Para haver herança entre classes, devemos declarar classes da forma apresentada a seguir.
class B extends A {
...
}
Nesse exemplo, a classe B é filha da classe A e, portanto, herda seus atributos e métodos. Isso significa que a classe B é um tipo mais específico de A.
Com a herança, a duplicação de código é evitada, pois o código da classe pai, no exemplo a classe A, é reaproveitado em todas as suas classes filhas.
8. A persistência de objetos permite que os dados desse objeto, ou seus atributos, sobrevivam ao programa que os gerou.
Esses dados podem ser recuperados, como objetos, mesmo após o encerramento do seu programa, pois eles estão armazenados em algum arquivo.
Considerando o contexto apresentado, analise as asserções a seguir e a relação proposta entre elas.
I. Nem todo objeto que suporta a interface io.Serializable pode ser gravado em fluxos (streams) para arquivos.
 
PORQUE
II. Qualquer objeto, incluindo string e array, é escrito com método writeObject.
A respeito das asserções apresentadas, assinale a alternativa correta a seguir.
B) Gabarito da questão
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
II - Qualquer objeto, incluindo string e array, é escrito com método writeObject.
Verdadeira.
9. As exceções, ou erros, ocorrem quando algo imprevisto ocorre, como erros da lógica do programa que executa ou acesso a recursos que não estão disponíveis, entre outras situações.
Uma forma de lidar com esses imprevistos é realizar o tratamento de exceções nos locais do código em que elas podem ocorrer. Para isso, em Java, são utilizados os comandos try e catch, em que:
· Try{ … }: bloco as linhas de código que podem gerar um erro ou lançar uma exceção.
· Catch(tipo_excessao e) { … }: bloco em que é descrita a ação a ser executada quando uma determinada exceção for capturada.
· Finally{...}: bloco de finalização.
Considerando o contexto apresentado, analise as asserções a seguir e a relação proposta entre elas.
I. Os blocos try-catch são declarados para tentar executar um conjunto de comandos (dentro do bloco try) e para tratar o lançamento de exceções (no bloco catch), se elas ocorrem.
 
PORQUE
II. O bloco finally independe da ocorrência, ou não, da exceção, e sempre finaliza os códigos dos blocos try-catch.
A respeito das asserções apresentadas, assinale a alternativa correta a seguir.
E) Gabarito da questão
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
As duas asserções são verdadeiras, mas a segunda não justifica a primeira, apenas complementa as afirmações sobre a técnica de realizar o tratamento de exceções na linguagem Java.
10. Em qualquer linguagem de programação, existem palavras-chave que identificam diferentes elementos, como comandos e tipos de dados.
Em Java, o que se pode afirmar sobre a palavra-chave static? Assinale a alternativa correta.
Alternativas
A) Marcada pelo aluno
Quando é usada na declaração de um atributo, significa que o valor desse atributo será o mesmo para todos os objetos da classe.
Feedback:
JUSTIFICATIVA DA RESPOSTA CORRETA*
Atributos e métodos estáticos pertencem à classe, não aos objetos dessa classe. Por esse motivo, se um atributo é declarado como static, ele será compartilhado por todos os objetos da sua classe. Portanto, para invocarmos métodos estáticos, precisamos indicar o nome da classe, e não o nome do objeto. A forma correta de realizar essa invocação é: Classe.metodoStatic(). O método estático mais conhecido é o main, pois dessa forma a JVM não precisa criar um objeto da sua classe para invocá-lo. No Java, na maior parte do tempo, estamos tratando de objetos. Logo, é muito raro utilizarmos métodos e atributos estáticos. A maior parte do nosso programa terá objetos, cada um com valores distintos para os seus atributos, cooperando entre si.
02 (1,00 ponto):
Analise o código em Java apresentado a seguir.
1 package P8;
2
3 public class ExcecaoSaldoInsuficienteAplicacao extends Exception {
public ExcecaoSaldoInsuficienteAplicacao (String mensagem) ( 4
super(mensagem); 5
6
}
public ExcecaoSaldoInsuficienteAplicacao() { 76
8
super();
9
}
10}
1 package P8;
2
3 public class ExcecaoSaldoInsuficienteSaque extends Exception {
4 public ExcecaoSaldoInsuficienteSaque (String mensagem) (
5
super (mensagem);
6
}
7 public ExcecaoSaldoInsuficienteSaque() {
8
super();
9
}
1 package P8;
2
3 public class ContaCorrente [
4 private int numero;
5 private double saldo;
private double aplicacao;
public ContaCorrente (int numero, double saldo) (
this.numero пивего;
this.saldo saldo;
public void retirar (double valor) throws ExcecaoSaldoInsuficienteSaque }
12
13
if (saldo valor)
14
throw new ExcecaoSaldolnsuficienteSaque
15
("PROBLEMA C/C: numero Saldo RS saldo insuficiente para saque de R$ valor);
saldo saldo valor; 16
17
10
public void aplicar (double valor) throws ExcecaoSaldoInsuficienteAplicacao
19
20
if (saldo valor)
21
throw new ExcecaoSaldoInsuficienteAplicacao
22
24
("PROBLEMA C/C: numero Saldo RS saldo. insuficiente para aplicacao de R$ valor);
saldo saldo valor; 23
aplicacao aplicacao valor;
25
@Override 20
public String toString() { 22
20
return "ContaCorrente [Cta: numero, saldo RS saldo, aplicacao RS aplicacao "T":
10
11
29 }
30)
1 package PB;
2
3 public class Banco (
public static void main(String[] args) { 49
ContaCorrente ccl new ContaCorrente (20, 200);
ContaCorrente cc2 new ContaCorrente(10,100);
try { 8
5
6
7
9
cc1.retirar(40);
10
cc1.aplicar(500);
11
12
13
14
15
cc2.retirar(20);
cc2.aplicar(500);
catch (ExcecaoSaldoInsuficienteSaque e) {
System.out.println(e.getMessage());
catch (ExcecaoSaldoInsuficienteAplicacao) (
16
17
System.out.println(e.getMessage());
18
finally (
System.out.println(ccl.toString());
19
System.out.println(cc2.toString());
20
}
21
}
22)
De acordo com o código Java apresentado, qual será a saída na tela de console da aplicação? Assinale
a alternativa correta a seguir.
) Gabarito da questão
PROBLEMA - C/C: 20 Saldo R$ 160.0 insuficiente para aplicacao de R$ 500.0
ContaCorrente [Cta: 20, saldo R$ 160.0, aplicacao = R$ 0.0]
08 (1,00 ponto):
Interfaces e classes abstratas permitem a criação de métodos sem implementação, que serão utilizados pelas classes filhas, por meio de polimorfismo. Sobre esses conceitos, analise o código a seguir.
interface A {
void m1();
}
interface B {
void m1();
void m2();
}
abstract class ClasseAbstrata implements A, B {
public void m1() {
}
}
class Classe extends ClasseAbstrata {
void m3() {
}
D) Gabarito da questão
A classe "classe" está incompleta e não compilará, para complementá-la seria necessário implementar o método m2().
09 (1,00 ponto):
Para salvar umobjeto de uma classe Java em um arquivo, é preciso transformar esse objeto em uma sequência de bytes. Dessa forma, ele poderá ser armazenado em disco, ação que é realizada quando o programa transmite o objeto serializado para um arquivo, via um stream (fluxo de bytes).
O stream, portanto, é um objeto de transmissão, no qual um fluxo sequencial de dados é transmitido de uma origem para um destino. Existem dois tipos de stream: o FileOutputStream, que permite a gravação de dados em arquivo, e o FileInputStream, que permite a leitura de dados de um arquivo. Juntos, eles são responsáveis por manipular objetos em uma sequência de bytes.
Por fim, existem duas classes chamadas ObjectInputStream e ObjectOutputStream, que são responsáveis por recuperar e gravar, respectivamente, a estrutura do objeto serializado, obtido de um stream.
Com base no texto sobre gravação e recuperação de objetos, assinale a alternativa a seguir que indica corretamente qual é o requisito essencial para que os objetos de uma determinada classe possam ser convertidos em um fluxo de bytes, de forma a serem armazenados e recuperados de arquivos.
D) Marcada pelo aluno
A classe dos objetos a serem gravados e recuperados deve implementar a interface java.io.Serializable.
10 (1,00 ponto):
Analise o código em Java apresentado a seguir.
package PS;
2
public abstract class Veiculo [
private String placa;
private int ano
private String marca;
private String modelo;
private double km;
public Veiculo(String place, ant ano, String marca, String modelo, double km) (
12
this.placa placa;
this.ano anop
13
this marca mancaz
14
this.modelo modelo;
this.km
15
public String toString() {
17
String dados
19
dadose "Marca:
modelo "\n";
pa
dados "Modelo:
ano
23
dados "Ano Fabricacao:
placan";
dados "Placa:
km
12
dados "Kilomeragem:
return dados,
public abstract double pedagio();
26
2
package PS;
public class Carro extends Veiculo (
int capacidade;
public Carro(String place, int ano, String manca, String modelo, double kn, ant cap) {
super(placa, ano, marca, modelo, ke);
this.capacidade cap;
public String toString() (
String dados super.toString();
return dados "Capacidade: capacidade,
@Override
public double pedagio() (
return 4.5;
package PS;
public class Caminhas extends Veiculo (
private int eixos,
public Caminhao(String placa, int ano, String marca, String modelo, double in, int wixος) (
super(placa, ano, marca, modelo, kw);
this.eixoswixos
public String toString() (
13
String dados super.toString();
return dades
25
public int getlinos() [
return this.eines;
26
Override
public double pedagio() (
20
return 5.0zίκος;
} 1 package PS,
2
import java.util.ArrayList;
public class Transportadora (
ArrayList(Veiculo frota;
public static void main(String[] args) {
Transportadora cargo new Transportadora();
double
pedagiolotal 0;
int
c01
Int
cargo.frota new ArrayList(Veiculos();
carge.frota.add(new Caminhao("BEC0404", 2019, "Volkswagen", "Constellation ",180000.0,6));
cargo.frota.add(new Caminhao("ASC3130", 2014, "Mercedes-Bena", "Accelo", 200000.0,2));
cargo.frota.add(new Carro("DIA4678", 2018, "Renault", "Master", 80000.0,1593)); cargo.frota.add(new Carro("I101234", 2015, "Flat", "Fiorino",100000.0,650));
cargo.frota.add(new Carro("CAR0909", 2020, "Ford", "EcoSport", 1000.0,350));
for (Veiculo: cargo.frota) (
29
System.out.println(v.toString());
System.out.println(");
if (v instanceof Carro)
if (instanceof Caminhao)
((Caminhao) v).getEixos();
pedagiolotal v.pedagio();
System.out.println("Valor de
System.out.println("Valor de
System.out.println("Pedagio Frota: R$ pedagiolotal);
12
E)
Marcada pelo aluno
Valor de cr: 3.
Valor de cm: 8.
Pedagio Frota: R$ 53.5.
image1.png
image2.png

Mais conteúdos dessa disciplina