INTERFACES DE JAVA. O JCF é uma arquitectura que se baseia em três entidades fundamentais:

Documentos relacionados
Programação Orientada a Objectos - P. Prata, P. Fazendeiro

9 Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos com Java. Prof. Júlio Machado

COLECÇÕES DE OBJECTOS EM JAVA6

4 Conceito de Herança

Interfaces POO. Prof. Marcio Delamaro

Interfaces e Classes Internas

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE II

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Coleções. João Paulo Q. dos Santos

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Programação com genéricos

Profa. Thienne Johnson EACH/USP

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Computação II Orientação a Objetos

LEIC-A / MEIC-A 2007/2008 (1º

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Herança e Polimorfismo

Programação Orientada por Objectos 2007/2008

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Paradigmas da Programação PPROG. Tipos de Dados. Enumerados Genéricos Coleções. Nelson Freire (ISEP DEI-PPROG 2012/13) 1/64

Desenvolvimento e Projeto de Aplicações Web

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Herança e Polimorfismo

Programação Orientada a Objetos Flávio de Oliveira Silva 144


Tipos genéricos (cont)

Classes e Objetos. Sintaxe de classe em Java

Programação por Objectos. Java

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Programação por Objectos. Java

Linguagem de programação Programação Orientada a objetos

Computação II Orientação a Objetos

POO29004 Programação Orientada a Objetos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Coleções. Prof. Marcelo Roberto Zorzan

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Orientação a Objetos AULA 09

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação Orientada a Objetos II

Interfaces e Classes Abstratas

2 Vectores de objectos

final class UltimosDiasMeses{ static final int[] DIAS_DO_MES = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; }

Classe Abstrata e Interface

Collections Framework

Programação por Objectos. Java

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Métodos Genéricos. Prof.: Michele Nasu Tomiyama Bucci

Atividade 08 - Utilizando Collections - List

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Herança e Propriedades

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Instituto Federal de Educação, Ciência e Tecnologia da Bahia Campus Irecê Disciplina: Linguagem Técnica II Prof o Jonatas Bastos

Palavras Reservadas da Linguagem Java

Rafael B. Pereira (

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Linguagem de Programação II Implementação

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

[Desenvolvimento OO com Java] Classes abstratas e interfaces

Computação II Orientação a Objetos

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Lista encadeada class No { Coleções. Enumeration. Lista encadeada (continuação) Enumeration Exemplo usando a classe Lista anterior

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Avançando em Java com

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Desenvolvimento OO com Java Classes abstratas e interfaces

Interfaces e polimorfismo

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação com Objectos Teste Teórico 18 de Dezembro de 2008, 19:00 (120 minutos)

if (umobjecto!= null && umobjecto instanceof CartaoFidelidade){ titular.equals(((cartaofidelidade) umobjecto).titular) &&

POO29004 Programação Orientada a Objetos

1. Por que não utilizar a notação de composição da UML para mostrar que um cachorro é composto de altura, peso, cor e data de nascimento?

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

APIs DAS PRINCIPAIS CLASSES E INTERFACES JAVA6 USADAS NOS PROJECTOS. F. Mário Martins

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Polimorfismo. O que é polimorfismo?

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Relacionamentos entre objetos

Transcrição:

INTERFACES DE JAVA O JCF é uma arquitectura que se baseia em três entidades fundamentais: a) Interfaces; b) Classes abstractas; c) Classes Concretas Implementações; Interfaces e Comparator 1

Interfaces são especificações sintácticas (algumas genéricas ie. Parametrizadas) de constantes e métodos que, em geral, correspondem a propriedades que qualquer classe que as pretenda ter/satisfazer pode implementar, desde que forneça implementações para todos os métodos especificados na interface. public interface Colorivel { public abstract int getcor(); public abstract void setcor(int cor); public interface Datavel { void setdata(gregoriancalendar data); GregorianCalendar getdata(); Algumas Interfaces de Java nem sequer definem comportamento, são apenas etiquetas para o compilador/interpretador ( marker( interfaces ): public interface Serializable { /** As classes que declararem implementar esta interface podem ser gravadas em ficheiros de objectos, ObjecStreams */ public interface Cloneable { /** Classes que usam o método clone() de Object */ Nota: Não usamos!! Interfaces e Comparator 2

Interfaces são Tipos, tal como as classes, sendo compatíveis com o tipo das classes que as implementam, cf. List<String> nomes = new ArrayList<String>(); = new LinkedList<Ponto2D>(); Interfaces são especificações implementadas pelas classes. public class PontoComCor implements Colorivel { // variáveis de instância private int x, y; // variáveis para implementar Colorivel private int cor = 0; // métodos de instância.. // implementação de Colorivel public int getcor() { return cor; ; public void setcor(int ncor) { cor = ncor; ; Assim: PontoComCor pc = new PontoComCor(); Colorivel col = new PontoComCor(10.0, 5.0); x = pc.getx(); cor = pc.getcor(); cor = col.getcor(); col.setcor(99); ERRADAS : col.getx(); col.somaponto(1.0, 5.0); /** cf. as suas API */ Interfaces e Comparator 3

Uma Classe pode implementar várias interfaces: public class PontoComCorDatavel implements Colorivel, Datavel { // variáveis de instância private int x, y; // variáveis para implementar Colorível private int cor = 0; // variáveis para implementar Datavel private GregorianCalendar data = null; // métodos de instância.. // implementação de Colorivel public int getcor() { return cor; ; public void setcor(int ncor) { cor = ncor; ; // implementação de Datavel public void setdata(gregoriancalendar data) { this.data = (GregorianCalendar) data.clone(); public GregorianCalendar getdata() { return (GregorianCalendar) data.clone(); Interfaces e Comparator 4

As Interfaces de Java podem fazer parte de uma hierarquia de interfaces. Mas podem ser interfaces livres, desligadas de todas as outras. Por vezes dá mesmo jeito colocar certas interfaces numa hierarq ierarquia múltipla. Por exemplo, em JCF: Map<K, V> AbstractMap<K, V> SortedMap<K, V> Hashtable<K, V> HashMap<K, V> EnumMap<K, V> TreeMap<K, V> LinkedHashMap<K, V> Assim, a classe TreeMap<K,V> implementa a interface SortedMap<K,V> o que significa que por herança, implementa a interface Map<K,V> mais os métodos adicionais especificados em SortedMap<K,V>. Interfaces e Comparator 5

No nosso exemplo anterior, poderíamos ter: E então a classe PontoComCorDatavel Poderia ser declarada apenas como: public class PontoComCorDatavel implements ColorDatavel { Algumas interfaces de Java são muito importantes. Por exemplo a interface Comparable<T> definida da como: public interface Comparable<T> { int compareto(t obj); Qualquer classe que pretenda ter uma ordem natural (>, = <) definida para as suas instâncias deve implementar esta interface. A classe String e as classes Wrapper implementam esta interface Comparable<T> e por isso são automaticamente ordenadas em TreeSet<E> e TreeMap<K,V>. Interfaces e Comparator 6

Porém, o que fazer se se pretender ordenar objectos fora da sua ordem natural ou se se pretender ordenar objectos que não implementam Comparable<T>? USO DA INTERFACE Comparator<E> EM TreeSet<E> (e TreeMap<K,V> para K) As colecções Implementadas usando árvores possuem um construtor que permite que se defina um algoritmo de comparação a usar na ordenação dos objectos. No caso, por exemplo, de TreeSet<E>, TreeSet<E>(Comparator<E>) O parâmetro Comparator<E> é uma interface Parametrizada de Java, que está definida como: public interface Comparator<T> { int compare(t obj1, T obj2); // 0, 1 ou -1 Assim, se, por exemplo, pretendermos criar um TreeSet<Ponto2D> de forma a que os pontos estejam ordenados, temos que criar uma classe que implemente a interface Comparator<Ponto2D>, ou seja, implemente o método int compare(ponto2d obj1, Ponto2D obj2) Vejamos como poderia ser tal classe ( 1 de muitas hipóteses): Interfaces e Comparator 7

import java.util.comparator; public class PontoComparator implements Comparator<Ponto2D> { public int compare(ponto2d p1, Ponto2D p2) { if(p1.getx() < p2.getx()) return -1; if(p1.getx() > p2.getx()) return 1; if(p1.gety() < p2.gety()) return -1; if(p1.gety() > p2.gety()) return 1; else return 0; Temos pois uma classe que implementa a interface Comparator<Ponto2D>. Vamos agora testá-la, criando um TreeSet<Ponto2D> usando o construtor na forma new TreeSet<Ponto2D>(new PontoComparator()) e escrevendo um programa de teste que vai verificar se os elementos do conjunto são de facto enumerados conforme o algoritmo de ordenação definido. Interfaces e Comparator 8

/** * TestePontoComparator * * @author F. Mário Martins * @version 1/2006 */ import static java.lang.system.out; import java.util.*; public class TestePontoComparator { public static void main(string args[]) { TreeSet<Ponto2D> plano = new TreeSet<Ponto2D>(new PontoComparator()); plano.add( new Ponto2D(7.0, -1.0) ); plano.add( new Ponto2D(1.0, 2.0) ); plano.add( new Ponto2D(-3.0, 4.0) ); plano.add( new Ponto2D(2.0, 5.0) ); plano.add( new Ponto2D(-4.0, 4.0) ); plano.add( new Ponto2D(2.0, 1.0) ); for(ponto2d p : plano) out.println(p.tostring()); Interfaces e Comparator 9

RESULTADOS: Interfaces e Comparator 10

Relembrando a classe Plano, vamos redefini-la agora como, public class Plano implements Serializable { private TreeSet<Ponto2D> pontos; // Construtor por omissão: usa o comparador PontoComparator public Plano() { pontos = new TreeSet<Ponto2D>( new PontoComparator() ); // Recebe um conjunto de pontos e um algoritmo de ordenação e copia os // pontos para a variável de instância, ordenando-os por tal ordem public Plano(Set<Ponto2D> pts, Comparator<Ponto2D> comp) { pontos = new TreeSet<Ponto2D>( comp ); for(ponto2d p : pts) pontos.add(p.clone()); // Métodos de instância. // Método que devolve uma cópia do TreeSet<Ponto2D> // ordenado pelo algoritmo de ordenação passado como parâmetro public TreeSet<Ponto2D> ordenapor(comparator<ponto2d> comp) { TreeSet<Ponto2D> aux = new TreeSet<Ponto2D>(comp); for(ponto2d p : pontos) aux.add(p.clone()); return aux; Interfaces e Comparator 11

Classes e Interfaces JAVA pertencem a duas hierarquias distintas. A hierarquia de classes é de tipo simples enquanto que a de classes é uma hierarquia múltipla (1 interface pode herdar de mais do que uma). classe tipo Classe A Interf0 implements Interf0 Interf3 extends Interf1 Interf2 extends extends extends Classe B Interf1 Interf4 implements HIERARQUIA DE INTERFACES classe tipo Interfaces e Comparator 12

EXEMPLOS: ItemMulti Apagavel DVD CD Hi8 Regravavel DVDV DVDRW CDRW public interface Apagavel { public abstract void apaga(); public interface Regravavel extends Apagavel { public abstract void grava(byte[] cont); Interfaces e Comparator 13

INTERFACES PODEM SER IMPLEMENTADAS POR QUAISQUER CLASSES EM QUALQUER PONTO DA HIERARQUIA public interface Lavavel { public void alavar(int tempo); Lavavel Object Veiculo Animal Mota Carro Cao Gato Peixe INTERFACES Não interferem na hierarquia de classes Interfaces e Comparator 14

INTERFACES VERSUS CLASSES ABSTRACTAS A tabela apresenta mais algumas diferenças entre a utilização de interfaces e de classes abstractas, relativamente a propriedades diversas, não tanto conceptuais mas mais relacionadas com a funcionalidade e restrições na utilização. Propriedades Interfaces Classes Abstractas Herança Múltipla Uma classe pode implementar várias interfaces Uma classe só pode "estender" uma classe abstracta Implementação Não aceita nenhum código O código que se pretender, cf. as necessidades da concepção Constantes Relação is-a Adicionar funcionalidade Homogeneidade Velocidade (não é relevante) Apenas static final. Podem ser usadas pelas classes implementadoras sem qualificadores Em geral não descrevem a identidade principal de uma classe, mas capacidades periféricas aplicáveis a outras classes Não deve ser feito pois implicaria refazer todas as implementações da interface. Usar antes subinterfaces Classes que as implementam são homogéneas na API Requer extra indirecção na procura Interfaces versus classes abstractas De classe ou de instância e código de inicialização se necessário Descreve uma identidade básica de todos os seus descendentes Sem problema para as subclasses desde que o método seja codificado na classe abstracta Subclasses homogéneas em API e que partilham algum código, por exemplo, classes de dados Procura directa do método Interfaces e Comparator 15