Herança
É-UM e TEM-UM
Professora Lucélia Oliveira
Herança (É-UM)
• A herança na orientação a objetos, ocorre
quando uma classe herda as características
(variáveis e métodos) definidas em outra
classe, chamada de ancestral ou superclasse.
• O principal objetivo da herança é o
reaproveitamento de código e
conseqüentemente a redução de códigos
reescritos desnecessariamente.
Professora Lucélia Oliveira
Herança
• Por mais simples que seja uma aplicação em
Java, praticamente todas usam a herança em
seus códigos.
Professora Lucélia Oliveira
Exemplo de Diagrama de Classes da
UML
Professora Lucélia Oliveira
A Classe Pessoa do diagrama
apresentado no slide anterior:
public class Pessoa {
private String nome;
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return (nome);
}
}
Professora Lucélia Oliveira
A Classe Pessoa possui uma
variável de instância
(nome) e dois métodos
(setNome e getNome) para
manipular o seu conteúdo.
Classes PessoaFisica e PessoaJuridica
public class PessoaFisica extends Pessoa {
public class PessoaJuridica extends
Pessoa {
private String rg;
private String cnpj;
public void setRg(String rg) {
this.rg = rg;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public String getRg() {
return (rg);
}
}
}
public String getCnpj() {
return (cnpj);
}
As Classes PessoaFisica e
PessoaJuridica estendem a
funcionalidade da classe
Pessoa adicionando uma
variável em cada e dois
métodos.
Professora Lucélia Oliveira
Classes Funcionario
public class Funcionario extends PessoaFisica {
private int cartao;
public void setCartao(int cartao) {
this.cartao = cartao;
}
public int getCartao() {
return (cartao);
}
}
Professora Lucélia Oliveira
A Classe Funcionario herda
todas as características da
classe PessoaFisica que ,
por sua vez, herda as
características da classe
Pessoa.
• Se a superclasse Pessoa for alterada, essas
alterações serão refletidas nas classes
PessoaFisica, PessoaJuridica e Funcionario,
sem a necessidade de alterar o código das
classes, são como engrenagens que se
encaixam umas nas outras.
Professora Lucélia Oliveira
Classe que contém o método main()
public class UsaFuncionario {
public static void main(String args[]) {
Funcionario funcionario = new Funcionario( );
funcionario.setNome("Samuel");
funcionario.setRg("10.243.897-x");
funcionario.setCartao("FN100");
System.out.println(funcionario.getNome( ));
System.out.println(funcionario.getRg( ));
System.out.println(funcionario.getCartao( ));
}}
Professora Lucélia Oliveira
Na terminologia da OO, você pode dizer:
• Pessoa é a superclasse de PessoaFisica e
PessoaJuridica;
• PessoaFisica é uma subclasse de Pessoa;
• Funcionario é uma subclasse de PessoaFisica;
• PessoaFisica é superclasse de Funcionario;
• PessoaFisica herda de Pessoa;
• Funcionario é derivado de PessoaFisica;
• PessoaFisica é derivada de Pessoa;
• Funcionario é um subtipo de PessoaFisica
Professora Lucélia Oliveira
Relacionamento (TEM-UM)
• Os relacionamentos tem-um são baseados na
utilização, em vez de herança.
• A classe A tem-um B ocorrerá quando o
código da classe A apresentar uma referência
a uma instância da classe B.
Professora Lucélia Oliveira
Relacionamento (TEM-UM)
• Exemplo: Um cavalo É-UM animal. Um cavalo
TEM-UMA rédea.
E o código teria um formato assim:
public class Animal{ }
public class Cavalo extends Animal{
private Redea minhaRedea;
}
public class Redea{ ...}
Professora Lucélia Oliveira
Relacionamento (TEM-UM)
Professora Lucélia Oliveira
• O objetivo da ênfase no projeto apropriado é
simples: redução de custos.
• O custo de distribuição de um sistema mal
projetado é 10 vezes mais caro.
• Até os melhores projetistas que usam o
modelo orientado a objetos cometem erros.
Quando os erros são descobertos durante a
fase de implementação de um projeto, a
quantidade de códigos a ser reescrita pode
fazer com que equipes de desenvolvimento
tenham que começar tudo do zero.
Professora Lucélia Oliveira
Polimorfismo
• O uso do polimorfismo pressupõe duas
condições: a existência de herança entre as
classes e a redefinição de métodos nas
classes.
• Para caracterizar um polimorfismo, é
necessário que as classes possuam métodos
com a mesma assinatura, isto é, retorno,
nome e argumentos, porém, com
funcionalidades diferentes.
Professora Lucélia Oliveira
Polimorfismo
• Utilizando o polimorfismo, uma classe mais
genérica (uma superclasse) pode assumir
diferentes comportamentos, gerando objetos
diferentes dependendo da implementação do
método.
Professora Lucélia Oliveira
• Exemplo:
• Vamos criar um método polimórfico chamado
mostraClasse, que utilize, em todas as classes:
– o mesmo nome: mostraClasse;
– o mesmo retorno: void;
– os mesmos argumentos: no caso nenhum ( )
public void mostraClasse( )
{
System.out.println(“classe nome-da-classe”);
}
Professora Lucélia Oliveira
Agora vamos criar uma classe para
executar os métodos polimórficos:
package heranca;
import javax.swing.JOptionPane;
public class Polimorfismo {
public static void main(String args[]){
Pessoa pessoa = null;
String tip;
int tipo;
tip =
JOptionPane.showInputDialog("Qual
o construtor deseja utilizar? "+
"\n1- Pessoa\n2 PessoaFisica\n3 - PessoaJuridica \n4 Funcionario");
tipo = Integer.parseInt(tip);
switch (tipo){
case 1: pessoa = new Pessoa();
break;
case 2: pessoa = new
PessoaFisica(); break;
case 3: pessoa = new
PessoaJuridica(); break;
case 4: pessoa = new
Funcionario(); break;
default: System.out.println("Tipo
desconhecido!");
}
pessoa.mostraClasse();
}}
Professora Lucélia Oliveira
Métodos Sobrecarregados
• Devem alterar a lista de argumentos;
• Podem alterar o tipo de retorno;
• Podem alterar o modificador de acesso;
Professora Lucélia Oliveira
Download

Herança - Professora Lucélia Alves de Oliveira