herança
DESCRIPTION
Herança. É-UM e TEM-UM. 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. - PowerPoint PPT PresentationTRANSCRIPT
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 PessoaJuridicapublic class PessoaFisica extends Pessoa {
private String rg; public void setRg(String rg) {
this.rg = rg;} public String getRg() {
return (rg);}
}
public class PessoaJuridica extends Pessoa {
private String cnpj; public void setCnpj(String cnpj) {
this.cnpj = cnpj;} public String getCnpj() {
return (cnpj);}
}
Professora Lucélia Oliveira
As Classes PessoaFisica e PessoaJuridica estendem a funcionalidade da classe Pessoa adicionando uma variável em cada e dois métodos.
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