A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

AULA 71-72 Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes

Apresentações semelhantes


Apresentação em tema: "AULA 71-72 Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes"— Transcrição da apresentação:

1 AULA 71-72 Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes abrahao.lopes@ifrn.edu.br

2 Conversão de Tipos (casting) Num exemplo anterior vimos que é possível colocar um objeto de uma subclasse em uma variável de superclasse: Item coisa = new CD(...); E dissemos que o inverso não é permitido: CD coisa = new Item(...); // ERRO!

3 Conversão de Tipos (casting) Porém se observarmos bem, em um objeto de um subtipo existe um objeto do tipo da superclasse e portanto há “espaço” para realizarmos tal operação. Mas o compilador não aceitará uma atribuição direta, é preciso usarmos o seguinte artifício: CD ATRIBUTO1; ATRIBUTO2; METODO1( ); METODO2( ); Obj Item CD coisa = (CD) new Item(...);

4 Conversão de Tipos (casting) Essa operação é chamada conversão de tipo. Ao colocarmos o parênteses (operador de conversão de tipo) com o tipo de dado de destino, o compilador fará os ajustes necessários para que a informação seja entendida como o subtipo indicado e não retorna erro. Entretanto, esse tipo de conversão deve ser evitado. Em geral, um programa bem estruturado não requer conversão de tipos.

5 Conversão de Tipos (casting) Obs.: Esse tipo de conversão só funciona entre uma superclasse e uma subclasse. Não é possível converter duas subclasses entre si. Neste exemplo dá pra fazer conversão de veículo em carro ou veículo em bicicleta, porém bicicleta em carro ou carro em bicicleta não dá!

6 Autoboxing e classes empacotadoras Quando falamos sobre vetores, comentamos que os ArrayLists só podem ser usados para tipos objetos e que tipos primitivos como int, float, double,... não poderiam ser usados em listas dinâmicas. Java resolve esse problema através das Classes Empacotadoras, ou seja, classes que foram criadas a fim de transformar tipos primitivos em tipos objetos.

7 Autoboxing e classes empacotadoras Para cada tipo primitivo existe uma classe empacotadora: Tipo PrimitivoClasse Empacotadora byteByte shortShort intInteger longLong floatFloat doubleDouble charCharacter Boolean

8 Autoboxing e classes empacotadoras Inclusive já usamos algumas dessas classes ao converter valores digitados pelo usuário, como em: int x = Integer.parseInt(“100”); Autoboxing é uma operação executada automaticamente pelo Java quando usamos um valor do tipo primitivo onde seria necessário um tipo objeto (ou vice-versa, unboxing).

9 Autoboxing e classes empacotadoras Exemplo: private ArrayList lista;... public void adicionar(int valor){ lista.add(valor); } O método add( ) requer um OBJETO, então Java converte o int para Integer automaticamente.

10 Polimorfismo e Sobrescrita Quando escrevemos a classe Item e o método imprimir( ) pertencente a ela, conseguimos exibir todos os dados contidos em suas variáveis. Porém, quando esse método é herdado por uma subclasse, temos um problema...

11 Polimorfismo e Sobrescrita Onde está o nome do cantor? Onde está o nome do diretor? Onde está a plataforma? Onde está a quantidade de jogadores?

12 Polimorfismo e Sobrescrita Isso acontece por que apesar das subclasse saber tudo sobre a superclasse, a super classe não sabe nada sobre suas subclasses. A primeira idéia para resolver o problema é mover o método imprimir para as subclasses:

13 Polimorfismo e Sobrescrita Mas aqui vamos esbarrar em dois problemas:  O método imprimir( ) não vai encontrar as informações da superclasse;  A classe Catalogador não vai encontrar o método imprimir( ). ?

14 Polimorfismo e Sobrescrita Para resolver o problema usaremos um modelo em que há um método imprimir( ) na superclasse e métodos com mesmo nome nas subclasses.

15 Polimorfismo e Sobrescrita Nas subclasses iremos sobrescrever os comandos do método da superclasse. Quando chamamos o método imprimir( ) a versão da subclasse será executada primeiro. CDDVD

16 Polimorfismo e Sobrescrita Observe que adicionamos apenas uma instrução para imprimir o atributo da subclasse (cantor / diretor). As demais informações serão impressas a partir da chamada do método da superclasse através do comando super.imprimir( ); Completando o código das demais classes, a saída ficaria assim:

17 Polimorfismo e Sobrescrita Olha aí o cantor! Olha aí o diretor! Olha aí plataforma! Olha aí a quantidade de jogadores!

18 Polimorfismo e Sobrescrita O polimorfismo acontece quando uma mesma chamada de método, em momentos diferentes, invoca métodos diferentes.

19 Exercício Complete a implementação do sistema de catalogação com métodos imprimir( ) em cada subclasse que sobrescrevem o método da superclasse e exibem todos os atributos do objeto.

20 Referências BARNES. KOLLING. Programação orientada a objetos com Java. Uma introdução prática usando o BlueJ. 4ed. Pearson, 2009. SIERRA, Kathy. BATES, Bert. Use a Cabeça! Java. 2ed. Alta Books, 2007.


Carregar ppt "AULA 71-72 Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes"

Apresentações semelhantes


Anúncios Google