12.07.2015 Views

Java mette a disposizione diverse interfacce predefinite. Un ...

Java mette a disposizione diverse interfacce predefinite. Un ...

Java mette a disposizione diverse interfacce predefinite. Un ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Laboratorio di Sistemi Ordinamento di oggetti <strong>Java</strong><strong>Java</strong> <strong>mette</strong> a <strong>disposizione</strong> <strong>diverse</strong> <strong>interfacce</strong> <strong>predefinite</strong>. <strong>Un</strong> esempio è l'interfaccia Comparablee consente di confrontare un oggetto con un altro. Per far questo dobbiamo implementare ilmetodo compareTo(). L'interfaccia Comparable è infatti definita come:public interface Comparable {int compareTo(Object o);}Fig. 1 – Interfaccia ComparableA titolo di esempio consideriamo la classe Libro con i 3 attributi isbn, titolo (del libro) e prezzo,secondo lo schema seguente:/** Libro.java** Created on 7 aprile 2008, 20.38**/package ordinaoggettijavaapp;/**** @author maurizio*/public class Libro implements Comparable {private String isbn;private String titolo;private double prezzo;/** Creates a new instance of Libro */public Libro() {}public Libro(String isbn, String titolo) {this.setIsbn(isbn);this.setTitolo(titolo);}public Libro(String isbn, String titolo, double prezzo) {this(isbn,titolo);this.prezzo = prezzo;}// getter e setterpublic String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}ordinamento_oggetti.pdf Pag. 1/5 Cozzetto ©


Laboratorio di Sistemi Ordinamento di oggetti <strong>Java</strong>public String getTitolo() {return titolo;}public void setTitolo(String titolo) {this.titolo = titolo;}// implementazione del metodo dell'interfaccia Comparablepublic int compareTo(Object l) {// confronto in base all'isbn//return this.getIsbn().compareTo(((Libro)l).getIsbn());// confronto in base al titolo//return this.getTitolo().compareTo(((Libro)l).getTitolo());// confronto in base al prezzoif (this.getPrezzo()((Libro)l).getPrezzo())return 1;elsereturn 0;} // fine metodo compareTo()@Overridepublic String toString() {return "Libro corrente: isbn="+getIsbn()+", titolo="+getTitolo()+", prezzo="+getPrezzo();}public double getPrezzo() {return prezzo;}public void setPrezzo(double prezzo) {this.prezzo = prezzo;}} // fine classe LibroAbbiamo implementato il metodo compareTo() per effettuare un confronto tra i prezzi dei librima in maniera analoga è possibile confrontare tra loro i libri in base al contenuto dell'isbn o deltitolo (si tratta di dati di tipo stringa). Ricordiamo che per confrontare tra loro due stringhe siutilizza il metodo compareTo():int result = str1.compareTo(str2);Fig. 2 – Confronto tra le stringhe str1 e str2Il metodo restituisce un intero che vale -1 se str1


Laboratorio di Sistemi Ordinamento di oggetti <strong>Java</strong>Scriviamo la classe Main/** Main.java*/Fig. 3 – I tre libri (non ordinati ancora in base al prezzo)e l'array dei libripackage ordinaoggettijavaapp;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/**** @author maurizio*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {// 3 libriLibro l1 = new Libro("12-3456-789-0","<strong>Java</strong>: la programmazione a oggetti",24.60);Libro l2 = new Libro("01-2345-678-9","Reti di calcolatori",18.80);Libro l3 = new Libro("90-1234-567-8","Internet",30.60);Libro[] arrayLibri={l1, l2, l3};// visualizziamo i libri prima dell'ordinamentoSystem.out.println("Prima");System.out.println("=============");for (Libro l : arrayLibri)System.out.println(l.toString());// ordiniamo l'array di libri in base al prezzo// (classe Libro che implementa Comparable)// sort è un metodo statico della classe ArraysArrays.sort(arrayLibri);ordinamento_oggetti.pdf Pag. 3/5 Cozzetto ©


Laboratorio di Sistemi Ordinamento di oggetti <strong>Java</strong>// visualizziamo i libri dopo l'ordinamentoSystem.out.println("Dopo");System.out.println("=============");for (Libro l : arrayLibri)System.out.println(l.toString());} // fine main} // fine classe MainQualora si voglia usare una lista, occorre trasformare l'arraylist in un array di oggetti di tipoLibro mediante il metodo toArray().Ecco la classe Main se vogliamo seguire questa seconda strada./** Main.java altenativo*/package ordinaoggettijavaapp;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/*** @author maurizio*/public class Main {public static void main(String[] args) {// 3 libriLibro l1 = new Libro("12-3456-789-0","<strong>Java</strong>: la programmazione a oggetti",24.60);Libro l2 = new Libro("01-2345-678-9","Reti di calcolatori",18.80);Libro l3 = new Libro("90-1234-567-8","Internet",30.60);// arraylist di libriList listaLibri = new ArrayList();// aggiungiamo i 3 libri all'arraylistlistaLibri.add(l1);listaLibri.add(l2);listaLibri.add(l3);// array di libri con dimensione pari a quella dell'arraylistLibro[] arrayLibri=new Libro[listaLibri.size()];// otteniamo dall'arraylist un array di libriarrayLibri = listaLibri.toArray(arrayLibri);// visualizziamo i libri prima dell'ordinamentoSystem.out.println("Prima");System.out.println("=============");for (Libro l : arrayLibri)System.out.println(l.toString());// ordiniamo l'array di libri in base al prezzo// (classe Libro che implementa Comparable)Arrays.sort(arrayLibri);ordinamento_oggetti.pdf Pag. 4/5 Cozzetto ©


Laboratorio di Sistemi Ordinamento di oggetti <strong>Java</strong>// visualizziamo i libri dopo l'ordinamentoSystem.out.println("Dopo");System.out.println("=============");for (Libro l : arrayLibri)System.out.println(l.toString());} // fine main} // fine classe MainIn entrambi i casi l'output è lo stesso:Prima=============Libro corrente: isbn=12-3456-789-0, titolo=<strong>Java</strong>: la programmazione a oggetti, prezzo=24.6Libro corrente: isbn=01-2345-678-9, titolo=Reti di calcolatori, prezzo=18.8Libro corrente: isbn=90-1234-567-8, titolo=Internet, prezzo=30.6Dopo=============Libro corrente: isbn=01-2345-678-9, titolo=Reti di calcolatori, prezzo=18.8Libro corrente: isbn=12-3456-789-0, titolo=<strong>Java</strong>: la programmazione a oggetti, prezzo=24.6Libro corrente: isbn=90-1234-567-8, titolo=Internet, prezzo=30.6BUILD SUCCESSFUL (total time: 1 second)ordinamento_oggetti.pdf Pag. 5/5 Cozzetto ©

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!