Post on 25-Jun-2015
description
HERANÇA Linguagem de Programação IICiência da ComputaçãoProf.ª Ms. Elaine Cecília Gatto
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
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
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
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
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
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
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
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
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
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
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
SUPERCLASSES E SUBCLASSES
• EXEMPLO:
SUPERCLASSES E SUBCLASSES
• EXEMPLO:
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
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
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
SUPERCLASSES E SUBCLASSES
• EXEMPLO:
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
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!
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
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)
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
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
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
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
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
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/
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
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.
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
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
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.
Patentes de código
Permite portabilidade pois executa em qualquer plataforma computacional
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
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.
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
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
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); }}
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); }}
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); }}
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(); }}
EXEMPLO 2
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.
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.