O documento descreve os conceitos fundamentais de herança em programação orientada a objetos. Em 3 frases:
A herança permite a reutilização de código através da criação de novas subclasses que herdam atributos e métodos de superclasses existentes. Isso possibilita economia de tempo no desenvolvimento, reutilizando software testado e depurado. Uma subclasse herda todos os atributos e métodos públicos e protegidos da superclasse, podendo adicionar ou sobrescrever comportamentos.
2. HERANÇA
• É uma forma de reutilização de software na qual
uma nova classe é criada, absorvendo membros de
uma classe existente e aprimorada com
capacidades novas ou modificadas.
• Permite enconomia de tempo no desenvolvimento
de programas, reutilizando software de alta
qualidade, testado e depurado
3. HERANÇA
• SUPERCLASSE:
• Quando uma nova classe herda MEMBROS de
uma classe existente
• SUBCLASSE:
• Nova classe criada com herança de MEMBROS
• Uma subclasse pode se tornar uma superclasse
para outras subclasses
4. HERANÇA
• SUBCLASSE:
• Tem seus próprios métodos e classes
• É mais específica que a superclasse
• Representa um grupo mais ESPECIALIZADO de
objetos
• Possui comportamentos da SUPERCLASSE mais
os adicionais específicos a ela
5. HERANÇA
• SUPERCLASSE DIRETA:
• É a superclasse a partir da qual a subclasse herda
explicitamente
• SUPERCLASSE INDIRETA:
• Qualquer superclasse acima da classe direta na
HIERARQUIA DE CLASSE
• HIERARQUIA DE CLASSE:
• Define os relacionamentos de herança entre as
classes
6. HERANÇA
• HIERARQUIA DE CLASSE:
• Inicia com a classe OBJECT (pacote java.lang)
• TODA classe JAVA ESTENDE (“herda de”) direta
ou indiretamente a classe OBJECT!
• HIERARQUIA SIMPLES:
• Uma classe é derivada de uma superclasse direta
• JAVA NÃO SUPORTA HERANÇA MULTIPLA
7. HERANÇA
• HERANÇA MULTIPLA:
• Ocorre quando uma classe é derivada de mais de
uma superclasse direta
• RELACIONAMENTO É UM:
• Representa a herança
• Um objeto de uma subclasse também pode ser
tratrado como um objeto da sua superclasse
• Exemplo: um carro É UM veículo
8. HERANÇA
• RELACIONAMENTO TEM UM:
• Representa a composição
• Um objeto contém uma ou mais referências de
objeto como membros
• Exemplo:
• um carro TEM UMA direção
• um objeto carro TEM UMA referência a um
objeto direção
9. SUPERCLASSES E SUBCLASSES
• Um objeto de uma classe frequentemente também
É UM objeto de outra classe
• EXEMPLO:
• Um retangulo É UM quadrilátero
• Um quadrado É UM quadrilátero
• Um paralelogramo É UM quadrilátero
• Um trapezóide É UM quadrilátero
10. SUPERCLASSES E SUBCLASSES
• Um retangulo HERDA DE um quadrilátero
• Quadrilatero é uma SUPERCLASSE
• Retangulo é uma SUBCLASSE
• Um retangulo é um tipo específico de quadrilatero
• MAS um quadrilatero NÃO É UM retangulo
• Um quadrilatero PODER SER:
• Um paralelogramo
• Um quadrado
• Etc
11. SUPERCLASSES E SUBCLASSES
• Superclasses são mais gerais
• Subclasses são mais específicas
• Cada objeto de SUBCLASSE é um objeto de sua
SUPERCLASSE
• Uma SUPERCLASSE pode ter várias SUBLCLASSES
• Exemplo:
• Uma superclasse VEÍCULO representa todos os
veículos
• Uma subclasse CARRO representa um
subconjunto de veículo menor e mais específico
12. SUPERCLASSES E SUBCLASSES
• Relacionamentos de herança formam estruturas
hierarquicas do tipo ARVORE
• Há situações em que uma classe pode ser ao
mesmo tempo uma subclasse e também uma
superclasse
• HIERARQUIA DE CLASSE = HIERARQUIA DE
HERANÇA
15. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• A leitura do diagrama é feita da seguinte forma: de
baixo para cima, seguindo as setas:
• Um Administrador é um membro do Corpo
Docente
• Um Professor é um membro do Corpo Docente
• Um Corpo Docente é um membro de Empregado
16. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Um Funcionário é membro de Empregado
• Um Empregado é membro da comunidade
• Um Aluno é membro da comunidade
• Um Graduado é membro da comunidade
• Membro da Comunidade é a superclasse direta de
Empregado, Aluno e Graduados
17. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Membro da Comunidade é a superclasse indireta
de todas as outras subclasses no diagrama
• Um administrador é um membro do corpo docente
que é um membro de empregado que é um
membro da comunidade
19. SUPERCLASSES E SUBCLASSES
• Nem todo relacionamento de classe é um
relacionamento de herança
• Relacionamento TEM UM:
• As classes têm membros que são referencias a
objetos de outras classes
• Criam classes compondo classes existentes
20. SUPERCLASSES E SUBCLASSES
• EXEMPLO:
• Classe empregado
• Classe dataDeNascimento
• Classe numeroDeTelefone
• Um empregado é uma dataDeNascimento?????
• Um empregado TEM UMA dataDeNascimento!
• Um empregado é um numeroDeTelefone?
• Um empregado TEM UM numeroDeTelefone!
21. SUPERCLASSES E SUBCLASSES
• Importante:
• Objetos de superclasse não podem ser tratados
como objetos de suas subclasses
• Exemplo:
• Todos os carros são veículos, mas nem todos os
veículos são carros
22. SUPERCLASSES E SUBCLASSES
• Desvantagem da herança:
• Uma subclassepode herdar métodos que ela não
necessita ou que não deveria ter
• Às vezes a subclasse precisa de uma versão
personalizada do método
• SOBRESCREVER:
• A subclasse pode redefinir o método da
superclasse com uma implementação mais
adequada para ela (@OVERRIDE)
23. MEMBROS PROTECTED
• Membros public:
• São acessíveis onde quer que o programa tenha
uma referencia a um objeto dessa classe ou uma
de suas subclasses
• Membor private:
• Só são acessíveis por dentro da própria classe
• Membros private de uma superclasse NÃO SÃO
HERDADOS pelas suas subclasses
24. MEMBROS PROTECTED
• MEMBROS PROTECTED:
• Nível intermediário de acesso
• Membros protected de uma SUPERCLASSE
podem ser acessados por:
• membros dessa SUPERCLASSE
• membros de suas SUBCLASSES
• membros de OUTRAS classes no mesmo
PACOTE
25. MEMBROS PROTECTED
• Membros public e protected da SUPERCLASSE
tornam-se membros public e protected da
subclasse
• PALAVRA CHAVE SUPER:
• Quando um método da SUBCLASSE sobrescrever
um método da SUPERCLASSE, o método da
SUPERCLASSE pode ser acessado a partir da
SUBCLASSE usando a palavra chave SUPER antes
o nome de método da SUPERCLASSE e um
separador de ponto
26. RELACIONAMENTOS
• PALAVRA CHAVE EXTENDS:
• Usada para indicar que a classe herda de outra
classe:
• public class ClasseExemplo extends Object
• public class Classe2 extends Classe1
• A classe exemplo herda da classe objeto
• A classe2 herda da classe 1
27. CLASSE OBJECT
• Herança utilizada para criar classes de classes
existentes
• Cada classe Java herda uma classe existente – exceto a
classe OBJECT (que não contem nenhum campo)
• Cada classe Java herda direta ou indiretamente
métodos de OBJECT.
• Se uma classe Java não especificar que ela herda outra
classe, a nova classe herda OBJECT implicitamente
28. CLASSE OBJECT
• Toda e qualquer classe em Java é uma subclasse da
classe OBJECT
• É a superclasse de todas as classes
• http://docs.oracle.com/javase/7/docs/api/
29. Construtores em subclasses
• Instanciar um objeto de SUBCLASSE inicia uma
cadeia de chamadas de construtor;
• O construtor de SUBCLASSE, invoca o construtor de
sua SUPERCLASSE direta, antes de realizar suas
próprias tarefas
• Invocação implícita: chama o construtor padrão ou
construtor sem argumentos
• Invocação explícita: usa a palavra chave SUPER
30. Construtores em subclasses
• Se a SUPERCLASSE é derivada de outra classe, o
construtor da SUPERCLASSE invoca o construtor da
próxima classe no topo da hierarquia
• O último construtor chamado na cadeia é sempre
o construtor da classe OBJECT
• O corpo do construtor de SUBCLASSE original
termina a execução por último.
31. Construtores em subclasses
• O construtor de cada SUPERCLASSE manipula as
variáveis de instância de SUPERCLASSE que o
objeto de SUBCLASSE herda
• Quando um programa cria um objeto da
SUBCLASSE, o construtor da SUBCLASSE
imediatamente
chama
o
construtor
da
SUPERCLASSE
32. Construtores em subclasses
• O corpo do construtor da SUPERCLASSE executa
para inicializar as variáveis de instância da
SUPERCLASSE que fazem parte do objeto da
SUBCLASSE
• O corpo do construtor da SUBCLASSE, então,
executa para inicializar variáveis de instância
somente da SUBCLASSE
33. Patentes de código
• A herança permite que você patenteie seu código e
os venda com as licenças apropriadas ou apenas
disponibilizando para outros usuários em formato
de bytecode
• BYTECODE JAVA: é um formato de código
intermediário entre o código fonte, o texto que o
programador consegue manipular, e o código de
máquina, que o computador consegue executar.
35. Patentes de código
• A herança permite que o programador NÃO altere
o código-fonte da SUPERCLASSE, mas permite que
ele o utilize em sua classe proprietária
• Classes proprietárias: são as classes desenvolvidas
por desenvolvedores (por vocês – são classes
personalizadas)
• Herança preserva a integridade da SUPERCLASSE,
portanto a sua SUBCLASSE não afeta o códigofonte da SUPERCLASSE
36. Patentes de código
• Um programador Java não precisa entender — e
nem tomar conhecimento — dos bytecodes Java
para ser proficiente na linguagem, da mesma
forma que um programador de qualquer
linguagem de alto nível compilada para linguagem
de máquina não precisa conhecer a linguagem de
montagem do computador hospedeiro para
escrever bons programas naquela linguagem.
37. Patentes de código
• Em seus projeto crie menos classes que fornecem
funcionalidades mais substanciais, isso evitará
problemas na utilização das classes
• Muitas classes cria problema de gerenciamento e
pode indicar mal uso de reutilização de software
38. Patentes de código
• Se SUBCLASSES tem mais funcionalidades do que
precisam de fato, a memória e os recursos
computacionais podem ser desperdiçados
• Portanto, use herança com sabedoria! Herde
apenas das SUPERCLASSES que fornecem as
funcionalidades que de fato você precisa
39. EXEMPLO 1
package br.com.exemploheranca;
public class pessoa {
String nome, idade, endereco = "R: Java ,501";
public void ImprimeNome() {
System.out.println("o nome é:");
System.out.println("Endereco: " + endereco);
}
}
40. EXEMPLO 1
package br.com.exemploheranca;
public class fornecedor extends pessoa{
String cnpj;
public void ImprimeNome() {
System.out.println("O nome do fornecedor é :
" + nome + "n Cnpj: " + cnpj);
}
}
41. EXEMPLO 1
package br.com.exemploheranca;
public class cliente extends pessoa {
String cpf;
public void ImprimeNome() {
System.out.println("Nome do cliente é : " +
nome + "n Nº CPF: " + cpf + "n Seu endereco :" +
endereco);
}
}
42. EXEMPLO 1
package br.com.exemploheranca;
public class principal {
public static void main(String[] args) {
cliente c = new cliente();
c.nome = "Luiz";
c.cpf = "073.777.796-21";
c.ImprimeNome();
fornecedor f = new fornecedor();
f.nome = "Deltatronic";
f.cnpj = "073.856.9856.52-10";
f.ImprimeNome();
}
}
44. EXERCÍCIOS
• Desenhe uma hierarquia de herança para
alunos universitários. Utilize ALUNO como
superclasse da hierarquia, então herde
ALUNO com as classes ALUNODEGRADUAÇÃO e
ALUNOGRADUADO.
Continue
a
estender
a
hierarquia o mais profundo que conseguir
(vários níveis). Depois de desenhar a
hierarquia,
discuta
os
relacionamentos
entre as classes. Em seguida, crie as
classes e crie um programa Java que
demonstre sua utilização.
45. EXERCÍCIOS
• Desenhe
uma
hierarquia
de
herança
para
QUADRILATERIO, TRAPEZIO, PARALELOGRAMO, RETANGULO e
QUADRADO. Utilize QUADRILATERO como a superclasse da
hierarquia. Faça a hierarquia o mais profundo que
conseguir (com muitos níveis). Especifique as
variáveis de instância e os métodos para cada
classe. As variáveis de instância private de
QUADRILATERO devem ser os pares x e y de coordenadas
para os quatro ontos que delimitam o QUADRILATERO.
Escreva um programa em Java que instancia os objetos
de suas classes e gera saída da área de cada objeto
– menos o QUADRILATERO.