poo, em java, com eclipse e...

57
POO, em Java, com Eclipse e Netbeans

Upload: vanminh

Post on 09-Nov-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

POO, em Java,

com Eclipse e Netbeans

Page 2: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Tópicos da aula

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

Page 3: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A pilha e a heap

Page 4: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A Lição de anatomia do Dr. Tulp

Page 5: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A pilha e a heap

Heap

Pilha

Onde as coisas

residem

Page 6: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Pilha

Pilha

Page 7: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Heap

Heap

Page 8: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Um monte de bicicletas

Page 9: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Tipos de variáveis

Variáveis locais

Precisam ser inicializadas sempre

São inicializadas automaticamente

Page 11: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Criando objetos

Page 13: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A criação de Adão

Page 14: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Criando um

objeto de uma

classe

nome da classe

lista de argumentos

new ( )

Ou criando instanciando a

classe

Page 15: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Criando bicicletas

Page 16: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

As três etapas do

milagre da criação

a

heappilha

Page 17: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Chamando um construtorde outro

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

Page 18: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Exemplo

Page 19: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Exemplo

Page 20: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Exemplo com this

Page 22: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Exemplo com this

Page 23: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Herança

Page 24: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a
Page 25: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e 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

Page 26: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e 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

Page 28: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Classe CClasse B

Object

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

Classe D

A classe Object

Page 29: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A classe Object

Por exemplo:

• getClass( )

• equals( )

• toString( )

Page 30: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Herança – reutilização de campos

Classe A

Classe B Classe D

Classe C

Campo 1

...

Campo N

Page 32: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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

Classe A

Classe B Classe D

Classe C

Método 1

...

Método N

Page 34: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Classe A

Classe B

Herança – sobrescrevendo/ocultando

Método 1

Método 2

Método 2

Page 36: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Quando sobrescrever

métodos

Page 37: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Como derivar sub-classes ?

Pessoa

Estudante Professor

Classe mãe

Classe filha

Classe filha

Page 38: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Exemplo - herança

Page 45: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e 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

Page 46: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Chamando o main

Page 47: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

O resultado do main

Page 48: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

A classe Animal

Animal

tipocor

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

Eu sou um <tipo> <cor>

Page 49: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Código da classe Animal

Page 50: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Código da

classe

Cachorro

Chamadas ao construtor da classe

mãe

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

Page 52: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

Código da

classe

Cocker

Chamada ao construtor da classe

Cachorro

Chamada ao método show( ) da classe

Cachorro

Page 54: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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: POO, em Java, com Eclipse e Netbeanswiki.martin.lncc.br/bcorrea-istparacambi-oo1/file/java-oo-heranca.pdf · POO, em Java, com Eclipse e Netbeans. Tópicos da aula 1. A pilha e a

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?