Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ ›...

19
Fondamenti di Informatica T1 Interfaccia Comparable Collezioni Tutor Melissa Licciardello [email protected] Melissa Licciardello Fondamenti di Informatica T1 1 / 19

Transcript of Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ ›...

Page 1: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Fondamenti di Informatica T1Interfaccia Comparable

Collezioni

TutorMelissa Licciardello

[email protected]

Melissa Licciardello Fondamenti di Informatica T1 1 / 19

Page 2: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Interfaccia � Comparable �

Fa parte delle interfacce standard di Java

Se implementata, esprime la capacita di un oggetto di poter essereconfrontato con un altro dello stesso tipo secondo alcuni criteri decisidal programmatore

Per fare cio nella classe bisogna:I Implementare l’interfaccia Comparable <T>I Ridefinire il metodo public int compareTo(T x)

Il metodo in output deve seguire la seguente ipotesi semantica:I 0: gli oggetti sono ”uguali”I +1 : this e ”maggiore” di xI -1 : this e ”minore” di x

NB: le relazioni d’ordine non sono in senso strettamente numerico (es:ordine alfabetico?)

Melissa Licciardello Fondamenti di Informatica T1 2 / 19

Page 3: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Collezioni

L’interfaccia � Collection � introduce l’idea di ”collezione dielementi”

E’ estremamente generica: non si fanno ipotesi sulla natura dellacollezione

Metodi forniti:I add → aggiunge un elementoI remove → rimuove un elementoI contains → verifica se un elemento e nella collezioneI isEmpty → verifica se la collezione e vuotaI size → indica la cardinalita della collezioneI iterator → ottiene un oggetto di tipo IteratoreI toArray → crea un array con gli stessi elementi della collezioneI equals → verifica se due collezioni sono ugualiI ...

Melissa Licciardello Fondamenti di Informatica T1 3 / 19

Page 4: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Liste

L’interfaccia � List � estende e specializza � Collection �Introduce il concetto di sequenza di elementi

I Il metodo add corrisponde ad un ”append” → aggiunge un elemento infondo alla lista

I equals ritorna true se le liste contengono gli stessi elementi nello stessoordine

I Vengono introdotti nuovi metodi con notazione posizionale ( es :get(int index) )

Implementazione → ArrayList

Melissa Licciardello Fondamenti di Informatica T1 4 / 19

Page 5: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Set

L’interfaccia � Set � estende e specializza � Collection �Introduce il concetto di insieme di elementi (NB : NON in sequenza)

I Per sfogliarne il contenuto ci si appoggia all’utilizzo di Iteratori

Set non ammette la duplicazione di elementi al proprio interno → addfallisce nel caso in cui l’elemento che si sta tentando di inserire sia giapresente nell’insieme

I Per fare cio Set si appoggia al metodo equals della sua classe tipo → adefault confronta gli indirizzi di memoria

I Per modificare questo criterio bisogna ridefinire il metodo equals (ed ilmetodo public int hashCode())

Implementazione → HashSet

Melissa Licciardello Fondamenti di Informatica T1 5 / 19

Page 6: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 1 (SVOLTO)

Si vuole scrivere un programma per la modellazione del pianocartesiano. La classe Punto e formata semplicemente dalle suecoordinate cartesiane bidimensionali. Questa deve implementarel’interfaccia Comparable e ridefinire il metodo compareTo secondo larelazione d’ordine dettata dalla propria distanza dall’origine. La classePianoCartesiano e formata da un insieme ordinato di punti. Scrivere ilmetodo sort() che, una volta invocato, ordini in maniera crescente ipunti, dai piu vicini all’origine ai piu distanti. Scrivere infine un maindi prova per testare il corretto funzionamento delle classi sopradescritte.

Melissa Licciardello Fondamenti di Informatica T1 6 / 19

Page 7: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 1: Soluzione Punto (I)

Melissa Licciardello Fondamenti di Informatica T1 7 / 19

Page 8: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 1: Soluzione PianoCartesiano (I)

Melissa Licciardello Fondamenti di Informatica T1 8 / 19

Page 9: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 1: Soluzione PianoCartesiano (II)

Melissa Licciardello Fondamenti di Informatica T1 9 / 19

Page 10: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 1: Soluzione Main

Melissa Licciardello Fondamenti di Informatica T1 10 / 19

Page 11: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 2 (SVOLTO)

Si vuole scrivere un programma per la gestione online di acquisti difumetti. La classe Fumetto e composta da un titolo, un numero, unacasa editrice, una edizione ed un prezzo. Oltre ad i metodi getter esetter, ridefinire il metodo equals (due fumetti sono considerati ugualiquando hanno tutti i parametri con lo stesso valore, prezzo escluso)ed il metodo hashCode(). La classe CarrelloFumetteria e formata daun insieme di fumetti. Deve fornire due metodi

I public boolean aggiungiFumetto(Fumetto f) → prova ad aggiungere unfumetto al carrello. Nel caso in cui il fumetto fosse gia presente,sostituisce il nuovo al vecchio solo in caso di prezzo inferiore. Da truein caso di inserimento riuscito, false altrimenti.

I public double getConto() → Da in output la somma totale da pagare

Scrivere infine un main di prova per testare il corretto funzionamentodelle classi sopra descritte.

Melissa Licciardello Fondamenti di Informatica T1 11 / 19

Page 12: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 2: Soluzione Fumetto (I)

Melissa Licciardello Fondamenti di Informatica T1 12 / 19

Page 13: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 2: Soluzione Fumetto (II)

Melissa Licciardello Fondamenti di Informatica T1 13 / 19

Page 14: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 2: Soluzione CarrelloFumetteria

Melissa Licciardello Fondamenti di Informatica T1 14 / 19

Page 15: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 2: Soluzione Main

Melissa Licciardello Fondamenti di Informatica T1 15 / 19

Page 16: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 3

Un Corridore e descritto da un nome e da una tempistica in secondi.Oltre ad i metodi getter e setter deve implementare l’interfacciaComparable e quindi ridefinire il metodo compareTo (un atleta vieneprima di un altro quando la sua tempistica in secondi e inferiorerispetto a quella di quest’ultimo). La classe Competizione e formatada un premio in danaro ed una lista di corridori. La classe deve forniredue metodi

I public void aggiungiAtleta(Corridore a) → Si occupa di aggiungere uncorridore e di mantenere la lista in ordine crescente.

I public Corridore getVincitore() → da in output il corridore con il tempomigliore

Scrivere infine un main di prova per testare il corretto funzionamentodelle classi sopra descritte.

Melissa Licciardello Fondamenti di Informatica T1 16 / 19

Page 17: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 4

Si vuole scrivere un programma per l’organizzazione di un proprio kitdi sopravvivenza in caso di apocalisse zombie. Uno Strumento ecaratterizzato da una tipologia e da un peso. Oltre ad i metodi gettere setter, ridefinire i metodi equals() e hashCode() (due strumentisono considerati uguali quando sono della stessa tipologia). La classeKitSopravvivenza e composta da un peso massimo e da un insieme distrumenti. Deve fornire i seguenti metodi

I public boolean aggiungiElemento(Strumento strumento) → Se nonviene superato il peso massimo aggiunge lo strumento al kit disopravvivenza. Nel caso in cui lo strumento fosse gia presente,sostituisce il nuovo al vecchio in caso di peso inferiore.

I Ridefinizione del metodo toString() → restituisce una stringacontenente l’elenco degli strumenti contenuti ed, infine, il peso totaledel kit.

Scrivere infine un main di prova per testare il corretto funzionamentodelle classi sopra descritte. Il peso massimo del kit deve essere il pesodell’utente.

Melissa Licciardello Fondamenti di Informatica T1 17 / 19

Page 18: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 5

Si vuole scrivere un programma per la gestione degli impegniquotidiani. Un Impegno e caratterizzato da una stringa contenente ladescrizione di cosa fare, un orario (un intero da 1 a 24) ed un interoda 1 a 5 che ne indica l’urgenza. Deve implementare l’interfacciaComparable e ridefinire il metodo compareTo secondo il criteriotemporale. La classe ToDoList e formata da una lista di impegni edeve contenere i seguenti metodi:

I public boolean aggiungiImpegno(Impegno impegno) → Aggiunge unimpegno alla lista, preoccupandosi di mantenerla ordinata in ordinecrescente secondo il criterio temporale. In caso di sovrapposizione diimpegni (impegni che capitano ad uno stesso orario) deve esseremantenuto quello con maggiore urgenza. Da true in caso diinserimento riuscito, false altrimenti.

I public List <Impegno> getUrgenti() → Da in output la lista degliimpegni con urgenza massima.

Scrivere infine un main di prova per testare il corretto funzionamentodelle classi sopra descritte.

Melissa Licciardello Fondamenti di Informatica T1 18 / 19

Page 19: Fondamenti di Informatica T1 Interfaccia Comparable Collezioni › courses › FIT1-LZ › LABORATORIO › slide › ... · 2015-05-26 · Scrivere in ne un main di prova per testare

Esercizio 6

Un PacchettoVacanze e formato da una meta, un costo ed un id (unintero). Oltre ad i metodi getter e setter, ridefinire i metodi equals ehashCode (due pacchetti sono considerati uguali se hanno lo stessoid). La classe AgenziaViaggi e composta da un insieme di pacchetti edeve fornire i seguenti metodi:

I public Set <PacchettoVacanze> ricercaPerMeta(String meta) → da inoutput l’insieme di pacchetti viaggio che hanno come destinazione lameta passata come argomento.

I public Set <PacchettoVacanze> ricercaPerPrezzo(int min, int max) →da in output l’insieme di pacchetti viaggio il cui prezzo appartiene alrange passato come argomento.

Scrivere infine un main di prova per testare il corretto funzionamentodelle classi sopra descritte.

Melissa Licciardello Fondamenti di Informatica T1 19 / 19