slides heranca ifrn
TRANSCRIPT
-
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