Programação Orientada a Objetos       Composição e Herança          Reutilização de Classes          Ludimila Monjardim Ca...
Reutilização     Uma das características mais importantes das        linguagens orientadas a objetos é a capacidade de   ...
Mecanismos de Reutilização     Existem dois mecanismos básicos de        reutilização de classes:           Composição (...
Composição ou Delegação     Uma possível forma de reutilizar métodos de        uma classe base em outra classe é incluind...
Exemplo  public class DataHora { // declaração da classe       private Data estaData;     // referência a uma instância da...
ExemploComposição e Herança   ©2012 Ludimila Monjardim Casagrande   6
ExemploComposição e Herança   ©2012 Ludimila Monjardim Casagrande   7
Exemplo     A classe DataHora reutiliza as classes Data e        Hora através de composição ou delegação.     A data e h...
Exemplo     O construtor para a classe DataHora, que        recebe argumentos para inicializar todos os        campos que...
Composição e Modificadores de Acesso     Classes que contêm instâncias de outras        classes estão submetidas às restr...
Considerações sobre a Composição     Reutilização de classes via delegação é útil        quando a classe que reutiliza in...
Herança     O outro mecanismo para reutilização de código        é a herança, que permite que uma nova classe        seja...
Herança     A herança deve ser utilizada quando se deseja        especializar uma classe e quando existe a        relação...
Exemplo     Se estivermos implementando um sistema para        universidade, podemos pensar em classes        como Aluno,...
ExemploComposição e Herança   ©2012 Ludimila Monjardim Casagrande   15
Exemplo   A sintaxe para criação de herança em Java é      simples. Basicamente, dizemos que uma classe      herda ou “es...
ExemploComposição e Herança   ©2012 Ludimila Monjardim Casagrande   17
Considerações sobre o Exemplo     Desse modo, a classe Aluno foi criada a partir da classe        Pessoa. Todos os atribu...
Considerações sobre o Exemplo     Como o objeto da classe Aluno herda os atributos        /métodos da classe Pessoa, ao c...
Chamada de Construtor da Classe Pai    Considerando o exemplo anterior, nas linhas 7 a 12 temos:    Sabemos que public A...
Dicas sobre Construtores   O primeiro comando executado por todo construtor é uma      chamada para o construtor default ...
Dicas sobre Construtores   Um construtor pode chamar outro construtor da própria      classe (overloaded) pelo uso da pal...
Leitura Recomendada     Capítulo 8 – Páginas 113 a 138 do Livro-Texto.        Introdução à Programação Orientada a Objeto...
Upcoming SlideShare
Loading in...5
×

POO - 10 - Herança

4,708

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,708
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

POO - 10 - Herança

  1. 1. Programação Orientada a Objetos Composição e Herança Reutilização de Classes Ludimila Monjardim Casagrande 2012
  2. 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. 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. 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. 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. 6. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 6
  7. 7. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 7
  8. 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. 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. 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. 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. 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. 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. 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. 15. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 15
  16. 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. 17. ExemploComposição e Herança ©2012 Ludimila Monjardim Casagrande 17
  18. 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. 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. 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. 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. 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. 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

×