Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,

Slides:



Advertisements
Apresentações semelhantes
Herança, Polimorfismo e Classes Abstratas em Java
Advertisements

Java – Classes Abstratas
H ERANÇA E P OLIMORFISMO Prof. Thiago Pereira Rique
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Iniciação ao Java – Márcio F. Campos
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Polimorfismo e Acoplamento Dinâmico
Polimorfismo e Classes Abstratas Profa
Linguagem de Programação II
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
Revisão POO Profa. Cintia Carvalho Oliveira
Programação Orientada a Objetos com Java
PLC – Introdução a POO Java
Programação orientada a objetos: Polimorfismo
Programação Orientada à Objetos
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Programação Orientada a Objetos: Reuso
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Polimorfismo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Classes Abstratas e Interface
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Herança e Arquitetura em camadas
Herança Modelagem e Programação Orientada a Objetos
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Linguagem II Classes Abstratas Interfaces. Davi Pires Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores.
Modificadores Programação II.
Herança.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
2 – Revisão de Programação Orientada a Objetos
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
Larva/Virtuos í Antonio Kantek T ó picos Avan ç ados de Programa ç ão Orientada a Objetos - MAC 413/5715 Segundo Semestre de 2003 Prof. Fabio Kon.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Orientação a Objetos - Programação em C++ Slides 11: Herança et al. (Funções Virtuais, Polimorfismo, Herança Múltipla, Funções Virtuais Puras e Classes.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Polimorfismo com Interfaces Pacotes em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Introdução ao Eclipse 3.2 Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico  Centro de Informática, UFPE.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
HERANÇA E POLIMORFISMO Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Padrões de Projeto Aula 15 – Padrão Command. PADRÃO COMMAND Encapsulando a chamada de métodos com o padrão Command. 2.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
Transcrição da apresentação:

Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática, UFPE

Objeto Poupança Número Saldo ,32 creditar debitar renderJuros

Estados do objeto Poupança renderJuros(0.01 ) Número Saldo ,32 creditar debitar renderJuros Número Saldo ,27 creditar debitar renderJuros

Classe de poupanças public class Poupanca { private String numero; private double saldo;... void creditar(double valor) { saldo = saldo + valor; }... void renderJuros(double t) { this.credito(saldo * t); }

Classe RepositorioContasArray public class RepositorioContasArray { public void inserirConta(Conta c); public void inserirPoupanca(Poupanca p); public Conta procurarConta(String num); public Poupanca procurarPoupanca(String num);... }

Problemas Duplicação desnecessária de código –Poupanca é muito parecida com Conta Repetição do código de Conta na Poupanca –Adição de novos métodos no repositório para lidar com Poupanca Efeito gigantesco em outros locais Como refletir a relação que existe no mundo real: “uma poupança é um tipo de conta”?

7 Herança Reutilizar o código de classes existentes Apenas novos atributos ou métodos precisam ser definidos Superclasse e Subclasse Reuso de Código –Tudo que a superclasse tem, a subclasse também tem

8 Herança em Java public class Poupanca extends Conta { //atributos especificos de poupanca //metodos especificos de poupanca } Restrição de Java –Uma classe pode estender apenas uma superclasse diretamente

9 Herança Estrutura herdada –Atributos, métodos Construtores –não são herdados -> precisam ser implementados na subclasse –construtores da subclasse “sempre” utilizam algum construtor da superclasse.

10 Construtores e subclasses super chama o construtor da superclasse se super não for chamado, o compilador acrescenta uma chamada ao construtor default: super() se não existir um construtor default na superclasse, haverá um erro de compilação public class Poupanca extends Conta { public Poupanca (String num,double saldo, Cliente cliente){ super(num, saldo, cliente); }

11 Nova classe Poupanca public class Poupanca extends Conta { public Poupanca(String num, double s, Cliente tit) { super(num,s,cliente); } public void renderJuros(double taxa) { double saldo = this.getSaldo(); this.creditar(saldo*taxa); }

12 Princípio da substituição Conta c1 = new Conta (“12”,26.0,cli); Conta c2 = new Poupanca (“15-1”,100.0,cli); c1 = new Poupanca (“20-1”,50.0,cli); Objetos da subclasse podem ser usados no lugar de objetos da superclasse –Toda poupança é uma conta! Classe Object –Superclasse comum a todas as outras Object qualquer = new Conta(“213”,29,tit); qualquer = new String (“Nada a ver!”);

13 Controle de Acesso Os níveis de proteção para atributos e métodos que tínhamos são: public - permite acesso a partir de qualquer classe private - permite acesso apenas na própria classe Agora temos: protected – permite acesso a partir de qualquer subclasse e classes do mesmo pacote

14 Impacto causado nas demais camadas Todas as camadas lidam com contas Princípio da substituição –Onde Conta é aceita, Poupança também será Logo –As demais camadas também aceitam poupanças sem precisar de modificação alguma Analise Fachada e Repositorios

Coerções(Casts) Conta c; c = new Poupanca(“ ”); ((Poupanca) c).renderJuros(0.01); System.out.println(c.getSaldo()); Cast renderJuros só está na classe Poupança. Compilador não iria deixar passar sem o cast

instanceof Verifica a classe de um objeto Recomenda-se o uso de instanceof antes de um cast para evitar erros em tempo de execução Dica: instanceof corresponde à pergunta é do tipo? Boa prática: só usar instanceof no método equals(); Conta c = procurar(" "); if (c instanceof Poupanca) ((Poupanca) c).renderJuros(0.01); else System.out.print(“Não é Poupança!”); Cast seguro!

17 Redefinição de métodos Exemplo: nova conta (bonificada) –Crédito é um pouco diferente Para redefinição, método deve ter a mesma assinatura (nome e parâmetros) da superclasse Se o nome for o mesmo, mas os parâmetros forem diferentes –Aí é sobrecarga

18 Redefinição de métodos public class ContaBonificada extends Conta { private double bonus; public void creditar(double valor) { bonus = bonus + (valor * 0.01); super.creditar(valor); } public void renderBonus() { super.creditar(bonus); bonus = 0; } Redefinição do método: mesma assinatura! creditar normal chamado

19 Polimorfismo Habilidade de apelidos de objetos –Para a mesma chamada de método –Responde de diferentes maneiras Para cada invocação no objeto, JVM procura pelo método chamado –Se não encontrar, a procura é repassada para a superclasse –Ligação dinâmica (dynamic binding) Usa redefinição de métodos –Polimorfismo mais simples

20 Polimorfismo e redefinição public class ContaBonificada extends Conta { private double bonus; public void creditar(double valor) { bonus = bonus + (valor * 0.01); super.creditar(valor); } public void renderBonus() { super.creditar(bonus); bonus = 0; } Mesma assinatura, mas comportamento diferente: isso vai definir o polimorfismo

21 Polimorfismo com ligação dinâmica Conta c1 = repContas.procurar(“235”); c1.creditar(200.00); c1.debitar(100.00); if (c1 instanceof ContaBonificada) ((ContaBonificada)c1).renderBonus(); Polimorfismo: mesmo apelido, em tempo de execução, executa diferentemente Ligação dinâmica: decidiu na hora da execução qual “botão apertar”

22 Classes Abstratas public abstract class ContaGenerica { private String numero; private double saldo; public void creditar(double valor) { saldo = saldo + valor; } public abstract void debitar(double valor); Reuso dos atributos Aumenta o poder do polimorfismo Método sem corpo ContaGenerica c = new Conta(..,30); ContaGenerica ci = new ContaImposto(..,30); c.debitar(20.0); ci.debitar(20.0); O saldo ficou o mesmo?

23 Exemplo de Polimorfismo Vamos definir a classe abstrata SerVivo; –Atributos: Idade, nome; –Método: falar; Vamos definir as classes Homem, Cachorro e Gato, que herdam de SerVivo; Vamos colocar objetos em um Vetor; Vamos iterar no vetor e chamar o método falar;

Aula Prática Herança

25 Objetivos da prática Exercitar herança e polimorfismo Estender o sistema bancário com herança e analisar seus efeitos

26 Exercício Implemente a classe Poupanca –Estendendo a definição da classe Conta –Possui seu próprio construtor –Possui um método específico chamado renderJuros(double taxa) Implemente a classe ContaBonificada –Estendendo a definição de conta, com atributo bonus e método renderBonus –Redefinindo o método creditar

27 Exercício Estenda a interface texto criada no sistema em camadas, adicionando duas novas opções –Cadastrar conta bonificada –Cadastrar Poupanca Que camadas vão mudar?