JAVA - Herança

45
HERANÇA Linguagem de Programação II Ciência da Computação Prof.ª Ms. Elaine Cecília Gatto

description

JAVA - Herança

Transcript of JAVA - Herança

Page 1: JAVA - Herança

HERANÇA Linguagem de Programação IICiência da ComputaçãoProf.ª Ms. Elaine Cecília Gatto

Page 2: JAVA - Herança

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

Page 3: JAVA - Herança

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

Page 4: JAVA - Herança

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

Page 5: JAVA - Herança

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

Page 6: JAVA - Herança

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

Page 7: JAVA - Herança

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

Page 8: JAVA - Herança

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

Page 9: JAVA - Herança

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

Page 10: JAVA - Herança

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

Page 11: JAVA - Herança

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

Page 12: JAVA - Herança

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

Page 13: JAVA - Herança

SUPERCLASSES E SUBCLASSES

• EXEMPLO:

Page 14: JAVA - Herança

SUPERCLASSES E SUBCLASSES

• EXEMPLO:

Page 15: JAVA - Herança

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

Page 16: JAVA - Herança

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

Page 17: JAVA - Herança

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

Page 18: JAVA - Herança

SUPERCLASSES E SUBCLASSES

• EXEMPLO:

Page 19: JAVA - Herança

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

Page 20: JAVA - Herança

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!

Page 21: JAVA - Herança

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

Page 22: JAVA - Herança

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)

Page 23: JAVA - Herança

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

Page 24: JAVA - Herança

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

Page 25: JAVA - Herança

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

Page 26: JAVA - Herança

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

Page 27: JAVA - Herança

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

Page 28: JAVA - Herança

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/

Page 29: JAVA - Herança

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

Page 30: JAVA - Herança

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.

Page 31: JAVA - Herança

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

Page 32: JAVA - Herança

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

Page 33: JAVA - Herança

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.

Page 34: JAVA - Herança

Patentes de código

Permite portabilidade pois executa em qualquer plataforma computacional

Page 35: JAVA - Herança

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ódigo-fonte da SUPERCLASSE

Page 36: JAVA - Herança

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.

Page 37: JAVA - Herança

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

Page 38: JAVA - Herança

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

Page 39: JAVA - Herança

EXEMPLO 1package 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); }}

Page 40: JAVA - Herança

EXEMPLO 1package br.com.exemploheranca;

public class fornecedor extends pessoa{

String cnpj;

public void ImprimeNome() { System.out.println("O nome do fornecedor é : " + nome + "\n Cnpj: " + cnpj); }}

Page 41: JAVA - Herança

EXEMPLO 1package 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); }}

Page 42: JAVA - Herança

EXEMPLO 1package 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(); }}

Page 43: JAVA - Herança

EXEMPLO 2

Page 44: JAVA - Herança

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.

Page 45: JAVA - Herança

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.