Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
c 2005 Pearson Education Italia Capitolo 9 - 1 / 73
Sommario: Tipi enumerativi, tipi generici e interfacce
3 Definizione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 2 / 73
Estensione di una classe
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 4 / 73
Estensione di una classe
Esempio
public enum MeseDellAnno {
// COSTANTI ENUMERATIVE
GENNAIO, FEBBRAIO, MARZO, APRILE, MAGGIO, GIUGNO, LUGLIO,
AGOSTO, SETTEMBRE, OTTOBRE, NOVEMBRE, DICEMBRE;
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 4 / 73
Estensione di una classe
Esempio
public enum MeseDellAnno {
// COSTANTI ENUMERATIVE
GENNAIO, FEBBRAIO, MARZO, APRILE, MAGGIO, GIUGNO, LUGLIO,
AGOSTO, SETTEMBRE, OTTOBRE, NOVEMBRE, DICEMBRE;
}
Esempio
public enum MeseDellAnno {
// COSTANTI ENUMERATIVE
GENNAIO, FEBBRAIO, MARZO, APRILE, MAGGIO, GIUGNO, LUGLIO,
AGOSTO, SETTEMBRE, OTTOBRE, NOVEMBRE, DICEMBRE;
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 6 / 73
MeseDellAnno
Esempio
public enum MeseDellAnno {
// COSTANTI ENUMERATIVE
GENNAIO, FEBBRAIO, MARZO, APRILE, MAGGIO, GIUGNO, LUGLIO,
AGOSTO, SETTEMBRE, OTTOBRE, NOVEMBRE, DICEMBRE;
}
Fase di esecuzione
La JVM crea un oggetto per ogni identificatore indicato e ne memorizza il
riferimento nella costante corrispondente
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 6 / 73
La classe Enum
Ogni tipo enumerativo è una classe che estende la classe generica
Enum<E extends Enum<E>> (java.lang)
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 8 / 73
La classe Enum
Ogni tipo enumerativo è una classe che estende la classe generica
Enum<E extends Enum<E>> (java.lang)
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 8 / 73
La classe Enum
Ogni tipo enumerativo è una classe che estende la classe generica
Enum<E extends Enum<E>> (java.lang)
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 8 / 73
Il metodo statico values di Enum¡E extends Enum¡E¿¿
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 10 / 73
Il metodo statico values di Enum¡E extends Enum¡E¿¿
Esempio
Il tipo enumerativo MeseDellAnno dispone automaticamente del metodo
statico
MeseDellAnno.values()
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 10 / 73
Metodi: ridefinizione di toString
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 12 / 73
Nuovi metodi
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 14 / 73
Nuovi metodi
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 14 / 73
Implementazione
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 16 / 73
Implementazione
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 16 / 73
I metodi numeroGiorni
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 18 / 73
I metodi numeroGiorni
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 18 / 73
I metodi numeroGiorni
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 18 / 73
Constant-specific methods
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 22 / 73
Constant-specific methods
Esempio
numeroGiorni è stato dichiarato astratto nel corpo del tipo enumerativo
MeseDellAnno.
Senza tale dichiarazione
MeseDellAnno m;
...
m.numeroGiorni()
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 22 / 73
Tipi enumerativi: campi e costruttori
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 24 / 73
Tipi enumerativi: campi e costruttori
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 24 / 73
Tipi enumerativi: campi e costruttori
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 24 / 73
MeseDellAnno: un implementazione più elegante
// CAMPI
private String nome;
private int numGiorni;
// COSTRUTTORI
private MeseDellAnno(String nome, int numGiorni) {
this.nome = nome;
this.numGiorni = numGiorni;
}
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 26 / 73
MeseDellAnno: un’implementazione più elegante
// CAMPI
private String nome;
private int numGiorni;
// COSTRUTTORI
private MeseDellAnno(String nome, int numGiorni) {
this.nome = nome;
this.numGiorni = numGiorni;
}
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 28 / 73
I metodi numeroGiorni e toString
// CAMPI
private String nome;
private int numGiorni;
...
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 32 / 73
I metodi numeroGiorni
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 34 / 73
La classe generica Coppia<E, F>
Contratto
Le istanze di Coppia<E, F> sono coppie di oggetti, il primo di tipo E ed il
secondo di tipo F.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 36 / 73
La classe generica Coppia<E, F>
Contratto
Le istanze di Coppia<E, F> sono coppie di oggetti, il primo di tipo E ed il
secondo di tipo F.
Esempio
Data d = new Data(22, 1, 2005);
Orario o = new Orario(23, 33);
Coppia<Data, Orario> tempo = new Coppia<Data, Orario>(d, o);
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 36 / 73
I metodi
public E getSinistro()
Restituisce il primo elemento della coppia, cioè quello di sinistra.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 38 / 73
I metodi
public E getSinistro()
Restituisce il primo elemento della coppia, cioè quello di sinistra.
public F getDestro()
Restituisce il secondo elemento della coppia, cioè quello di destra.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 38 / 73
I metodi
public E getSinistro()
Restituisce il primo elemento della coppia, cioè quello di sinistra.
public F getDestro()
Restituisce il secondo elemento della coppia, cioè quello di destra.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 38 / 73
I metodi
public E getSinistro()
Restituisce il primo elemento della coppia, cioè quello di sinistra.
public F getDestro()
Restituisce il secondo elemento della coppia, cioè quello di destra.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 38 / 73
Implementazione
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 40 / 73
Implementazione
//COSTRUTTORI
public Coppia(E e, F f) {
sinistro = e;
destro = f;
nCoppie++;
}
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 42 / 73
Implementazione
public F getDestro() {
return destro;
}
...
//METODI STATICI
public static int numeroCoppie() {
return nCoppie;
}
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 46 / 73
Definizione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 48 / 73
Definizione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 48 / 73
Definizione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 48 / 73
Definizione di un’interfaccia
Esempio
public interface Comparable<T> {
int compareTo(T o);
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 48 / 73
Estensione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 50 / 73
Estensione di un’interfaccia
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 50 / 73
Estensione di un’interfaccia
Esempio
public interface I extends I1, I2 {
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 50 / 73
Estensione di un’interfaccia
Esempio
public interface I extends I1, I2 {
...
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 50 / 73
Ordinare un array di interi: bubblesort
Iterativamente:
confrontiamo coppie di elementi adiacenti
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 51 / 73
Ordinare un array di interi: bubblesort
Iterativamente:
confrontiamo coppie di elementi adiacenti
se non sono nell’ordine giusto scambiamo gli elementi della coppia.
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 51 / 73
Ordinare un array di interi: bubblesort
Iterativamente:
confrontiamo coppie di elementi adiacenti
se non sono nell’ordine giusto scambiamo gli elementi della coppia.
Prima iterazione
7 6 6 6 6 6
6 7 3 3 3 3
3 3 7 7 7 7
8 8 8 8 4 4
4 4 4 4 8 2
2 2 2 2 2 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 51 / 73
Bubblesort
Seconda iterazione
6 3 3 3 3 6
3 6 6 6 6 3
7 7 7 4 4 4
4 4 4 7 2 2
2 2 2 2 7 7
8 8 8 8 8 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 53 / 73
Bubblesort
Seconda iterazione
6 3 3 3 3 6
3 6 6 6 6 3
7 7 7 4 4 4
4 4 4 7 2 2
2 2 2 2 7 7
8 8 8 8 8 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 53 / 73
Bubblesort: lo schema
do {
scambiato = false;
for ( ... ) // effettua una scansione
if (gli elementi di posto i - 1 e i NON sono in ordine) {
scambiali;
scambiato = true;
}
} while (scambiato);
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 55 / 73
Bubblesort: implementazione
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 57 / 73
Ordinare un array di String: bubblesort
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 59 / 73
Ordinare un array di Comparable: bubblesort
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 61 / 73
Ricerca in un array di interi
if (trovato)
return i - 1;
else return -1;
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 63 / 73
Osservazioni
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 65 / 73
Osservazioni
Caso peggiore
Se l’elemento cercato non appartiene all’array: il tempo impiegato è
proporzionale alla lunghezza dell’array
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 65 / 73
Osservazioni
Caso peggiore
Se l’elemento cercato non appartiene all’array: il tempo impiegato è
proporzionale alla lunghezza dell’array
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 65 / 73
Ricerca dicotomica
3 7 8 9 15 21 27
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 66 / 73
Ricerca dicotomica
3 7 8 9 15 21 27
Supponiamo di cercare 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 66 / 73
Ricerca dicotomica
3 7 8 9 15 21 27
Supponiamo di cercare 8
3 7 8 9 15 21 27
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 66 / 73
Ricerca dicotomica
3 7 8 9 15 21 27
Supponiamo di cercare 8
3 7 8 9 15 21 27
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 66 / 73
Ricerca dicotomica
3 7 8 9 15 21 27
Supponiamo di cercare 8
3 7 8 9 15 21 27
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 66 / 73
Ricerca dicotomica
Iteriamo il procedimento:
3 7 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 67 / 73
Ricerca dicotomica
Iteriamo il procedimento:
3 7 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 67 / 73
Ricerca dicotomica
Iteriamo il procedimento:
3 7 8
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 67 / 73
Ricerca dicotomica
Iteriamo il procedimento:
3 7 8
Iteriamo di nuovo:
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 67 / 73
Ricerca dicotomica
Iteriamo il procedimento:
3 7 8
Iteriamo di nuovo:
abbiamo un unico elemento, con un confronto stabiliamo che
l’elemento sta nell’array
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 67 / 73
Quanti confronti?
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 68 / 73
Quanti confronti?
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 68 / 73
Quanti confronti?
Esempio
Array con 100 000 elementi
1◦ confronto ⇒ 50.000 elementi
2◦ confronto ⇒ 25.000 elementi
...
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 68 / 73
Quanti confronti?
Esempio
Array con 100 000 elementi
1◦ confronto ⇒ 50.000 elementi
2◦ confronto ⇒ 25.000 elementi
...
In questo caso il massimo numero di confronti che possiamo fare è dato dal
100000
minimo k tale che 2k
<1
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 68 / 73
Quanti confronti?
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 69 / 73
Quanti confronti?
Da cui:
N ≤ 2k
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 69 / 73
Quanti confronti?
Da cui:
N ≤ 2k
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 69 / 73
Ricerca binaria
// a array ordinato
int i = 0, j = a.length - 1, m = -1;
while(i <= j && !trovato) {
m = (i + j) / 2;
if (chiave < a[m]) // prosegui nella prima meta’
j = m - 1;
else if (chiave > a[m]) // prosegui nella seconda meta’
i = m + 1;
else
trovato = true; // TROVATO
}
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 71 / 73
Ricerca dicotomica su un array di Comparable
c 2005 Pearson Education Italia Capitolo 9 - Tipi enumerativi, tipi generici e interfacce 73 / 73