Programao Orientada a Objetos
Herana e Polimorfismo
Prof. Jailton Carlos
14/10/2010 1
Plano de Aula Abstrao e Encapsulamento
Herana
Simples;
Multiplas;
Conceito Subtipo;
Palavra-cha super
Classe base Object;
Cadeia de Construtores
Exerccios de Fixao
Exerccios em sala de aual
14/10/2010 2
3
Abstrao e Encapsulamento So conceitos complementares
Abstrao foca sobre o comportamento observvel de um objeto, enquanto encapsulamento se concentra na execuo que d origem a esse comportamento
O encapsulamento proporciona barreiras explcitas entre abstraes diferentes e, portanto, leva a uma separao clara das preocupaes.
Abstrao e Encapsulamento Interface
Viso externa da classe
O que os objetos da classes fazem
Definem o contrato da classe
O que o cliente precisa conhecer da classe
Implementao
Viso interna da classe
Como os objetos fazem as operao
Representao interna
14/10/2010 4
Abstrao e Encapsulamento Cliente no precisa (nem deve) conhecer a
implementao
Realizam o contrato definido pela interface
Atributos fazem parte da implementao
Declare-os como private
Nem todos os mtodos fazem parte da interface
Mtodos que servem para auxiliar outros mtodos
Declare-os private
Deixe public apenas o que o cliente deve saber
14/10/2010 5
6
Herana
Dado um sistema de venda que permita o cadastro de pessoa fsica ou Jurdica.
Como evita a redundncia?
O que eles tm em comum?
Como eles so relacionados?
PESSOA FSICA
Atributos:
Nome Endereco Telefone CPF
PESSOA JURDICA
Atributos:
Nome Endereco Telefone CNPJ Inscrio Estadual Inscrio Municipal
Pessoa
-nome: String-endereco: String-telefone: String
+calcImpostoDeRenda(): double
PessoaFisica
-cpf: String-rg: String-dataNascimento: Calendar
PessoaJuridica
-cnpj: String-inscrEstadual: String-inscrMunicipal: String
7
Herana
Pessoa Fsica e Pessoa
Jurdica herdam os
atributos e mtodos de
Pessoa.
Atributos e
mtodos existem nas
subclasses Seta vazada
indica
herana
Soluo: Utilizao de herana
8
Herana
Define uma relao entre as classes, onde uma classe compartilha a estrutura ou o comportamento definido e uma ou mais classes.
Herana representa, portanto, uma hierarquia de abstraes, na qual um subclasse herda de uma ou mais superclasses.
Duas razes mais comuns parar se usar a herana so:
Para promover a reutilizao de cdigos;
Par usar o polimorfismo.
Estrutura Hierrquica e modular
Projeo de classes genricas que podem ser especializadas em classes mais particulares.
Classes especializadas reutilizam o cdigo das mais genricas.
A B
C A
B A
B C
D
E
Caractersticas
Herdadas
Classe Genrica
Classe
Especializada
Classe
Especializada
Herana
Classe genrica, classe base, superclasse ou pai: Define variveis de instncia genricas e mtodos.
Classe especializada, derivada, subclasse ou filha: Especializa, estende ou herda os mtodos genricos de
uma superclasse;
Define apenas os mtodos que so especializados.
Herana
11
Herana Simples
Animal
-nome: String-sexo: String-raca: String
+emitirSom()+dormir()+caminhar()
Leao
Tigre Cachorro
Gato
Lobo
Animal
-nome: String-sexo: String-raca: String
+emitirSom()+dormir()+caminhar()
Leao
TigreCachorro
Gato
Lobo
DomestricoSelvagem
12
Hierarquias de Herana
Gato possui todas as
caractersticas de
Animal e tambm de
Domestico.
Herana em Java
14/10/2010 13
Pessoa
-nome: String-endereco: String-telefone: String
+calcImpostoDeRenda(): double
PessoaFisica
-cpf: String-rg: String-dataNascimento: Calendar
class Pessoa {
private String nome, endereco;
private String telefone;
public String getNome(){
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
class PessoaFisica extends Pessoa {
private String cpf, rg
private Calendar dtNascimento;
public String getCpf() {
return cpf;
}
public void setCpf(String cpf){
this.cpf = cpf;
}
}
Usamos extends para
indicar herana em Java
Execuo
14/10/2010 14
Pessoa
-nome: String-endereco: String-telefone: String
+calcImpostoDeRenda(): double
PessoaFisica
-cpf: String-rg: String-dataNascimento: Calendar
public static void main(String[] args) {
Pessoa p = new Pessoa();
PessoaFisica pf = new PessoaFisica();
p.setNome("Joo");
pf.setNome("Jos");
pf.setCpf("032...");
System.out.println(p.getNome());
System.out.println(pf.getNome());
System.out.println(pf.getCpf());
}
Todos as caractersticas existentes na classe
Pessoa tambm existem na classe PessoaFisica
Mtodo herdado da
classe Pessoa
15
Subtipos Uma classe que herda de outra um subtipo
Herana representa relacionamento UM
Carro UM veculo;
Pessoa Fsica UMA Pessoa;
Gato UM Animal.
Podemos ter uma varivel do tipo Pessoa que referencia um objeto do tipo PessoaFisica
Pessoa p1,p2; p1 = new Pessoa(); p2 = new PessoaFisica(); p1.setNome("Joo"); p2.setNome("Jos"); //p2.setCPF(032..."); System.out.printf(%s,%s",p1.getNome(),p2.getNome());
Varivel p2 NO
executa mtodos da
classe PessoaFisica,
pois ela s conhece a
interface de Pessoa
Uma referncia a Animal
sempre poder apontar
para uma instncia de Gato,
porque Gato UM Animal.
16
Subtipos Uma referncia a Pessoa sempre poder apontar
para uma instncia de PessoaFisica, porque PessoaFiscia UMA Pessoa;
O que torna possvel a superclasse referenciar uma instncia da subclasse a certeza de que a subclasse pode fazer tudo que a superclasse pode fazer.
super Palavra-chave que faz o compilador chamar o mtodo
ou construtor da superclasse.
O compilador Java invoca super implicitamente para chamar o construtor da superclasse.
14/10/2010 17
public class Ponto { protected int x,y;
public Ponto (int x, int y) { x = 0; y = 0;
} } public class Quadrado extends Ponto{ protected double lado;
public Quadrado(int x, int y, double lado){ super(x,y); this.lado=lado;
} }
Chama o construtor
da classe pai, neste
caso, o construtor da
classe Ponto.
Classe Object
Classe base em JAVA
Tudo herda de Object
Define alguns mtodos: public String toString()
public boolean equals()
entre outros...
class Animal {
/* ... */ }
class Animal extends Object {
/* ... */ }
Includo por padro
Cadeia de Construtores Toda vez que instanciamos um objetos, o compilador
Java por padro chama todos os construtores padro das superclasses.
14/10/2010 19
Assuma que Gato
estende Animal. O
que ocorre quando
instanciamos Gato?
Gato g = new Gato()
1. O construtor de Gato ser chamado.
2. O construtor de Animal ser chamado.
3. O construtor de Object ser chamado.
4. As variveis de instncia de Object recebero
seus valores explicitos.
5. A execuo do construtor de Object ser
concluda.
6. As variveis de instncia de Animal recebero
seu valores explcitos (se houver).
7. A execuo do construtor de Animal ser
concluda.
8. As variveis de instncia de Gato recebero
seus valores explcitos (se houver)
9. A execuo do construtor de gato ser
concluda
Pilhas de chamadas
4. Object()
3. Animal() chama super()
2. Gato chama super()
1. main chama new Gato()
Dvidas
14/10/2010 20
Exerccio de fixao Identifique o erro e explique por qu?
public class A { public void setX () {} public void setY () {}
} public class B extends A{
public void setZ () {} } public static void main(String[] args) { A a = new B(); B b = new B() a.setX(); b.setY(); a.setZ(); }
O tipo de uma varivel de
referncia determina os
mtodos que podem ser
chamados no objeto o qual
a varivel est referenciado.
a.setZ()
Exerccio de fixao Identifique o erro:
public class Animal { private String nome;
public Animal (String nome) { this.nome = nome;
} } public class Gato extends Animal{
public Gato(){ }
}
Se a superclasse no tiver
um construtor sem
argumentos, as subclasses
no podero usar o
construtor padro.
Erro ao compilar, implcito
construtor super () no
definido.
Exerccio de fixao Qual o resultado do cdigo a seguir?
public class Animal { private String nome;
public Animal() { System.out.print("B"); }
} public class Cachorro extends Animal { public Cachorro() { System.out.print("C"); } public Cachorro(String s) { System.out.print("E"); } } public static void main(String[] args) { new Cachorro("D"); System.out.println(""); }
Cadeia de construtores.
Chamada implcita do
construtor super()
BE.
Exerccio 1 Pessoa
-nome: String-endereco: String-telefone: String
+calcImpostoDeRenda(): double
PessoaFisica
-cpf: String-rg: String-dataNascimento: Calendar
PessoaJuridica
-cnpj: String-inscrEstadual: String-inscrMunicipal: String
Passo 1: implementar as classes conforme o diagrama; uso do extends. Passo 2: criar construtores padro para cada classe e imprimir seus respectivos nomes; Passo 3: criar construtores que receba como parmetros variveis para inicializar os atributos; uso do super. Passo 4: criar os mtodos gets e sets; Passo 5: criar uma classe Principal com o mtodo main para criar as instncias p, pF e pJ de sua respectivas classes. Passo 6: Verificar o que ocorre se chamar p.SetCPF() e p.setCNPJ() e explique; Passo 7: Verificar o que ser impresso ao chamar o construtor padro de PessoaFisica e de PessoaJuridica. uso cadeia de construtores.
Exerccio 2 Implementar as classes do diagrama:
Animal
-nome: String-sexo: String-raca: String
+emitirSom()+dormir()+caminhar()
Leao
TigreCachorro
Gato
Lobo
DomestricoSelvagem
Referncias Sierra, K.; Bates, B. SCJP: Certificao Sun para Programador Java 6 Guia de Estudo. Alta Books, 2008. Horstmann, C. S; Cornell, G. Core Java: Volume I Fundamentos. 8 edio. Pearson, 2010. DEITEL, H. M.; DEITEL, P. J. Java: como programar. 8 Edio. Pearson, 2010. Material de aula da disciplina de POO criado pelo prof. Alexandre e Bruno Gomes.
14/10/2010 26
Recommended