Vous êtes sur la page 1sur 26

Programao Orientada a

Objetos
Herana e Polimorfismo
Prof. Jailton Carlos
Jailton.paiva@ifrn.edu.br
14/10/2010

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

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

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

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
6

Herana

Soluo: Utilizao de herana


Pessoa
-nome: String
-endereco: String
-telefone: String

Seta vazada
indica
herana

+calcImpostoDeRenda(): double

PessoaFisica

PessoaJuridica

-cpf: String
-rg: String
-dataNascimento: Calendar

-cnpj: String
-inscrEstadual: String
-inscrMunicipal: String

Atributos e
mtodos existem nas
subclasses

Pessoa Fsica e Pessoa


Jurdica herdam os
atributos e mtodos de
Pessoa.

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.
8

Herana
Estrutura Hierrquica e modular
Projeo de classes genricas que podem ser
especializadas em classes mais particulares.
Classes especializadas reutilizam o cdigo das
mais genricas.

Classe D A
CB
Especializada
C
Caractersticas
Herdadas

Classe Genrica

Classe
E 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 Simples
Animal
-nome: String
-sexo: String
-raca: String
+emitirSom()
+dormir()
+caminhar()
Leao

Gato

Tigre

Cachorro
Lobo

11

Hierarquias de Herana
Animal
-nome: String
-sexo: String
-raca: String

Gato possui todas as


caractersticas de
Animal e tambm de
Domestico.

+emitirSom()
+dormir()
+caminhar()

Selvagem

Domestrico
Gato

Leao

Tigre

Lobo

Cachorro

12

Herana em Java
Pessoa
-nome: String
-endereco: String
-telefone: String
+calcImpostoDeRenda(): double

PessoaFisica
-cpf: String
-rg: String
-dataNascimento: Calendar

14/10/2010

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() {
Usamos extends para
return cpf;
indicar herana em Java
}
public void setCpf(String cpf){
this.cpf = cpf;
}
}
13

Execuo
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());
}

Mtodo herdado da
classe Pessoa

Todos as caractersticas existentes na classe


Pessoa tambm existem na classe PessoaFisica 14
14/10/2010

Subtipos

Uma classe que herda de outra um subtipo

Herana representa relacionamento UM


Uma referncia a Animal
Carro UM veculo;
sempre poder apontar
Pessoa Fsica UMA Pessoa;
para uma instncia de Gato,
porque Gato UM Animal.
Gato UM Animal.

Podemos ter uma varivel do tipo Pessoa que


referencia um objeto do tipo PessoaFisica

Varivel p2 NO
executa mtodos da
classe PessoaFisica,
pois ela s conhece a
interface de Pessoa

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());
15

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.

16

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.

Chama o construtor
da classe pai, neste
caso, o construtor da
classe Ponto.

14/10/2010

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;
}
17
}

Classe Object

Classe base em JAVA


Tudo herda de Object
Define alguns mtodos:

public String toString()


public boolean equals()
entre outros...
Includo por padro
class Animal {

/* ... */
}

class Animal extends Object {

/* ... */
}

Cadeia de Construtores

Toda vez que instanciamos um objetos, o compilador


Java por padro chama todos os construtores padro
das superclasses.

Assuma que Gato


estende Animal. O
que ocorre quando
instanciamos Gato?

1.
2.
3.
4.

Gato g = new Gato()

5.

Pilhas de chamadas
4. Object()
3. Animal() chama super()
2. Gato chama super()
1. main chama new Gato()
14/10/2010

6.
7.
8.

9.

O construtor de Gato ser chamado.


O construtor de Animal ser chamado.
O construtor de Object ser chamado.
As variveis de instncia de Object recebero
seus valores explicitos.
A execuo do construtor de Object ser
concluda.
As variveis de instncia de Animal recebero
seu valores explcitos (se houver).
A execuo do construtor de Animal ser
concluda.
As variveis de instncia de Gato recebero
seus valores explcitos (se houver)
A execuo do construtor de gato ser
concluda
19

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();
}

a.setZ()

O tipo de uma varivel de


referncia determina os
mtodos que podem ser
chamados no objeto o qual
a varivel est referenciado.

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(){
}
}

Erro ao compilar, implcito


construtor super () no
definido.
Se a superclasse no tiver
um construtor sem
argumentos, as subclasses
no podero usar o
construtor padro.

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("");
}

BE.

Cadeia de construtores.
Chamada implcita do
construtor super()

Exerccio 1
Pessoa
-nome: String
-endereco: String
-telefone: String
+calcImpostoDeRenda(): double

PessoaFisica

PessoaJuridica

-cpf: String
-rg: String
-dataNascimento: Calendar

-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()

Selvagem

Domestrico
Gato

Leao

Tigre

Lobo

Cachorro

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