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



Documentos relacionados
Programação Orientada por Objetos

Capítulo 4. Packages e interfaces

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

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

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

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

Técnicas de Programação II

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.

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

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

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

Análise de Programação

Programação Orientada a Objetos. Encapsulamento

5 Caso de estudo O cartão fidelidade

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

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

Keeper of Knowledge. Capítulo 2 Classes em Java

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

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

Java 2 Standard Edition Como criar classes e objetos

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

Programação Orientada a Objetos em Java

Programação por Objectos. Java

Java. Marcio de Carvalho Victorino

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

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

Análise e Projeto Orientados por Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

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

Programação por Objectos. Java

Encapsulamento de Dados

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

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

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

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

Programação Orientada a Objetos (DPADF 0063)

Classes Abstratas e Interfaces

Exercícios de Revisão Java Básico

Computação II Orientação a Objetos

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

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

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

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

Programação Orientada a Objetos em java. Polimorfismo

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

BSI UFRPE Prof. Gustavo Callou

Módulo 06 Desenho de Classes

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Orientação a Objetos com Java

Java TM e o Modelo de Objetos

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

BSI UFRPE Prof. Gustavo Callou

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

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

Capítulo 8. Introdução UML

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Conversão de Tipos e Arrays

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

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

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

UNIVERSIDADE FEDERAL DO PARANÁ

Reuso com Herança a e Composiçã

Universidade da Beira Interior. Sistemas Distribuídos

Herança. Alberto Costa Neto DComp - UFS

Sobre o Professor Dr. Sylvio Barbon Junior

Linguagem de Programação III

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

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

Introdução a Java. Hélder Nunes

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

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

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

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

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

Unidade IV: Ponteiros, Referências e Arrays

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Implementação de Classe e Auto-Relacionamento em Java

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

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Estrutura em Camadas. Estrutura em Camadas. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Aula 3 Objeto atual com referencia THIS e Classes com Herança

Programação Avançada

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

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

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

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Programação com Objectos

UNIVERSIDADE FEDERAL DO PARANÁ

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

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

Transcrição:

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

PPROG Motivação para usar Interfaces Definição de Interface Interface define Tipo de Dados Estruturas de Interfaces Hierarquia de Interfaces Herança Múltipla Declaração de uma Interface Uso de Interfaces Implementação numa classe Declaração Variável Parâmetro de Método Comparação Interfaces Classes Abstratas Sumário Geral Interfaces Java Nativas Exemplos Comparable Comparator Interesse de Comparable e Comparator Ordenação e Pesquisa de Contentores Ordenação de Contentores Métodos de Ordenação das Classes Arrays Collections Ordenação de Arrays Com Objetos Comparable Com Objetos não-comparable Ordenação de ArrayLists Com Objetos Comparable Com Objetos não-comparable Comparação de Interfaces Comparable Comparator Nelson Freire (ISEP DEI-PPROG 2013/14) 2/33

Aplicação Processa instâncias da hierarquia de classes Motivação para usar Interfaces 1/6 A B1 C1 B2 C2 Guarda todas as instâncias num contentor Nelson Freire (ISEP DEI-PPROG 2013/14) 3/33

Problema 1 Motivação para usar Interfaces 2/6 Executar m1() das instâncias do contentor Através de varrimento completo do contentor Solução A B1 C1 B2 C2 Tipo Compatível com todos tipos da hierarquia e que possua m1() Nelson Freire (ISEP DEI-PPROG 2013/14) 4/33

Problema 2 Executar m2() das instâncias Cx (x:1,2) do contentor Solução Através de varrimento completo do contentor Motivação para usar Interfaces 3/6 B1 A B2 C1 público m2() C2 público m2()?? Tipo Compatível com tipos Cx e que possua m2() Nelson Freire (ISEP DEI-PPROG 2013/14) 5/33

Solução Motivação para usar Interfaces 4/6?? Preciso tipo de dados Tipo de todas as instâncias Cx // uma instância pode ser de vários tipos // ex: C1 é também do tipo B1 e A Declare método m2 // garante m2() em todas as classes Cx Tipo A não serve Tipo comum.mas não declara método m2 // método não-comum a todos obj. da hier. Preciso novo tipo de dados Exemplo: Calculos Nelson Freire (ISEP DEI-PPROG 2013/14) 6/33

Solução Motivação para usar Interfaces 5/6 B1 A B2 Calculos público m2() C1 público m2() C2 público m2() Em Java, novo tipo Calculos Não pode ser definido por classe Permitida apenas herança de classes simples Subclasse só tem uma superclasse direta T E F G Tem de ser definido por Interface Java Alternativa à herança múltipla H I J Herança Simples Nelson Freire (ISEP DEI-PPROG 2013/14) 7/33

Motivação Geral para usar Interfaces Motivação para usar Interfaces 6/6 Necessidade de garantir que múltiplas classes, não relacionadas hierarquicamente (mesmo ramo), sejam também de um mesmo tipo de dados de modo a assegurar que possuam métodos comuns (interface comum). Interface X métodos Especifica tipo de dados X é-um Object implementa K M Classe L também é do tipo X L métodos N O P métodos Classe P também é do tipo X Hierarquia de Classes Alternativa Java à Herança de Classes múltipla Nelson Freire (ISEP DEI-PPROG 2013/14) 8/33

Definição de Interface Interface é Uma especificação de um tipo de dados abstrato (sem implementação dos métodos) que qualquer classe pode implementar (classe em qualquer ponto da Hierarquia de Classes Java) Especificação pode definir Conjunto de métodos de instância abstratos (só cabeçalhos) // opcional Conjunto de constantes // opcional Interface Y constantes Tipo Y métodos é-um Object implementa K M L métodos N O P métodos Também é do Tipo Y Hierarquia de Classes Nelson Freire (ISEP DEI-PPROG 2013/14) 9/33

Interface Especifica Tipo de dados referência Tipos de Dados Java Primitivos Referência Classes Interfaces Interface define Tipo de Dados Interface Y constantes métodos Tipo Y (tipo Referência) é-um K Object implementa M L métodos N O Hierarquia de Classes P métodos Nelson Freire (ISEP DEI-PPROG 2013/14) 10/33

Especificações Opcionais Estruturas de Interfaces Métodos Constantes Estruturas de Interfaces possíveis Interface Interface Interface Interface constantes constantes métodos métodos Nelson Freire (ISEP DEI-PPROG 2013/14) 11/33

Hierarquia de Interfaces Interfaces podem pertencer a Hierarquias de Interfaces Diferente da Hierarquia de Classes X Superinterface Tipos de Hierarquia (em Java) é-um Hierarquia de Classes Y W Subinterface Hierarquia de Interfaces Z V U Hierarquia de Interfaces Estabelece relações hierárquicas entre interfaces Relações do tipo é-um Subinterface estende (aumenta) Superinterface public interface V extends Y, W { Permitida herança múltipla Subinterface pode herdar múltiplas Superinterfaces diretas Uma interface pode ter ou não Superinterfaces Exemplos Interface X // não tem Superinterface Interface Z // tem Superinterfaces Y e X Nelson Freire (ISEP DEI-PPROG 2013/14) 12/33

Declaração de uma Interface Sintaxe [modificador de acesso] interface nomeinterface [ extends Interface1,, InterfaceN ] { // Declarações de constantes [public static final] tipo nomeconstante1 = value1; Constantes Por omissão (implicitamente) public static final [public static final] tipo nomeconstanten = valuen; // Declarações de métodos (só cabeçalhos) [public abstract] tiporetorno nomemetodo1( listaparâmetros ); [public abstract] tiporetorno nomemetodom( listaparâmetros ); Métodos Por omissão public abstract Só de instância Exemplos Definido pelo utilizador (programador) public interface Calculos { double m2(); Nativas do Java public interface Serializable { Uma interface é armazenada num ficheiro com o mesmo nome e extensão java Exemplo: Calculos.java // abordada em Ficheiros public interface Comparable { int compareto( Object o ); Nelson Freire (ISEP DEI-PPROG 2013/14) 13/33

Interfaces podem ser usadas para Uso de Interfaces 1/5 Implementar numa classe Declarar Variável Parâmetro de método Nelson Freire (ISEP DEI-PPROG 2013/14) 14/33

Implementação de uma interface numa classe Depende do tipo de classe Abstrata: não é obrigatório implementar qualquer método da interface usada Concreta: se não implementar todos os métodos da interface usada, tem de passar a classe abstrata Declaração de classe concreta que implementa (usa) interfaces [modificador de acesso] class nome [extends Classe] implements Interface1,, InterfaceN { // implementação obrigatória de todos os métodos dos N interfaces Declaração de classe abstrata que implementa (usa) interfaces Exemplo [modif. de acesso] abstract class nome [extends Classe] implements Interface1,, InterfaceN { // implementação dos métodos dos N interfaces não é obrigatória Próximo slide Uso de Interfaces 2/5 Nelson Freire (ISEP DEI-PPROG 2013/14) 15/33

Exemplo de implementação da interface Calculos Uso de Interfaces 3/5 public class C1 extends B1 implements Calculos { public double m2() { public class C2 extends B2 implements Calculos { public double m2() { B1 C1 público m2() A Hierarquia de Classes B2 C2 público m2() Calculos público m2() implementa Classes C1 e C2 implementam método especificado no tipo Calculos Nelson Freire (ISEP DEI-PPROG 2013/14) 16/33

Na declaração de variáveis de tipo Interface Uso de Interfaces 4/5 Sintaxe nomeinterface nomevariável; nomeinterface[ ] nomevariável; // variável tipo simples // variável tipo array Exemplo Calculos x1; // variável tipo simples x1 = new C1(); Calculos x2 = new C2(); Calculos[] a = new Calculos[10]; a[0] = x1; a[1] = x2; // variável tipo array Nelson Freire (ISEP DEI-PPROG 2013/14) 17/33

Na declaração de parâmetros de métodos Uso de Interfaces 5/5 Sintaxe nomeinterface nomeparâmetro; nomeinterface[ ] nomeparâmetro; // parâmetro tipo simples // parâmetro tipo array Exemplo public void m( Calculos c ){ // Corpo do método // parâmetro tipo simples public static void ordenar( Calculos[ ] a ){ // Corpo do método // parâmetro tipo array Nelson Freire (ISEP DEI-PPROG 2013/14) 18/33

Têm propósitos diferentes Classes abstratas: Permitir criação de hierarquias de classes Interfaces: Especificar e garantir implementação de funcionalidades adicionais comuns a classes não relacionadas hierarquicamente Há muitas diferenças entre interfaces e classes abstratas Exemplos Comparação entre Interfaces e Classes Abstratas 100% abstrato (abstração total) Interface Classe pode implementar vários interfaces Classe Abstrata Pode não ser 100% abstrato (abstração parcial ou total) Classe só pode herdar uma classe abstrata Daí Interfaces não podem ser considerados substitutos de classes abstratas Não há regras para decidir entre classes abstratas e interface Algumas orientações: Classe abstrata não é apropriada para definir métodos que não são comuns a todas as subclasses duma hierarquia de classes Porque obriga implementação dos seus métodos abstratos nas classes instanciáveis Usar interfaces para evitar criação de hierarquias de classes artificiais e a reestruturação de hierarquias Nelson Freire (ISEP DEI-PPROG 2013/14) 19/33

PPROG Motivação para usar Interfaces Definição de Interface Interface define Tipo de Dados Estruturas de Interfaces Hierarquia de Interfaces Herança Múltipla Declaração de uma Interface Uso de Interfaces Implementação numa classe Declaração Variável Parâmetro de Método Comparação Interfaces Classes Abstratas Sumário Geral Interfaces Java Nativas Exemplos Comparable Comparator Interesse de Comparable e Comparator Ordenação e Pesquisa de Contentores Ordenação de Contentores Métodos de Ordenação das Classes Arrays Collections Ordenação de Arrays Com Objetos Comparable Com Objetos não-comparable Ordenação de ArrayLists Com Objetos Comparable Com Objetos não-comparable Comparação de Interfaces Comparable Comparator Nelson Freire (ISEP DEI-PPROG 2013/14) 20/33

Java Nativos Interfaces Interfaces Java Nativas Disponibilizados pelo JDK Exemplos Comparable Comparator Interesse de Comparable e Comparator Ordenação Pesquisa de Contentores Realizada por Métodos das Classes Nativas Arrays Collections Nesta Aula Abordada a Ordenação de Contentores Nelson Freire (ISEP DEI-PPROG 2013/14) 21/33

Java Nativos Métodos de Ordenação de Contentores Disponibilizados pelas Classes // package java.util Arrays // prestadora de serviços para arrays Collections // prestadora de serviços para coleções (Ex: ArrayList) Métodos de Ordenação da Classe Arrays Aplicam-se a Contentores Tipo Array Com Objetos Comparable // requer interface Comparable Com Objetos Não-Comparable // requer interface Comparator Métodos de Ordenação da Classe Collections Aplicam-se a Contentores Tipo ArrayList Com Objetos Comparable // requer interface Comparable Com Objetos Não-Comparable // requer interface Comparator Nelson Freire (ISEP DEI-PPROG 2013/14) 22/33

Java Nativos Métodos da Classe Arrays Para arrays com Objetos Comparable Métodos de Ordenação de Contentores Tipo Array public static void sort( Object[] a ) // método de classe Obrigatório Objetos do array a sejam do tipo Comparable Cujas classes implementam interface Comparable Podem implicar a alteração de classes existentes Ordenação ascendente Critério de ordenação definido nas classes dos objetos Para arrays com Objetos Não-Comparable public static void sort( T[] a, Comparator c ) // método de classe Objetos não-comparable Cujas classes não implementam interface Comparable Não obrigam alteração de classes existentes Ordenação ascendente Critério de ordenação definido no objeto Comparator c passado por parâmetro Nelson Freire (ISEP DEI-PPROG 2013/14) 23/33

Java Nativos Exemplo Ordenação de array com instâncias da Hierarquia de Classes abaixo apresentada Critério de ordenação: resultado de m1() Ordem: ascendente Para tornar Objetos Comparable Classes têm de implementar interface Comparable Critério de Ordenação Definido no método compareto() dos objetos do array Método de Ordenação Arrays.sort( array ) Ordenação de Array com Objetos Comparable import java.util.arrays; public class DemoInterfaces { public static void main(string[] args) { A[] a = new A[10]; a[0] = new B1(); a[1] = new B2(); Arrays.sort( a ); // por m1() for(int i=0; i<a.length; i++){ System.out.println( a[i] ); // objetos ordenados Interface Comparable público compareto() implementa A B1 B2 C1 C2 Hierarquia de Classes Nelson Freire (ISEP DEI-PPROG 2013/14) 24/33

Java Nativos Declaração Interface Comparable 1/2 public interface Comparable { public int compareto( Object obj ); Método compareto Requisitos Comparar objeto parâmetro obj com objeto recetor da mensagem Retornar valor inteiro Negativo (<0 : típico -1) // valor do recetor < valor do parâmetro Igual a Zero (0) // valor do recetor = valor do parâmetro Positivo (>0 : típico 1) // valor do recetor > valor do parâmetro Implementado por algumas classes nativas do Java Objetivo Ter uma ordem nas suas instâncias // designada ordem natural Exemplos String Date Implementação desta interface numa classe garante a quem a usa Ordem nas suas instâncias Segundo critério (método) de ordenação definido no método compareto Nelson Freire (ISEP DEI-PPROG 2013/14) 25/33

Java Nativos Exemplo Interface Comparable 2/2 Implements na superclasse Garante implementações em todas as classes instanciáveis da hierarquia Interface Comparable público compareto() implementa public class A implements Comparable { public int compareto( Object obj ) { A o = (A) obj; B1 C1 A B2 C2 Hierarquia de Classes if ( m1() > o.m1() ) return 1; else if (m1() < o.m1() ) return -1; else return 0; public class B1 extends A { // Herda método compareto de A public class B2 extends A { // Herda método compareto de A Nelson Freire (ISEP DEI-PPROG 2013/14) 26/33

Java Nativos Exemplo Anterior Método de Ordenação Arrays.sort( array, objetocomparator ) Critério de Ordenação Definido no método compare() de um objeto auxiliar do tipo Comparator (objetocomparator) Vantagens Não obriga a modificar classes dos objetos do array Permite ordenar mesmo array por critérios diferentes Exemplo import java.util.arrays; public class DemoInterfaces { public static void main(string[] args) { A[] a = new A[10]; a[0] = new B1(); a[1] = new B2(); Ordenação de Array com Objetos não-comparable Slides Seguintes Comparator criterio = new Comparator() {? ; Arrays.sort( a, criterio ); // por m1() for(int i=0; i<a.length; i++){ System.out.println(a[i]); // obj. ordenados Nelson Freire (ISEP DEI-PPROG 2013/14) 27/33 B1 C1 Interface Comparator público compare() A Hierarquia de Classes implementa Classe Auxiliar (Anónima) B2 C2

Java Nativos Declaração Interface Comparator 1/2 public interface Comparator { int compare( Object o1, Object o2 ); Semelhante ao interface Comparable Especifica método com Sintaxe diferente Semântica igual Método compare Requisitos Comparar os objetos parâmetro (o1 e o2) Retornar como resultado um valor inteiro Negativo (<0 : típico -1) // valor do parâmetro 1 < valor do parâmetro 2 Igual a Zero (0) // valor do parâmetro 1 = valor do parâmetro 2 Positivo (>0 : típico 1) // valor do parâmetro 1 > valor do parâmetro 2 Nelson Freire (ISEP DEI-PPROG 2013/14) 28/33

Java Nativos Interface Comparator 2/2 public class DemoInterface { public static void main(string[] args) { A[] a = new A[10]; a[0] = new B1(); a[1] = new B2(); // Objeto para definir critério de ordenação das instâncias Comparator criterio = new Comparator() { public int compare( Object o1, object o2 ) { ; double r1 = ( (A) o1 ).m1(); double r2 = ( (A) o2 ).m1(); if ( r1 == r2 ) return 0; else if ( r1 > r2 ) return 1; else return -1; // Ordenação do array segundo critério fornecido em criterio Arrays.sort( a, criterio ); for(int i=0; i<a.length; i++){ System.out.println( a[i] ); // Exemplo de uso da interface Comparator // classe anónima cria só 1 objeto // classe anónima = classe interna // Ordenação pelo m1() // instâncias ordenadas Nelson Freire (ISEP DEI-PPROG 2013/14) 29/33

Java Nativos Métodos da Classe Collections Semelhantes aos da classe Arrays // parâmetro tipo List em vez de array Para ArrayLists com Objetos Comparable Métodos de Ordenação de Contentores Tipo ArrayList public static void sort( List lista ) // método de classe Obrigatório Objetos do arraylist lista sejam do tipo Comparable Cujas classes implementam interface Comparable Podem implicar a alteração de classes existentes Ordenação ascendente Critério de ordenação definido nas classes dos objetos Para ArrayLists com Objetos Não-Comparable public static void sort( List lista, Comparator c ) // método de classe Objetos não-comparable Cujas classes não implementam interface Comparable Não obrigam alteração de classes existentes Ordenação ascendente Critério de ordenação definido no objeto Comparator c passado por parâmetro Nelson Freire (ISEP DEI-PPROG 2013/14) 30/33

Java Nativos Exemplo Ordenação de ArrayList com Objetos Comparable Obrigatório contentor de instâncias Comparable public class DemoInterfaces { public static void main(string[] args) { ArrayList a = new ArrayList(); a.add( new B1() ); a.add( new B2() ); Collections.sort( a ); // por m1() public class A implements Comparable { public int compareto( Object o ) { if ( m1() > ( (A) o).m1() ) return 1; else if (m1() < ( (A) o).m1() ) return -1; else return 0; for( Object obj : a ){ System.out.println( obj ); Interface Comparable público compareto() implementa A B1 B2 C1 C2 Hierarquia de Classes Nelson Freire (ISEP DEI-PPROG 2013/14) 31/33

Java Nativos Exemplo Ordenação de ArrayList com Objetos não-comparable public class DemoInterfaces { public static void main(string[] args) { ArrayList a = new ArrayList(); a.add( new B1() ); a.add( new B2() ); Comparator criterio = new Comparator() { public int compare(object o1, object o2) { ; double r1 = ( (A) o1 ).m1(); double r2 = ( (A) o2 ).m1() if ( r1 == r2 ) return 0; else if ( r1 > r2 ) return 1; else return -1; // Ordenação do array segundo critério fornecido em criterio Collections.sort( a, criterio ); for( Object obj : a ){ System.out.println( obj ); // classe anónima cria só 1 objeto // para definir critério de ordenação das figuras // Ordenação por m1() // mostra instâncias ordenadas Nelson Freire (ISEP DEI-PPROG 2013/14) 32/33 B1 A Hierarquia de Classes B2 Interface Comparator público compare() implementa Classe Auxiliar (Anónima)

Java Nativos Comparator Comparação de Interfaces: Comparable e Comparator Permite solução mais flexível do que solução Comparable Solução Comparable Obriga implementação dessa interface Em todas as classes dos objetos a ordenar Inaceitável quando se pretende código estável, genérico e incremental Ou então, numa nova subclasse Apenas para ordenar Interface Comparable implementa Classe ("a ordenar") Critério de Ordenação Permite só 1 critério de ordenação Definido nas classes dos objetos a ordenar Solução Comparator Não obriga implementação da interface nas classes dos objetos a ordenar i.e., não requer a modificação de classes existentes Permite múltiplos critérios de ordenação Classe ("a ordenar") Interface Comparator implementa Classe Auxiliar Critério de Ordenação Definidos em classes auxiliares tipo Comparator Nelson Freire (ISEP DEI-PPROG 2013/14) 33/33