1 / 19

Herança

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.

renate
Télécharger la présentation

Herança

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. Exemplo de Diagrama de Classes da UML Professora Lucélia Oliveira

  5. A Classe Pessoa do diagrama apresentado no slide anterior: publicclass Pessoa { private String nome; publicvoidsetNome(String nome) { this.nome = nome; } public String getNome() { return (nome); } } A Classe Pessoa possui uma variável de instância (nome) e dois métodos (setNome e getNome) para manipular o seu conteúdo. Professora Lucélia Oliveira

  6. Classes PessoaFisica e PessoaJuridica publicclassPessoaFisicaextends Pessoa { private String rg; publicvoidsetRg(String rg) { this.rg = rg; } public String getRg() { return (rg); } } publicclassPessoaJuridicaextends Pessoa { private String cnpj; publicvoidsetCnpj(String cnpj) { this.cnpj = cnpj; } 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

  7. Classes Funcionario publicclassFuncionarioextendsPessoaFisica { privateintcartao; publicvoidsetCartao(intcartao) { this.cartao = cartao; } publicintgetCartao() { return (cartao); } } A Classe Funcionario herda todas as características da classe PessoaFisica que , por sua vez, herda as características da classe Pessoa. Professora Lucélia Oliveira

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. Relacionamento (TEM-UM) Professora Lucélia Oliveira

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

More Related