• Save
POO - 10 - Herança
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,333
On Slideshare
2,523
From Embeds
1,810
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 1,810

http://bnascimento.com 1,810

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Programação Orientada a Objetos Composição e Herança Reutilização de Classes Ludimila Monjardim Casagrande 2012
  • 2. Reutilização  Uma das características mais importantes das linguagens orientadas a objetos é a capacidade de facilitar a reutilização de código – o aproveitamento de classes e métodos que já estejam implementados e cujo funcionamento já tenha sido testado e comprovado.  Reutilização de código:  diminui o esforço de implementação;  facilita a manutenção;  minimiza a possibilidade de erros.Composição e Herança ©2012 Ludimila Monjardim Casagrande 2
  • 3. Mecanismos de Reutilização  Existem dois mecanismos básicos de reutilização de classes:  Composição (ou Delegação)  Herança  Com composição, usamos uma instância de uma classe como campo em outra classe.  Com herança, criamos uma classe nova como uma extensão direta da classe base.Composição e Herança ©2012 Ludimila Monjardim Casagrande 3
  • 4. Composição ou Delegação  Uma possível forma de reutilizar métodos de uma classe base em outra classe é incluindo uma instância da classe base como um dos atributos da nova classe.  Para que os métodos da classe base sejam executados, escrevemos métodos na classe nova que chamam os da classe base, delegando dessa forma a execução dos métodos.Composição e Herança ©2012 Ludimila Monjardim Casagrande 4
  • 5. Exemplo public class DataHora { // declaração da classe private Data estaData; // referência a uma instância da classe Data private Hora estaHora; // referência a uma instância da classe Hora public DataHora(int dia, int mes, int ano, int hora, int minuto, int segundo) { estaData = new Data(dia, mes, ano); estaHora = new Hora(hora, minuto, segundo); } public DataHora( int dia, int mes, int ano) { estaData = new Data(dia, mes, ano); estaHora = new Hora(); } public String toString() { return estaData + " " + estaHora; } } // fim da classe DataHoraComposição e Herança ©2012 Ludimila Monjardim Casagrande 5
  • 6. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 6
  • 7. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 7
  • 8. Exemplo  A classe DataHora reutiliza as classes Data e Hora através de composição ou delegação.  A data e hora são representadas por instâncias das respectivas classes que estão embutidas na classe DataHora, e toda a interação entre esta classe e as embutidas é feita por meio da chamada de métodos das classes embutidas.Composição e Herança ©2012 Ludimila Monjardim Casagrande 8
  • 9. Exemplo  O construtor para a classe DataHora, que recebe argumentos para inicializar todos os campos que esta classe indiretamente contém, chama os construtores das classes Data e Hora para inicializar os campos das instâncias destas classes.Composição e Herança ©2012 Ludimila Monjardim Casagrande 9
  • 10. Composição e Modificadores de Acesso  Classes que contêm instâncias de outras classes estão submetidas às restrições impostas pelos modificadores de acesso utilizados na classe embutida mais as restrições impostas pela própria classe.  Exemplo:  Atributos estaData e estaHora na classe DataHora.Composição e Herança ©2012 Ludimila Monjardim Casagrande 10
  • 11. Considerações sobre a Composição  Reutilização de classes via delegação é útil quando a classe que reutiliza instâncias de outras é composta pelas outras classes.  No entanto, esse mecanismo não é o mais natural quando se trata da criação de classes que são especializações de um dado conceito.Composição e Herança ©2012 Ludimila Monjardim Casagrande 11
  • 12. Herança  O outro mecanismo para reutilização de código é a herança, que permite que uma nova classe seja criada por meio da extensão de uma já existente.  Na nova classe são implementadas eventuais diferenças de comportamento em relação à classe base, são adicionados atributos e métodos e são reutilizados atributos e métodos da classe base.Composição e Herança ©2012 Ludimila Monjardim Casagrande 12
  • 13. Herança  A herança deve ser utilizada quando se deseja especializar uma classe e quando existe a relação de “é um” entre a subclasse e a superclasse.  Exemplos:  Aluno é uma Pessoa  Professor é uma PessoaComposição e Herança ©2012 Ludimila Monjardim Casagrande 13
  • 14. Exemplo  Se estivermos implementando um sistema para universidade, podemos pensar em classes como Aluno, Professor, Coordenador, Diretor, Secretária, etc.  Todas essas classes são pessoas. Portanto, podemos criá-las por meio do processo de herança, especializando a classe Pessoa.Composição e Herança ©2012 Ludimila Monjardim Casagrande 14
  • 15. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 15
  • 16. Exemplo  A sintaxe para criação de herança em Java é simples. Basicamente, dizemos que uma classe herda ou “estende” outra, através da palavra-chave extends. Assim, definimos a classe Aluno da seguinte forma:  public class Aluno extends PessoaComposição e Herança ©2012 Ludimila Monjardim Casagrande 16
  • 17. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 17
  • 18. Considerações sobre o Exemplo  Desse modo, a classe Aluno foi criada a partir da classe Pessoa. Todos os atributos e métodos da classe Pessoa foram herdados pela classe Aluno.  Dizemos que a classe Pessoa é a classe base, ou superclasse, ou genérica, ou classe pai, e a classe Aluno é a classe especializada, ou subclasse, ou classe filha.  Pode ser usado o relacionamento estabelecido pela herança, pelo fato de podermos dizer que um Aluno é uma Pessoa.Composição e Herança ©2012 Ludimila Monjardim Casagrande 18
  • 19. Considerações sobre o Exemplo  Como o objeto da classe Aluno herda os atributos /métodos da classe Pessoa, ao criarmos um objeto aluno da classe Aluno, o código abaixo seria correto: Aluno aluno = new Aluno(); aluno.setNome(“João”); aluno.setCpf(“123456789”); ... aluno.setMatricula(1234);  No código podemos ver que os métodos que inicialmente foram definidos na classe Pessoa podem ser chamados para um objeto da classe Aluno.Composição e Herança ©2012 Ludimila Monjardim Casagrande 19
  • 20. Chamada de Construtor da Classe Pai  Considerando o exemplo anterior, nas linhas 7 a 12 temos:  Sabemos que public Aluno... define um construtor para a classe Aluno.  Na linha 9, o uso da palavra-chave super significa uma chamada ao construtor da classe Pai (Pessoa). Assim, a classe Aluno repassa para a classe Pai os dados que são herdados (nome, cpf, rg, endereço), e armazena na própria classe seus dados (matrícula e curso).Composição e Herança ©2012 Ludimila Monjardim Casagrande 20
  • 21. Dicas sobre Construtores  O primeiro comando executado por todo construtor é uma chamada para o construtor default da sua superclasse, a menos que isso seja explicitamente modificado na sua implementação.  Se você desejar fazer uma chamada para qualquer outro construtor, isso deve ser feito logo na primeira linha. Como no exemplo abaixo:Composição e Herança ©2012 Ludimila Monjardim Casagrande 21
  • 22. Dicas sobre Construtores  Um construtor pode chamar outro construtor da própria classe (overloaded) pelo uso da palavra-chave this ou qualquer construtor de uma das suas superclasses pela palavra-chave super. As palavras-chave devem ser sucedidas pelos argumentos do construtor de interesse.  Se você cria um construtor sem a chamada ao this ou super, o compilador irá inserir automaticamente uma chamada ao super() sem argumentos na primeira linha.  Não é possível chamar um método de instância (métodos não estático) ou acessar uma variável de instância antes que o construtor seja executado.Composição e Herança ©2012 Ludimila Monjardim Casagrande 22
  • 23. Leitura Recomendada  Capítulo 8 – Páginas 113 a 138 do Livro-Texto. Introdução à Programação Orientada a Objetos Usando Java.Composição e Herança ©2012 Ludimila Monjardim Casagrande 23