Buscar

lista7

Prévia do material em texto

5185/31 e 6888/1– Paradigma de Programação Imperativa 
e Orientada a Objetos 
Profa. Valéria 
7ª Lista de Exercícios 
Cap. 12 (Sebesta)/Cap.9 (Scott): Abstração de Dados e Orientação a Objetos 
1. Quais são os três conceitos/recursos característicos das linguagens orientadas a objetos? 
2. Qual a diferença entre uma variável de instância e uma variável de classe? 
3. O que é herança múltipla? 
4. O que é uma variável polimórfica? 
5. O que significa dizer que um método sobrescreve outro? 
6. Qual a diferença entre sobrecarga e sobrescrita de métodos? 
7. O que é um método abstrato? 
8. Por que uma classe abstrata não pode ser instanciada? 
9. O que é o protocolo de mensagens de um objeto? 
10. Como os objetos alocados no heap em C++ são desalocados? 
11. Em C++, nem toda classe derivada (subclasse) é um subtipo da sua classe base (superclasse). 
Exemplifique um caso em que isso acontece. 
12. Sob quais circunstancias uma chamada a um método em C++ é estaticamente vinculada ao 
método? Quando ocorre vinculação dinâmica? 
13. Descreva uma situação na qual a vinculação dinâmica de métodos tem vantagem sobre a 
vinculação estática. 
14. O que é uma função (método) virtual em C++? 
15. Como os objetos em Java são desalocados? 
16. Em Java, qual a diferença entre um método comum e um método estático? 
17. O que é empacotamento de tipo (boxing)? Por que esse tipo de operação é necessário em Java? 
18. Todas as subclasses em Java são subtipos de suas superclasses? 
19. O que significa para uma subclasse ser subtipo da sua superclasse? 
20. Em Java, em qual circunstância um construtor de superclasse precisa ser chamado explicitamente? 
E como isso é feito? 
21. Sob quais circunstancias uma chamada a um método em Java é estaticamente vinculada ao 
método? Quando ocorre vinculação dinâmica? 
22. Qual a diferença entre uma classe abstrata e uma interface em Java? 
23. Explique como uma interface Java pode ser utilizada para simular um tipo de herança múltipla. 
24. Classes abstratas e interfaces não podem ser instanciadas, mas você pode declarar uma variável de 
referência para uma classe abstrata ou interface. Que uso tal variável teria? 
25. Compare os métodos final de Java com os métodos não virtuais do C++. Em que eles são iguais? 
Em que eles são diferentes? 
26. Java não permite herança múltipla para evitar os vários problemas que esse tipo de recurso pode 
trazer. No entanto, permite que uma classe implemente qualquer número de interfaces, além de 
poder ter herança simples. Por que os problemas da herança múltipla não acontecem com o uso 
das interfaces? 
27. O que acontece com a implementação de uma classe se ela redefine um atributo da sua 
superclasse? Por exemplo, veja os exemplos abaixo (em C++ na esquerda e em Java na direita) em 
que o atributo b de foo é redefinido em bar (subclasse de foo): 
class foo { 
 public: int a; 
 char *b; 
}; 
 
class bar : public foo { 
 public: float c; 
 int b; 
}; 
 
class Foo { 
 public int a; 
 public String b; 
} 
 
class Bar extends Foo { 
 public float c; 
 public int b; 
}
A representação de um objeto bar tem um atributo b ou dois? Se tiver dois, os dois são acessíveis 
ou só um? Se os dois são acessíveis, como diferenciar o acesso? Responda as perguntas 
considerando tanto a linguagem C++ como Java. 
28. Escreva um código em Java que exemplifique o uso de variáveis polimórficas. 
29. Considere o método main em Java que usa as classes Ponto e Circulo vistas em aula: 
public static void main(String[] args) { 
 Circulo c = new Circulo (15, 5, 1.5); 
 Ponto pc = c; 
 System.out.printf("Area de c = %.2f\n", c.area()); 
 System.out.printf("Area de pc= %.2f\n", ((Circulo) pc).area()); 
} 
As duas variáveis de referência c e pc apontam para o mesmo objeto Circulo. Por que a chamada 
ao método área() via variável c é diferente da chamada ao mesmo método via variável pc? 
LUCAS
Realce

Continue navegando