Buscar

LPI 08 - Herança

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagem de Programação I
Herança
Joinvile Batista Junior
UFGD - LPI 08 - Joinvile Batista Junior 22
Utilização correta da Herança
• a semântica (significado) do conceito de herança exige que a 
subclasse seja uma especialização da superclasse
– Carro é um Veiculo : herança bem definida
– Carro não é um Motor : herança incorreta
• Carro não deve herdar atributos do Motor por conveniência de 
implementação
• carro deverá acessar atributos do motor (ex. potência) através
dos métodos de Motor (lerPotência)
UFGD - LPI 08 - Joinvile Batista Junior 33
Sub Classe herda da Super Classe
• super classe
– define atributos e métodos comuns que serão herdados por suas 
subclasses
• subclasses (mais específicas) podem
– herdar da superclasse : atributos, relacionamentos e métodos 
comuns de uma superclasse de objetos
– acrescentar : atributos, relacionamentos e métodos específicos
– redefinir o comportamento de métodos herdados
UFGD - LPI 08 - Joinvile Batista Junior 44
Super Classe fatora Dados Comuns
• Super classe : Obra
– define dados comuns às subclasses : título, autor
• Sub classe : Livro
– herda dados comuns : título, autor
– define dados específicos : editora, edição, ano publicação
• Sub Classe : Tese
– herda dados comuns : título, autor
– define dados específicos : universidade, orientador, data
• Sub Classe : Relatório Técnico
– herda dados comuns : título, autor
– define dados específicos : empresa, grau de sigilo, data
UFGD - LPI 08 - Joinvile Batista Junior 55
Redefinindo o Comportamento de um Método Herdado
• Super classe : Obra
– define método descrição que gera um string concatenando os 
strings de título e autor
• public String descrição () { bloco_método }
• Sub classe : Livro
– redefine o corpo do método descrição herdado, concatenando os 
strings de : título, autor, editora, edição, ano publicação
• Sub Classe : Tese
– redefine o corpo do método descrição herdado, concatenando os 
strings de : título, autor, universidade, orientador, data
• Sub Classe : Relatório Técnico
– redefine o corpo do método descrição herdado, concatenando os 
strings de : título, autor, empresa, grau de sigilo, data
UFGD - LPI 08 - Joinvile Batista Junior 66
Conceituando o Polimorfismo na Sobreposição de Métodos
• um método definido na super classe pode ser sobreposto (ter seu corpo
redefinido) nas sub classes
• pelo fato do método sobreposto ter o mesmo cabeçalho (mesma assinatura e 
mesmo tipo de retorno) do método herdado (pois somente o corpo foi 
redefinido)
– objetos pertencentes a uma mesma hierarquia de classes podem 
responder a uma mesma solicitação (chamada ao mesmo método)
• uma operação pode ser solicitada a um objeto de uma determinada 
superclasse ou a um objeto de qualquer subclasse derivada
– o solicitante da operação não necessita saber se o objeto pertence à
superclasse ou qualquer uma de suas subclasses
• se a instância de objeto pertence à superclasse
– será executado o comportamento definido pela operação da superclasse
• se a instância de objeto pertence à subclasse
– será executado o comportamento definido pela operação redefinida na 
subclasse ou definida unicamente na superclasse
UFGD - LPI 08 - Joinvile Batista Junior 77
Utilizando a Sobreposição de Métodos
• uma variável definida com uma superclasse pode receber um objeto da 
superclasse ou um objeto de qualquer uma de suas subclasses
– definindo a variável com a super classe : Obra obra;
– atribuição 1 : obra = new Obra (“Java”, “Deitel”);
– atribuição 2 : obra = new Livro (“Java”, “Deitel”, “Pearson, 8, 2010);
– atribuição 3 : obra = new Tese (“Agentes”, “Adriana”, “UFGD”, 
“Claudia”, “10Out11”);
– atribuição 4 : obra = new Relatório (“Busca Semântica”, “Silvia”,
“Google”, Relatório.Sigilo.público, “11Set2008”);
• quando o solicitante chamar o método descrição
– String texto = obra.descricão ();
• o String retornado será função de qual objeto foi atribuido à variável obra
– 1 : texto = título + autor
– 2 : texto = título + autor + editora + edição + ano_publicação
– 3 : texto = título + autor + universidade + orientador + data
– 4 : texto = título + autor + empresa + grau de sigilo + data
UFGD - LPI 08 - Joinvile Batista Junior 88
Chamada de Métodos
• atribuir um objeto de subclasse a uma variável de superclasse
Obra obra = new Livro (“Java”, “Deitel”, “Pearson”, 8, 2010); 
• chama método definido somente na superclasse
String titulo = obra.getTitulo(); 
• chama método sobreposto na subclasse
String descrição = obra.descrição(); // retorna atributos do livro
• chama método definido somente na subclasse
– alternativa 1: converte para subclasse na chamada do método
String editora = ((Livro)obra).getEditora (); 
– alternativa 2: converte para subclasse e depois chama método
Livro livro = (Livro) obra;
String editora = livro.getEditora (); 
UFGD - LPI 08 - Joinvile Batista Junior 99
Super Classe Obra
package entidade;
public class Obra {
protected String título;
protected String autor;
public Obra (String título, String autor) {
this.titulo = título; 
this.autor = autor;
}
public String getTitulo () { return título; }
public void setTitulo (String título) { this.título = título; }
public String getAutor () { return autor; }
public void setAutor (int autor) { this.autor = autor; }
public String descrição () { return "Livro: " + título + "\n Autor: " + autor; }
}
UFGD - LPI 08 - Joinvile Batista Junior 1010
Subclasse Livro
package entidade;
public class Livro extends Obra {
private String editora;
private int edição;
private int ano_publicação;
public Livro (String título, String autor, String editora, int edição,
int ano_publicação) {
super (título, autor);
this.editora = editora; 
this.edição = edição;
this.ano_publicação = ano_publicação;
}
UFGD - LPI 08 - Joinvile Batista Junior 1111
Subclasse Livro
public String getEditora () { return editora; }
public void setEditora (String editora) { this.editora = editora; }
public int getEdição () { return edição; }
public void setEdição (int edição) { this.edição = edição; }
public int getAnoPublicação () { return ano_publicação; }
public void setAnoPublicação (int ano_publicação) {
this.ano_publicação = ano_publicação;
}
public String descrição () {
return "Livro: " + título + "\n Autor: " + autor + "\n Editora: " + editora
+ "\n Edição: " + edição + "\n Ano de Publicação: " + ano_publicação;
}
}
UFGD - LPI 08 - Joinvile Batista Junior 1212
Classe Principal
package controle;
public class Principal {
static Obra[] obras = new Obra[3];
public static void main (String[] args) {
inicializaObras ();
imprimeObras ();
}
UFGD - LPI 08 - Joinvile Batista Junior 1313
Classe Principal
private static void inicializaObras () {
obras[0] = new Livro ("Core Java", "Horstman - Cornell",
"Sun Microsystems Press", 1, 1999);
obras[1] = new Tese ("Desenvolvimento de Aplicações Críticas",
"Paulo Oliveira", "Unicamp", "Roberto Sobral",
“29Nov2007”);
obras[2] = new Relatório ("Java para Software Embarcado",
"Adriana Messias", "Software Design", 0,
‘’30Set2012”);
}
private static void imprimeObras () {
for (int n = 0; n < obras.length; n++) {
System.out.println (obras[n].descrição());
}
}
}
UFGD - LPI 08 - Joinvile Batista Junior 1414
Exercícios - 8
• 8.1 – Complemente o programa com a definição das classes : Tese e 
Relatório.
• 8.2 – Transforme o programa da Biblioteca em uma Concessionária que 
comercializa os seguintes veículos: carros, motos e caminhões.

Outros materiais