java oo-heranca

Post on 27-Jun-2015

338 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

POO, em Java,

com Eclipse e Netbeans

Tópicos da aula

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

A pilha e a heap

A Lição de anatomia do Dr. Tulp

A pilha e a heap

Heap

Pilha

Onde as coisas

residem

Pilha

Pilha

Heap

Heap

Um monte de bicicletas

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

Tipos de variáveis

Variáveis locais

Precisam ser inicializadas sempre

São inicializadas automaticamente

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

Criando objetos

A criação de Adão

Criando um

objeto de uma

classe

nome da classe

lista de argumentos

new ( )

Ou criando instanciando a

classe

Criando bicicletas

As três etapas do

milagre da criação

a

heappilha

Chamando um construtorde outro

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

Exemplo

Exemplo

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 >

Exemplo com this

Exemplo com this

Herança

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

Herança – como descobrir ?

Classe A Classe B

B é sub-classe de A ?isto é,

B estende A ?Faça o teste:

B é uma A?

Classe C

Classe G

Classe D

Classe F

Classe B

Classe E

Super-classes de C

Sub-classes de C

Classe A

Herança

Classe CClasse B

Object

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

Classe D

A classe Object

A classe Object

Por exemplo:

• getClass( )

• equals( )

• toString( )

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

Herança – reutilização de campos

Classe A

Classe B Classe D

Classe C

Campo 1

...

Campo N

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

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

Classe A

Classe B Classe D

Classe C

Método 1

...

Método N

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

Classe A

Classe B

Herança – sobrescrevendo/ocultando

Método 1

Método 2

Método 2

Quando sobrescrever

métodos

Como derivar sub-classes ?

Pessoa

Estudante Professor

Classe mãe

Classe filha

Classe filha

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

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

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

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

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

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 )

Exemplo - herança

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

Chamando o main

O resultado do main

A classe Animal

Animal

tipocor

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

Eu sou um <tipo> <cor>

Código da classe Animal

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

Código da

classe

Cachorro

Chamadas ao construtor da classe

mãe

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

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 !

Código da

classe

Cocker

Chamada ao construtor da classe

Cachorro

Chamada ao método show( ) da classe

Cachorro

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

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

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.

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?

top related