Herança e Polimorfismo - Parte II -

Documentos relacionados
Herança e Polimorfismo -Parte II -

Herança e Polimorfismo - Parte I -

Herança e Polimorfismo -Parte I - Mário Meireles Teixeira O exemplo DoME. Database of Multimedia Entertainment

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Notas de Aula 04: Herança e polimorfismo.

Laboratório de Programação. Aula 2 Java 5COP088. Aula 2 Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Professor Leonardo Cabral da Rocha Soares Lattes:

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagens de Programação Aula 12

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Programação Orientada a Objetos SANTOS, Rafael

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Conceitos de Programação Orientada a Objetos

Programação por Objectos. Java

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

AULA TEÓRICA 9. Tema 8. Herança (continuação) Ø Sobreposição de métodos. Ø Variáveis e métodos estáticos. Ø Hierarquia de classes.

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Laboratório de Programação. Aula 2 Java 5COP088. Aula 2 Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

4 Conceito de Herança

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação Java (nível intermediário) 4. Polimorfismo

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Linguagem de Programação. Diagrama de classes

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Orientação a Objetos AULA 06

Classes e Objetos. Sintaxe de classe em Java

Aula. Renata Pontin de Mattos Fortes 2006

Programação por Objectos. Java

Linguagem de Programação III

Lição 11 Herança, polimorfismo e interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Java para Desktop. Programação Orientada à Objetos 2 JSE

Interfaces. Classes abstratas que possuem apenas métodos abstratos. Na Interface: Métodos são implicitamente. Campos são implicitamente

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Polimorfismo. O que é polimorfismo?

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Classe Abstrata e Interface

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Reutilização de Classes Cap. 8 Introdução à Programação OO Rafael Santos

9 Classes Abstractas e Interfaces

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Herança (parte 2) Redefinição de métodos AULA 11

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Java Como Programar, 8/E

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Introdução à Programação. Encapsulamento e Herança

Linguagem de Programação IV Introdução

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Palavras Reservadas da Linguagem Java

Linguagem de Programação II Implementação

COMPORTAMENTOS - Observações

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Interfaces. Principais conceitos. Classes abstratas Interfaces Herança múltipla. Mário Meireles Teixeira.

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Linguagem de Programação II Herança

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

Laboratório de programação II

Programação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

extendsé usado para indicar herança em JAVA

Programação de Computadores - I. Profª Beatriz Profº Israel

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

Programação Orientada a Objetos

3.4. Programação Orientada a Objetos

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Transcrição:

Herança e Polimorfismo - Parte II - Programação Orientada a Objetos Java Prof. Geraldo Braz Junior

A hierarquia do exemplo DoME 2

Saída incompleta O que queremos CD: A Swingin' Affair (64 mins)* Frank Sinatra tracks: 16 my favourite Sinatra album video: The Matrix (136 mins) Andy & Larry Wachowski must see if interested in virtual reality! O que temos de fato title: A Swingin' Affair (64 mins)* my favourite Sinatra album title: The Matrix (136 mins) must see if interested in virtual reality! 3

O problema O método print, implementado em Item, imprime apenas os campos comuns às classes A herança é uma via de mão única: uma subclasse herda os campos da superclasse; porém a superclasse nada sabe sobre os campos de suas subclasses 4

Tentando resolver o problema Coloque print onde ele tem acesso às informações de que precisa Cada subclasse tem agora sua própria versão de print Mas os campos de Item são privados, portanto não acessíveis às subclasses Database não consegue encontrar um método print em Item, pois a superclasse não enxerga os métodos das subclasses

Tipo estático e dinâmico (1) Uma hierarquia de tipos mais complexa requer mais conceitos para descrevê-la Alguns novos termos: tipo estático; tipo dinâmico; e encaminhamento e pesquisa de método (method dispatch/lookup) 6

Tipo estático e dinâmico (2) Qual é o tipo de c1? Car c1 = new Car(); Qual é o tipo de v1? Vehicle v1 = new Car(); 7

Tipo estático e dinâmico (3) O tipo declarado de uma variável (tempo de compilação) é seu tipo estático O tipo de objeto que uma variável referencia (tempo de execução) é seu tipo dinâmico O trabalho do compilador é verificar violações nos tipos estáticos Item item = (Item) iter.next(); item.print(); // Erro em tempo de compilação // Compilador não enxerga o método print() Durante a execução do programa, Item deverá referenciar CD ou Video, mas o compilador não tem como saber disso 8

Sobrescrever: a solução Método print tanto na superclasse como nas subclasses. Satisfaz a verificação do tipo estático e dinâmico. 9

Sobrescrição Superclasse e subclasse definem métodos com a mesma assinatura Cada uma das versões do método tem acesso aos campos da sua classe O método na superclasse satisfaz a verificação do tipo estático O método da subclasse é chamado em tempo de execução ele sobrescreve (redefine) a versão da superclasse e tem precedência de execução sobre ela 10

Pesquisa de método (1) é instância de... Nenhuma herança ou polimorfismo. O método óbvio é selecionado 11

Pesquisa de método (2) é instância de... 12 Herança, mas sem sobrescrição. A pesquisa sobe na hierarquia da herança, procurando por uma correspondência de método

Pesquisa de método (3) Polimorfismo e sobrescrição. A primeira versão encontrada é utilizada 13

Resumo da pesquisa de método 14 A variável v1 é acessada O objeto armazenado na variável é encontrado A classe do objeto é encontrada É pesquisada na classe uma correspondência de método (mesma assinatura) Se nenhuma correspondência for encontrada, a superclasse é pesquisada Isso é repetido até que uma correspondência seja encontrada ou a hierarquia da classe seja exaurida Métodos sobrescritos têm precedência sobre os métodos das superclasses

Chamadas super em métodos Métodos sobrescritos são ocultados...... mas, freqüentemente, queremos ser capazes de chamá-los Um método sobrescrito pode ser chamado a partir do método que o sobrescreve - super.method(...) Ao contrário da utilização de super nos construtores, o método da superclasse tem que ser chamado explicitamente 15

Chamando um método sobrescrito public class Item { public void print() { System.out.println(title + " (" + playingtime + mins)"); System.out.println(" " + comment); 16 public class CD extends Item { public void print() { super.print(); // detalhes de Item System.out.println(" " + artist); System.out.println(" tracks: " + numberoftracks);

Polimorfismo de método Discutimos o que é conhecido como polimorfismo de método Como vimos, uma variável polimórfica pode armazenar objetos de diferentes tipos Em Java, chamadas de método também são polimórficas: Uma mesma chamada de método pode, em momentos diferentes, invocar diferentes métodos O método real chamado depende do tipo dinâmico da variável (objeto para o qual ela aponta) 17

Os métodos da classe Object Métodos em Object são herdados por todas as classes Qualquer um desses pode ser sobrescrito. O método tostring é comumente sobrescrito: public String tostring() Retorna uma representação de string do objeto 18

Sobrescrevendo tostring (1) public class Item { public String tostring() { String line1 = title + " (" + playingtime + " mins)"); if(gotit) { return line1 + "*\n" + " " + comment + "\n"); else { return line1 + "\n" + " " + comment + "\n"); public class CD extends Item { public String tostring() { return super.tostring() + + artist + \n tracks: + numberoftracks + \n ; 19

Sobrescrevendo tostring (2) Freqüentemente, métodos print explícitos podem ser omitidos de uma classe: System.out.println(item.toString()); Chamadas a println com apenas um objeto fazem com que tostring seja chamado automaticamente: System.out.println(item); 20

Sobrescrevendo tostring (3) public class Database { public void list() { for(iterator iter = items.iterator(); iter.hasnext(); ) { System.out.println(iter.next()); 21 A chamada a iter.next() retorna o tipo estático Object. O tipo dinâmico é CD ou Video Como Object está sendo impresso e não é uma String, o método tostring é invocado Isso é válido porque Object declara um método tostring - - verificação de tipos estática A saída aparece corretamente, pois os tipos dinâmicos possíveis (CD ou Video) sobrescrevem tostring

Acesso protegido Acesso privado na superclasse pode ser bem restritivo para uma subclasse. O relacionamento mais próximo da herança é suportado pelo acesso protegido (protected) O acesso protegido é mais restritivo que o acesso público O acesso protegido permite acesso aos campos e métodos dentro da própria classe e todas as suas subclasses É recomendável manter os campos como private: Melhor definir métodos de acesso e métodos modificadores protegidos 22

23 Níveis de acesso