Introdução à Programação. Interface, Polimorfismo e Dynamic Binding



Documentos relacionados
Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Técnicas de Programação II

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Programação de Computadores - I. Profª Beatriz Profº Israel

Análise e Projeto Orientados por Objetos

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Tópicos em Engenharia de Computação

Padrão Básico de Projeto: Interfaces e Polimorfismo

Recursão. Em Java... Exemplo: Série de Fibonacci. Iteração e recursão. Exercícios. Especialização em Engenharia de Software - CEUT

Orientação a Objetos com Java

Classes Abstratas e Interfaces AULA 12

Capítulo 4. Packages e interfaces

Guia de Fatores de Qualidade de OO e Java

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Programação Orientada a Objetos em Java

UML Aspectos de projetos em Diagramas de classes

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Java 2 Standard Edition Como criar classes e objetos

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Programação Orientada a Objetos em Java. Herança

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Unidade IV: Ponteiros, Referências e Arrays

Programação por Objectos. Java

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Java. Marcio de Carvalho Victorino

Herança. Alberto Costa Neto DComp - UFS

Programação Orientada a Objetos (DPADF 0063)

Capítulo 8. Introdução UML

Módulo 07 Características Avançadas de Classes

Classes Abstratas e Interfaces

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Programação Orientada a Objetos

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Programação com Acesso a BD. Programação com OO Acesso em Java

Computação II Orientação a Objetos

Programação Orientada a Objetos em java. Polimorfismo

Programação por Objectos. Java

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Classe Abstrata e Interface

Programação Orientada a Objetos. Encapsulamento

Pragmática das Linguagens de Programação 2004/2005

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

BSI UFRPE Prof. Gustavo Callou

Introdução. Programação. Orientada a Objetos: Reuso. Introdução. Classes Abstratas

Reuso com Herança a e Composiçã

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação Orientada a Objetos C++

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Introdução a Java. Hélder Nunes

Classes, Superclasses e Subclasses

Capítulo 3. Programação por objectos em Java

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Módulo 06 Desenho de Classes

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Interfaces. Interfaces: Exemplo. ! São um mecanismo poderoso para ter bons desenhos pois permitem separar contratos das implementações

Organização do sistema em camadas. Projeto

Polimorfismo. Prof. Leonardo Barreto Campos 1

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Orientação a Objetos

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Análise e Projeto de Sistemas

Herança e Polimorfismo de Inclusão

Profº. Enrique Pimentel Leite de Oliveira

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

Herança. Algoritmos e Programação II. Aula 5 Herança

Introdução a POO. Introdução a Linguagem C++ e POO

3 Classes e instanciação de objectos (em Java)

Subtipos e Subclasses

Padrões de Projeto. Singleton

Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos

Prof. Jhonatan Fernando

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

POO Programação Orientada a Objetos. Classes em Java

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

2 Orientação a objetos na prática

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos (DPADF 0063)

Orientação a Objetos e a Linguagem Java

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Linguagem de Programação III

Desenvolvimento OO com Java Orientação a objetos básica

Análise de Programação

BSI UFRPE Prof. Gustavo Callou

JavaScript 2.0X X

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Herança (parte 2) Redefinição de métodos AULA 11

FBV - Linguagem de Programação II. Um pouco sobre Java

Revisão OO Básico. Orientação a Objetos em Java

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Linguagem de Programação III

Transcrição:

Introdução à Programação Interface, Polimorfismo e Dynamic Binding

Interface Programador Java PLENO Possuir sólida experiência em programação Desenvolvimento na linguagem JAVA Webservice, Struts ou JSF(desejável) Hibernate na linguagem JAVA Certificação: Java Programmer Programadores bem diferentes fornecem o mesmo serviço: Interfaces! 2

Tópicos da Aula Hoje, aprenderemos a trabalhar com Interface Motivação Conceito Utilização em Java Interface e Herança Múltipla Interface x Classe Abstrata Veremos, também, o que é Polimorfismo Polimorfismo através de herança Polimorfismo através de interface Redefinição e Sobrecarga de Métodos Dynamic Binding 3

Diferentes Classes de Repositório de Contas public class RepositorioContasVector{ private MiniJavaVector<Conta> contas;... public void inserir(conta c){ if (c!= null) { contas.add(c); else //Lança exceção; public class RepositorioContasArray{ private Contas[] contas; private int proximaposicaovaga... public void inserir(conta c){ if (c!= null) { if (this.arraycheio()) { this.duplicararray(); contas[proximaposicaovaga] = c; proximaposicaovaga++; else //Lança exceção Assinaturas idênticas Implementações diferentes 4

Classe Cadastro de Contas public class CadastroDeContasA { RepositorioContasArray contas; Utiliza repositório implementado com array public CadastroDeContas(RepositorioContasArray repositorio) { contas = repositorio; public void cadastrar(conta c) throws ContaExistenteException{ if (c!= null) { if (!this.existe(c.getnumero())) { contas.inserir(c); else { throw new ContaExistenteException(c.getNumero()); else { throw new IllegalArgumentException();... 5

Outra Classe Cadastro de Contas public class CadastroDeContasV { RepositorioContasVector contas; Utiliza repositório implementado com vector public CadastroDeContas(RepositorioContasVector repositorio) { contas = repositorio; public void cadastrar(conta c) throws ContaExistenteException{ if (c!= null) { Mesmo código em if (!this.existe(c.getnumero())) { contas.inserir(c); else { com array throw new ContaExistenteException(c.getNumero()); else { throw new IllegalArgumentException();... relação à implementação Classes diferentes só por causa das diferentes implementações de repositório 6

Problemas Duplicação desnecessária de código O mesmo cadastro de contas deveria ser capaz de utilizar as operações fornecidas pelo repositório independente da implementação deste último inserir remover procurar consulta por critério Solução: Interfaces! 7

Interfaces Caso especial de classes abstratas... Todos os métodos são abstratos Provêem uma interface para serviços e comportamentos São qualificados comopublic por default O uso do modificadorabstract é opcional Não definem atributos Podem definir constantes Por default todos os atributos definidos em uma interface são qualificados comopublic,static efinal Não definem construtores 8

Interfaces Não se pode criar objetos Definem tipo de forma abstrata, apenas indicando a assinatura dos métodos Estabelecem um conjunto de métodos que serão implementados pelos subtipos (subclasses) No caso de uma classe abstrata implementar uma interface, ela não precisa implementar os métodos 9

Definindo Interfaces public interface RepositorioContas{ void inserir(conta c); void remover(string numero); Conta procurar(string numero); boolean existir(string numero); Palavra reservada para indicar que é uma interface Assinaturas dos métodos 10

Subtipos sem Herança de Código public class RepositorioContasVector implements RepositorioContas{ private MiniJavaVector<Conta> contas;... public void inserir(conta c){ if (c!= null) { contas.add(c); else //Lança exceção; Nome da interface public class RepositorioContasArray implements RepositorioContas{ private Contas[] contas; private int proximaposicaovaga... public void inserir(conta c){ if (c!= null) { if (this.arraycheio()) { Palavra reservada que this.duplicararray(); indica que a classe contas[proximaposicaovaga] = c; implementa a interface proximaposicaovaga++; else //Lança exceção 11

Classe Cadastro de Contas Genérica public class CadastroDeContas { RepositorioContas contas; Utiliza qualquer repositório que implemente a interface RepositorioContas public CadastroDeContas(RepositorioContas repositorio) { contas = repositorio; public void cadastrar(conta c) throws ContaExistenteException{ if (c!= null) { if (!this.existe(c.getnumero())) { contas.inserir(c); else { throw new ContaExistenteException(c.getNumero()); else { throw new IllegalArgumentException();... 12

Utilizando Cadastro e Repositório... CadastroDeContas cadastro; RepositorioContasVector repositorio1; repositorio1 = new RepositorioContasVector(); cadastro = new CadastroDeContas(repositorio1);... RepositorioContasArray repositorio2; repositorio2 = new RepositorioContasArray(); cadastro = new CadastroDeContas(repositorio2);... 13

implements classe implements interface1, interface2,... subtipo implements supertipo1, supertipo2,... Múltiplos supertipos: uma classe pode implementar mais de uma interface (contraste com classes abstratas...) 14

implements Classe que implementa uma interface deve definir os métodos da interface: classes concretas têm que implementar os métodos classes abstratas podem simplesmente conter um ou mais métodos abstratos correspondentes aos métodos da interface 15

Interfaces e Reusabilidade Evita duplicação de código através da definição de um tipo genérico, tendo como subtipos várias classes não relacionadas Tipo genérico pode agrupar objetos de várias classes definidas de forma independente, sem compartilhar código via herança, tendo implementações totalmente diferentes Classes podem até ter mesma semântica... 16

Definição de Classes: Forma Geral class C extends C implements I1, I2,..., In { /*... */ I1 I2 C C... In 17

Subtipos com Herança Múltipla de Assinatura interface I extends I1, I2,..., In { /*... assinaturas de novos métodos... */ 18

Simulando Herança Múltipla com Interface Para simular herança múltipla, podemos combinar herança simples com implementação de interface Carro puxarfreiodemao() acelerar() <interface> Barco jogarancora() acelerar() CarroAnfibio 19

Subtipos com Herança Múltipla de Assinatura Classes (abstratas) Agrupa objetos com implementações compartilhadas Define novas classes através de herança (simples) de código Só uma pode ser supertipo de outra classe Interfaces Agrupa objetos com implementações diferentes Define novas interfaces através de herança (múltipla) de assinaturas Várias podem ser supertipo do mesmo tipo 20

Iterators Um iterator é um objeto que permite percorrer uma coleção de itens Um de cada vez a cada passo Um objeto iterator deve possuir um método hasnext() que informa se existe ainda algum item a ser percorrido na coleção O método next() retorna o item atual e pula para o próximo item da coleção 21

Interface Iterator Como uma coleção pode ser implementada de várias formas diferentes (array, vector, etc), a implementação de um iterator depende da implementação da coleção Porém a assinatura de um iterator deve ser a mesma, independentemente da implementação Assim deve ser criada uma interface iterator, e esta interface deve ser implementada por cada subtipo de objeto iterator 22

Definindo e Implementando Interface IteratorConta public interface IteratorConta { boolean hasnext(); Conta next(); Nome da interface public class IteratorContaVector implements IteratorConta { Uma implementação da interface MiniJavaVector<Conta> contas; private int proximaposicao; public IteratorContaVector(MiniJavaVector<Conta> vector){ contas = vector; proximaposicao = 0; public boolean hasnext() { return proximaposicao < contas.size(); public Conta next() { Conta conta = contas.get(proximaposicao); proximaposicao++; return conta; 23

Classe RepositorioContasComVector public interface RepositorioContas{ void inserir(conta c); void remover(string numero); Conta procurar(string numero); boolean existir(string numero); Modifica a interface IteratorConta getcontasvip(); RepositorioContas public class RepositorioContasVector implements RepositorioContas{ private MiniJavaVector<Conta> contas;... public IteratorConta getcontasvip() { MiniJavaVector<Conta> resultado = new MiniJavaVector<Conta>(); for(int i = 0; i < contas.size(); i++) { if (contas.get(i).getsaldo() > 10000){ resultado.add(contas.get(i)); return new IteratorContaVector(resultado); 24

Classe Cadastro de Contas Genérica public class CadastroDeContas { RepositorioContas contas; public void creditarbonuscontavip(){ IteratorConta it = contas.getcontasvip(); double bonus = 1000; while (it.hasnext()) { Conta conta = it.next();... conta.creditar(bonus); Retorna item atual e passa para o próximo item Laço utilizado para percorrer a coleção Uso do Iterator permite esconder a forma em que o repositório é implementado 25

Polimorfismo A palavra polimorfismo significa assumir muitas formas Uma referência polimórfica é uma variável que pode se referir a objetos de tipos diferentes em intervalos de tempo diferentes Em Java, qualquer referência é potencialmente polimórfica 26

Polimorfismo Um método chamado através de uma referência polimórfica pode ter comportamentos diferentes entre uma chamada e outra Polimorfismo em Java pode se dar através de herança ou interfaces 27

Polimorfismo via Herança Polimorfismo Uma conta pode ser Uma poupança Uma conta especial Herança permite a substituição do supertipo pelo subtipo no código Onde é permitido o supertipo, o subtipo pode ser utilizado Variável de supertipo pode em um determinado instante do tempo guardar uma referência de um subtipo 28

Polimorfismo via Interface Polimorfismo Um repositório de contas pode ser Um repositório de contas implementado com array Um repositório de contas implementado com vector Uma referência para o tipo de uma interface pode referenciar um objeto de qualquer classe que implementa a interface Onde é permitida a interface, o objeto de uma classe que implementa a interface pode ser utilizado 29

Redefinição de Métodos Uma subclasse pode redefinir (override) um método herdado da superclasse O novo método deve ter a mesma assinatura do método da superclasse, mas pode ter um corpo diferente Semântica dos métodos redefinidos deve ser preservada 30

Redefinição de Métodos Visibilidade dos métodos redefinidos deve ser preservada Em Java, é possível aumentar a visibilidade de um método Diminuir a visibilidade gera um erro de compilação Só é possível acessar a definição dos métodos da superclasse imediata (via super) Se modificador final vier na frente de método, este não pode ser redefinido 31

Sobrecarga de Métodos Sobrecarga (overloading) de método é o processo de dar a um método múltiplas definições Isto quer dizer que somente o nome do método não é suficiente para determinar qual o método que se deseja utilizar A assinatura de cada método overloaded deve ser única O que vai diferenciar os métodos é o número, tipo e ordem dos parâmetros Não podem somente ser diferenciados pelo tipo de retorno 32

Sobrecarga de Métodos Construtores são comumente overloaded Útil para permitir várias formas de inicialização de um objeto O compilador checa qual é o método que está sendo chamado, analisando os parâmetros public class Conta{... public Conta(String num, double saldo) { this.numero = num; if (saldo >= 0){ this.saldo = saldo; else { throw new IllegalArgumentException(); public Conta(String num) { this(num,0);... Chamada conta = new Conta( 2, 50); 33

Sobrecarga x Redefinição Sobrecarga trata múltiplos métodos com o mesmo nome, mas assinaturas diferentes Redefinição trata de dois métodos, um na superclasse e outro na subclasse, que possuem a mesma assinatura Sobrecarga permite que se defina uma operação similar em diferentes formas para diferentes parâmetros Redefinição permite que se defina uma operação similar em diferentes formas para diferentes tipos de objeto 34

Dynamic Binding: debitar de Conta e ContaEspecial public class Conta{ public void debitar(double valor) throws SaldoInsuficienteException{ if (valor <= getsaldo()){ setsaldo(getsaldo() valor); else { throw new SaldoInsuficienteException(getNumero()); public class ContaEspecial extends Conta{ double limite = 1000; public void debitar(double valor) throws SaldoInsuficienteException{ if (valor <= (getsaldo()+ limite){ setsaldo(getsaldo() valor); else { throw new SaldoInsuficienteException(getNumero()); 35

Dynamic Binding... MiniJavaSystem sys = new MiniJavaSystem(); Conta ca; ca = new ContaEspecial( 21.342-7 ); ca.creditar(500); ca.debitar(600); sys.println(ca.getsaldo()); ca = new Conta( 21.111-7 ); ca.creditar(500); ca.debitar(600); sys.println(ca.getsaldo());... Qual versão de debitar é utilizada? Em tempo de execução é decidida qual versão de debitar deve ser utilizada 36

Dynamic Binding Uma chamada de um método dentro do código deve ser ligada a definição do método chamado Se esta ligação (binding) é feita em tempo de compilação, então sempre a chamada do método será ligada ao mesmo método Static Binding Java só liga a chamada de métodos às definições de métodos correspondentes em tempo de execução Dynamic Binding ou Late Binding 37

Dynamic Binding Portanto, se existir dois métodos com o mesmo nome e tipo(definição e redefinição), em Java, o código é escolhido dinamicamente Escolha é feita com base na classe do objeto associado à variável destino da chamada do método 38

Resumindo... Interface Motivação Conceito Utilização em Java Padrão Iterator Interface e Herança Múltipla Interface x Classe Abstrata Polimorfismo Polimorfismo através de herança Polimorfismo através de interface Redefinição x Sobrecarga de Métodos Dynamic Binding 39