java oo-heranca

57
POO, em Java, com Eclipse e Netbeans

Upload: rogarfil

Post on 27-Jun-2015

338 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Java oo-heranca

POO, em Java,

com Eclipse e Netbeans

Page 2: Java oo-heranca

Tópicos da aula

1. A pilha e a heap2. Criando objetos3. Herança4. Exemplo de herança

Page 3: Java oo-heranca

A pilha e a heap

Page 4: Java oo-heranca

A Lição de anatomia do Dr. Tulp

Page 5: Java oo-heranca

A pilha e a heap

Heap

Pilha

Onde as coisas

residem

Page 6: Java oo-heranca

Pilha

Pilha

Page 7: Java oo-heranca

Heap

Heap

Page 8: Java oo-heranca

Um monte de bicicletas

Page 9: Java oo-heranca

Tipos de variáveis

Variáveis

Instância

Locais

Declaradas dentro de um método, inclusive como parâmetros do

método

Declaradas dentro de uma classe, mas não

dentro de um método

Page 10: Java oo-heranca

Tipos de variáveis

Variáveis locais

Precisam ser inicializadas sempre

São inicializadas automaticamente

Page 11: Java oo-heranca

A pilha e a heapPilha

Heap

Na pilha residem as variáveis locais,

referências a objetos e chamadas a

métodos

Na heap residem os objetos e as

variáveis de instância

Page 12: Java oo-heranca

Criando objetos

Page 13: Java oo-heranca

A criação de Adão

Page 14: Java oo-heranca

Criando um

objeto de uma

classe

nome da classe

lista de argumentos

new ( )

Ou criando instanciando a

classe

Page 15: Java oo-heranca

Criando bicicletas

Page 16: Java oo-heranca

As três etapas do

milagre da criação

a

heappilha

Page 17: Java oo-heranca

Chamando um construtorde outro

Ele precisa ser o primeiro comandoEle só pode ser usado em construtores

Page 18: Java oo-heranca

Exemplo

Page 19: Java oo-heranca

Exemplo

Page 20: Java oo-heranca

A auto-referência this

Cada objeto pode acessar uma referência a si próprio por meio da

palavra-chave this

this.< nomeDaVariávelDeInstância >

Page 21: Java oo-heranca

Exemplo com this

Page 22: Java oo-heranca

Exemplo com this

Page 23: Java oo-heranca

Herança

Page 24: Java oo-heranca
Page 25: Java oo-heranca

Herança

Classe A

Classe B

Classe mãeou

Super-classe

Classe filhaou

Sub-classe Conforme os atributos

de visibilidade, a sub-

classe herda as

características da super-classe

Page 26: Java oo-heranca

Herança – como descobrir ?

Classe A Classe B

B é sub-classe de A ?isto é,

B estende A ?Faça o teste:

B é uma A?

Page 27: Java oo-heranca

Classe C

Classe G

Classe D

Classe F

Classe B

Classe E

Super-classes de C

Sub-classes de C

Classe A

Herança

Page 28: Java oo-heranca

Classe CClasse B

Object

É a classe mãe de todas as outras classes em Java

Classe D

A classe Object

Page 29: Java oo-heranca

A classe Object

Por exemplo:

• getClass( )

• equals( )

• toString( )

Page 30: Java oo-heranca

Herança e visibilidade

Private Default Protected Public

Mesma classe Sim Sim Sim Sim

Outra classe, mesmo pacote

Não Sim Sim Sim

Sub-classe, outro pacote

Não Não Sim Sim

Fora de sub-classe, outro pacote

Não Não Não Sim

Acesso permitido

Herança

Page 31: Java oo-heranca

Herança – reutilização de campos

Classe A

Classe B Classe D

Classe C

Campo 1

...

Campo N

Page 32: Java oo-heranca

Podem ser criados campos novos, inclusive com o mesmo nome. Nesse

caso campo correspondente da super-classe é ocultado

Campo 1

Campo 2Classe A

Classe B

Campo 3

Herda os camposCampo 1

Campo 2

o Campo 3 é novo

Herança – reutilização de campos

Page 33: Java oo-heranca

Herança – reutilização de métodos

Classe A

Classe B Classe D

Classe C

Método 1

...

Método N

Page 34: Java oo-heranca

Classe A

Classe B

Classe C

Método 3

Sub-classes precisam implementar apenas

aquilo que acrescentam à super-classe

Método 1

Método 2

Método 4

A Classe C herda o Método 1 e o Método 2

da Classe A e oMétodo 3 da Classe B

Herança – reutilização de métodos

Page 35: Java oo-heranca

Classe A

Classe B

Herança – sobrescrevendo/ocultando

Método 1

Método 2

Método 2

Page 36: Java oo-heranca

Quando sobrescrever

métodos

Page 37: Java oo-heranca

Como derivar sub-classes ?

Pessoa

Estudante Professor

Classe mãe

Classe filha

Classe filha

Page 38: Java oo-heranca

public class Pessoa{

protected String nome;

protected String endereco;

...

}

public class Estudante extends Pessoa {

...

}

Declaração da classe mãe

palavra-chave

Declaração da classe filha

Classemãe

Page 39: Java oo-heranca

Os construtorespublic class Pessoa{

protected String nome;

protected String endereco;

public Pessoa(){

System.out.println(“Construtor, a partir

de Pessoa”);

nome = ""; endereco = "";

}

. . . .

}

public class Estudante extends Pessoa {

public Estudante(){

System.out.println(“Construtor, a partir

de Estudante”);

}

. . . .

}

Construtor deEstudante

Construtor dePessoa

Page 40: Java oo-heranca

Chamadas aos construtores

Quando um objeto de uma sub-classe é instanciado, o construtor default da super-classe,

é invocado implicitamente, antes do construtor da sub-classe ser invocado

public static main( String[] args ) {

Estudante gilberto = new Estudante();

}

Construtor, a partir de Pessoa

Construtor, a partir de Estudante

Criando gilberto

um objeto da classe

Estudante

Page 41: Java oo-heranca

A palavra-chave super

Tal chamada resultará na execuçãodo construtor relevante (aquele

associado aos parâmetros passados) da super-classe

Uma sub-classe pode, também, chamar

explicitamente um construtor da super-classe

imediatamente superior

Page 42: Java oo-heranca

Usando super

public Estudante(){

super( “Gustavo", “Av. Getúlio Vargas, 300" );

System.out.println(“Construtor de Pessoa,

a partir de Estudante");

}

Passagem dos parâmetrosnome e endereco

de acordo com a assinatura do construtor da super-classe,

Pessoa

A chamada a super() precisa sero primeiro comando no construtor

A chamada a super() só pode ser feita a partir de um construtor

Page 43: Java oo-heranca

Usando super

public Student() {

super.nome = “Gustavo”;

super.endereco = “Av. Getúlio Vargas, 300”;

}

Outra forma de usar super é empregar a sintaxe do . para referenciar os membros

da super-classe ( semelhante a this )

Page 44: Java oo-heranca

Exemplo - herança

Page 45: Java oo-heranca

Um exemplo Animal !Construiremos a seguir

um exemplo mais longo, envolvendo a criação de objetos, os conceitos de

herança e o de polimorfismo (sobre o

método show( ) ).Demonstraremos também

a utilização de super, super( ) e this .

Animal

Cachorro

Cocker

O exemplo envolve três classes no seguinte

esquema de herança

Page 46: Java oo-heranca

Chamando o main

Page 47: Java oo-heranca

O resultado do main

Page 48: Java oo-heranca

A classe Animal

Animal

tipocor

Animal( tipo, cor )show( )getCor( )

Eu sou um <tipo> <cor>

Page 49: Java oo-heranca

Código da classe Animal

Page 50: Java oo-heranca

A subclasse Cachorro

Cachorro

nomeraça

Cachorro( nome, cor)Cachorro( nome, raça, cor )show( )

Eu sou um <tipo> <cor>

<nome> é um <raça>

Naturalmente a subclasse Cachorro herda da classe

mãe, Animal, os campos tipoe cor e pode utilizar os

métodos show( ) e getCor( ) definidos na Animal

Page 51: Java oo-heranca

Código da

classe

Cachorro

Chamadas ao construtor da classe

mãe

Chamada ao método show( ) da classe mãe

Page 52: Java oo-heranca

A subclasse Cocker

Cocker

vacina

Cocker( nome, cor, vacina)show( )

O método show( ) exibirá na tela:• as mensagens que herda da

classe mãe • e também uma mensagem

que depende do valor do campo vacina

Eu sou um <tipo> <cor><nome> é um <raça>

Naturalmente a subclasse Cocker herda da classe mãe, Cachorro , os campos nome e raça e herda da classe avó os

campos tipo e cor

Se vacina = true: Cachorro vacinado !

Se vacina = false: Vacinar cachorro !

Page 53: Java oo-heranca

Código da

classe

Cocker

Chamada ao construtor da classe

Cachorro

Chamada ao método show( ) da classe

Cachorro

Page 54: Java oo-heranca

Exercício 1

Criar uma classe Pessoa com:• Atributos:

– nome;– endereço,;– email;– telefone

• Construtores:– default;– que receba nome e email;– que receba nome, endereço, email e telefone (lembre-se que podemos

chamar outros construtores da própria classe através do this)

• Utilizar encapsulamento.• Sobrescrever o método toString() que pertence a classe Object para

imprimir os dados no formato:(Nome: xxx /n Email: xxx /n etc...)

• Criar classe com método main e instanciar 5 pessoas e imprimir as instâncias

Page 55: Java oo-heranca

Exercício 2

Estender a classe Pessoa para duas outras classes• PessoaFisica

– Possui o atributo CPF

• PessoaJuridica– Possui o atributo CNPJ

• Sobrescrever o método toString() para imprimir os dados adicionais alem dos da classe “mãe”

• Utilizar a super nos construtores das classes filhas• Criar uma classe com método main e instanciar 3

pessoas de cada

Page 56: Java oo-heranca

Exercício 3

Nosso sistema possui uma classe chamada Manobrista

que possui um método chamado estacionar. Este método recebe um objeto e realiza as seguintes operações:

• acelerar;• freiar;• virar(direção);• engatarMarcha(marcha);

Sabendo que osistema pode receber vários tipos de veículos (carros, motos, caminhões, ônibus), crie uma hierarquia de classes para resolver o problema do manobrista.

Page 57: Java oo-heranca

Exercício 4

Nosso estacionamento recebe um novo cliente chamado James Bond. Ele trouxe dois carros para estacionar. Como seriam as classes para estes carros? Qual classe estes carros devem estender e quais atributos devemos modificar?

Sabendo que os carros de Bond sempre tem algo diferente de outros carros, qual a solução ideal para resolvermos este problema?