herança - início — univasf universidade federal do...
TRANSCRIPT
![Page 1: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/1.jpg)
Prof. Leonardo Barreto Campos 1
Herança
![Page 2: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/2.jpg)
Prof. Leonardo Barreto Campos 2/33
Sumário
� Introdução;
� Herança Simples;
� Tipos de Herança;
� Classe Abstrata;
� Conversão de Tipos entre Base e Derivada;
� Níveis de Herança;
� Herança Múltipla;
� Bibliografia;
![Page 3: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/3.jpg)
Prof. Leonardo Barreto Campos 3/33
Introdução
� Herança é o processo que permite criar uma classe que herde todas as características de outra existente.
� A nova classe é chamada de classe derivada(subclasse) e a classe existente, de classe-base (superclasse);
� É possível incluir, na classe derivada, características que próprias adicionais além das herdadas;
![Page 4: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/4.jpg)
Prof. Leonardo Barreto Campos 4/33
Introdução
� É importante identificar a diferença entre composição e herança:� Na herança, um objeto da subclasse “é um” objeto da superclasse.Por exemplo, o carro é um veículo;
� Enquanto que na composição um objeto “tem um” outro objeto. Por exemplo, o carro tem uma direção.
� O processo de herança vai além da derivação simples. Uma classe derivada pode herdar características de mais de uma classe-base;
� Uma das maiores vantagens do processo de herança é a reutilização de código;
![Page 5: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/5.jpg)
Prof. Leonardo Barreto Campos 5/33
Herança Simples
� A herança costuma formar estruturas hierárquicas do tipo árvore, vejamos:
Pessoa
Estudante GraduadoEmpregado
Docente Funcionário
Administrador Professor
ProfessorAdministrador
Herança Simples
Herança Múltipla
![Page 6: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/6.jpg)
Prof. Leonardo Barreto Campos 6/33
Herança Simples
Classe-base (superclasse)
Palavra-chave protected, usada para dar permissão de acesso apenas às classes derivadas
Métodos definidos na classe-base
![Page 7: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/7.jpg)
Prof. Leonardo Barreto Campos 7/33
Herança Simples
Palavra-chave extends do Java usada para herdar classes
Outros métodos definidos pela classe derivada
Utilização de método definido na classe base
![Page 8: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/8.jpg)
Prof. Leonardo Barreto Campos 8/33
Herança Simples
Criação do objeto da classe derivada
Chamada ao método especializado (toString) definido na classe derivada
![Page 9: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/9.jpg)
Prof. Leonardo Barreto Campos 9/33
Herança Simples – C++
![Page 10: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/10.jpg)
Prof. Leonardo Barreto Campos 10/33
Herança Simples – C++
![Page 11: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/11.jpg)
Prof. Leonardo Barreto Campos 11/33
Herança Simples – C++
![Page 12: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/12.jpg)
Prof. Leonardo Barreto Campos 12/33
Tipos de Herança
� Herança Pública:� Indica que os membros públicos da classe derivada e os membros protegidos da classe-base serão membros protegidos da classe derivada;
� Herança Privada:� Indica que tanto os membros públicos quanto os protegidos da classe-base serão membros privados da classe derivada;
� Herança Protegida:� Indica que tanto os membros públicos quanto os protegidos da classe-base serão protegidos da classe derivada;
![Page 13: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/13.jpg)
Prof. Leonardo Barreto Campos 13/33
Tipos de Herança
� Vejamos um exemplo:
![Page 14: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/14.jpg)
Prof. Leonardo Barreto Campos 14/33
Tipos de Herança
� Vejamos um exemplo:
![Page 15: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/15.jpg)
Prof. Leonardo Barreto Campos 15/33
Tipos de Herança
![Page 16: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/16.jpg)
Prof. Leonardo Barreto Campos 16/33
Tipos de Herança
![Page 17: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/17.jpg)
Prof. Leonardo Barreto Campos 17/33
Tipos de Herança
![Page 18: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/18.jpg)
Prof. Leonardo Barreto Campos 18/33
Reescrevendo Métodos da Classe-Base
� Quando a classe base e a classe derivada definem funções com o mesmo nome o compilador terá que resolver o escopo das funções:
� A regra é a seguinte:� Se duas funções de mesmo nome existem, uma na classe—base e outra na classe derivadas, a função da classe derivada será executada se for chamada por meio de um objeto da classe derivada;
� Se um objeto da classe-base é criado, usará sempre funções da própria classe-base, pois não conhece nada da classe derivada
![Page 19: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/19.jpg)
Prof. Leonardo Barreto Campos 19/33
Classe Abstrata
� Uma classe é denominada abstrata se nenhuma instância dela é criada. Vejamos:
![Page 20: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/20.jpg)
Prof. Leonardo Barreto Campos 20/33
Classe Abstrata
![Page 21: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/21.jpg)
Prof. Leonardo Barreto Campos 21/33
Classe Abstrata
![Page 22: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/22.jpg)
Prof. Leonardo Barreto Campos 22/33
Conversão de Tipos entre Base e Derivada
� Visto que ContaEspecial é um tipo de Conta, faz sentido pensar em converter um objeto da ContaEspecial em um objeto da classe Conta;� C++ permite a conversão implícita de um objeto da classe derivada em um objeto da sua classe-base; Por exemplo:
![Page 23: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/23.jpg)
Prof. Leonardo Barreto Campos 23/33
Níveis de Herança
� Uma classe pode ser derivada de outra classe, por sua vez, é também uma classe derivada. Vejamos:
� Z é derivada de Y que, por sua vez, é derivada de X;� A hierarquia de classes pode ser descrita usando-se uma estrutura de árvore.
� A conversão implícita de objetos de classes derivadas para objetos de suas classes-base é a principal característica que permite polimorfismo;
![Page 24: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/24.jpg)
Prof. Leonardo Barreto Campos 24/33
Níveis de Herança
� No exemplo anterior, imagine que tenhamos decidido adicionar uma característica à conta especial;
![Page 25: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/25.jpg)
Prof. Leonardo Barreto Campos 25/33
Herança Múltipla
� Uma classe pode herdar as características de mais de uma classe-base. Esse processo é chamado de herança múltipla;
� O difícil em herança múltipla é construir as classes e não a sintaxe;
� Java não dá suporte, explicito, à herança múltipla;
![Page 26: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/26.jpg)
Prof. Leonardo Barreto Campos 26/33
Herança Múltipla
![Page 27: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/27.jpg)
Prof. Leonardo Barreto Campos 27/33
Herança Múltipla
![Page 28: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/28.jpg)
Prof. Leonardo Barreto Campos 28/33
Herança Múltipla
![Page 29: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/29.jpg)
Prof. Leonardo Barreto Campos 29/33
Herança Múltipla
![Page 30: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/30.jpg)
Prof. Leonardo Barreto Campos 30/33
Herança Múltipla
![Page 31: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/31.jpg)
Prof. Leonardo Barreto Campos 31/33
Exercício
� Definir uma classe Aluguel usando as classes Cadastro, Imovel e Tipo como classes-base. Inclua aluguelMensal e prazoAluguel. Acrescente duas funções, umas para a entrada de dados, Get(), e uma que imprima os dados, Print();
![Page 32: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/32.jpg)
Prof. Leonardo Barreto Campos 32/33
Herança Múltipla
![Page 33: Herança - Início — UNIVASF Universidade Federal do ...leonardo.campos/Arquivos/Disciplinas/POO_2007... · Java não dá suporte, explicito, à herança múltipla; Prof. Leonardo](https://reader034.vdocuments.mx/reader034/viewer/2022052609/5be5b05f09d3f2ea1a8beb15/html5/thumbnails/33.jpg)
Prof. Leonardo Barreto Campos 33/33
Bibliografia
� Mizrahi, Victorine Viviane. Treinamento em C++, módulo 2. 2ª ed. São Paulo: 2006.
� Deitel, H. M. & Deitel, P. J. C++: como programar, Editora Bookman. 3ª ed. Porto Alegre: 2001.
� Deitel, H. M. & Deitel, P. J. Java: como programar, Editora Bookman. 6ª ed. São Paulo: 2005.