POO, em Java, com Eclipse e...
Transcript of POO, em Java, com Eclipse e...
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?