herança

19
Herança É-UM e TEM-UM Professora Lucélia Oliveira

Upload: renate

Post on 17-Jan-2016

34 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Herança

Herança

É-UM e TEM-UM

Professora Lucélia Oliveira

Page 2: Herança

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

Page 3: Herança

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

Page 4: Herança

Exemplo de Diagrama de Classes da UML

Professora Lucélia Oliveira

Page 5: Herança

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.

Page 6: Herança

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.

Page 7: Herança

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.

Page 8: Herança

• 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

Page 9: Herança

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

Page 10: Herança

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

Page 11: Herança

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

Page 12: Herança

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

Page 13: Herança

Relacionamento (TEM-UM)

Professora Lucélia Oliveira

Page 14: Herança

• 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

Page 15: Herança

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

Page 16: Herança

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

Page 17: Herança

• 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

Page 18: Herança

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

Page 19: Herança

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