Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il...

22
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una classe Come si comportano i suoi oggetti Specializzare senza rompere il contratto

Transcript of Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il...

Page 1: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

1

Estensione di classi: il Contratto

INTERFACCIA E REALIZZAZIONE

• Che cosa realizza una classe

• Come si comportano i suoi oggetti

• Specializzare senza rompere il contratto

Page 2: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

2

Ridefinizone dei metodi: Overriding

RIMPIAZZARE L’IMPLEMENTAZIONE DEI METODI DELLA SUPERCLASSE

Non rompere il contratto significa:

• Mantenere la stessa signature

• Stesso tipo di ritorno

• Non lanciare eccezioni non coperte dalla clausola throws del supermetodo

• Dare almeno lo stesso accesso del supermetodo

Page 3: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

3

Nascondere campi: Hiding

RIMPIAZZARE I CAMPI DELLA SUPERCLASSE

• Dichiarare un campo in una classe con lo stesso nome di un campo della superclasse

• Il campo della superclasse diventa non più accessibile (nascosto) se non attraverso un riferimento del tipo della superclasse

• Quando si accede a un campo di un oggetto, il tipo specificato nella dichiarazione del riferimento all’oggetto governa quale campo è effettivamente considerato

Page 4: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

4

class Articolo {public String str = “Super”;

public void show () {System.out.println (“Articolo: “ + str);

}}

class Alimento extends Articolo {public String str = “Extend”;

public void show () {System.out.println (“Alimento: “ + str);

}

public static void main (String[] args) {Alimento ext = new Alimento();Articolo sup = ext;sup.show();ext.show();System.out.println (“super.str = “ + sup.str);System.out.println (“ext.str = “ + ext.str);

}}

Risultato dell’esecuzione della classe Alimento

Alimento: ExtendAlimento: Extendsuper.str = Superext.str = Extend

scelta del metodo guidata dal tipo dell’istanza (binding dinamico)

selezione di campo guidata dal tipo del riferimento (early binding)

Page 5: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

5

Metodi e classi dichiarati final

final class NonEstensibile {// campi// matodi

}

Non è possibile ereditare da NonEstensibile

final int somma (int m, int n) {return (m + n);

}Non è possibile ridefinire

il metodo somma( )

• Sicurezza: non è possibile violare il contratto

• Implementazione definitiva

• Restrizione: minore flessibilità d’uso della classe

• Effetto sul binding

Page 6: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

6

Metodi e classi dichiarati abstract

abstract class Benchmark {abstract void benchmark ();

public void repeat (int count) {long start = System.currentTimeMillis( );for (int i = 0; i < count; i++)

this.benchmark( );return ( System.currentTimeMillis( ) - start);

}}

Non è possibile creare istanze di una classe astratta

• Una classe astratta definisce l’implementazione dei metodi solo in parte, lasciando alle sottoclassi il compito di implementare alcuni metodi

• Ogni metodo non implementato viene dichiarato abstract

Page 7: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

7

Valori iniziali e costruttori

class Veicolo {public int matricola;public String proprietario = “nessuno”;public float velocita = 0.0;public float direzione = 0.0;public static int prossima_matricola = 0;

Veicolo () { /* costruttore “no-arg” */matricola = prossima_matricola ++;

}

/* costruttore con argomenti per passare valori iniziali */Veicolo (String nome, float vel_iniz, float direz_iniz) {

this ();proprietario = nome;velocita = vel_iniz;direzione = direz_iniz;

}}

Page 8: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

8

Valori iniziali e costruttori (continua)

Veicolo auto1 = new Veicolo();Veicolo auto2 = new Veicolo(“Rossi”, 0.0, 35.0);auto1.proprietario = “Bianchi”;auto1.velocita = 45.9;auto1.direzione = 90;

auto1 auto2

0

Bianchi

45.9

90.0

1

Rossi

0.0

35.0

Page 9: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

9

Criteri per la realizzazione di costruttori

• La classe non ha uno stato iniziale ragionevole senza parametri

• Passare uno stato iniziale è conveniente

• La costruzione di un oggetto può costituire una operazione costosa, per cui è preferibile creare l’istanza direttamente nello stato iniziale opportuno

• Si può controllare l’uso della classe variando la dichiarazione di accessibilità dei costruttori

Page 10: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

10

Accesso diretto ai dati contro incapsulamento class Veicolo {

private int matricola;private String proprietario = “nessuno”;private float velocita = 0.0;private float direzione = 0.0;public static int prossima_matricola = 0;

public void accelera (float incremento) {velocita += incremento;

}

public void sterza (float delta) {direzione += delta;

}

public void parti (float velocita, float direzione) {this.velocita = velocita;this.direzione = direzione;

}}

Page 11: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

11

Vantaggi dell’incapsulamento

• L’uso è più semplice: non devo conoscere la struttura dei dati

• E’ possibile nascondere i dati rendendoli read-only

private int matricola;public int matricola () {

return matricola;}

• La rappresentazione interna dei dati può essere modificata senza alterare il contratto della classe

Page 12: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

12

Le eccezioniChe fare quando si presenta una situazione non prevista nell’esecuzione di un programma?

1) Segnalare la condizione di errore attraverso la restituzione di valori atipici

2) Ignorare il problema, “tanto si assume che gli errori non si presentino”

3) Aggiungere la gestione degli errori attraverso verifica di determinate condizioni e istruzioni per il recovery dall’errore verificatosi

In JAVA la gestione degli errori può essere fatta usando il meccanismo delleeccezioni, che sono oggetti che possono essere creati e lanciati (throw) in determinate condizioni, e che possono essere catturati (catch) dal codicescritto appositamente per la loro gestione

Page 13: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

13

Le eccezioni controllate (checked exceptions)

Le eccezioni sono oggetti in JAVAClassi predefinite di eccezioni: Throwable e sua sottoclasse Exception

E’ possibile definire proprie classi di eccezioni

Un metodo che può lanciare eccezioni deve dichiarare nella nella sua intestazioneil tipo di eccezioni eventualmente lanciate, cosicché chi chiama quel metodo puòprepararsi a gestire quelle eccezioni

Page 14: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

14

Usare le eccezioni: il paradigma try-catch-finally

• try prova ad eseguire qualcosa: se genera eccezione allora

• catch prendi l’oggetto eccezione prodotto e cerca di gestire l’errore

• finally esegui operazioni di ripristino prima di terminare

Page 15: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

15

Le eccezioni controllate (checked exceptions)

class ElementoNonPresente extends Exception {String elemento;

ElementoNonPresente (String nome) {elemento = nome;

}}

class Tabella {final int MAX = 50;String[] table = new String[MAX];

public int cerca (String nome) throws ElementoNonPresente

{for (int i = 0; i < MAX; i++)

if (table[i].equals(nome)) return i;throw new ElementoNonPresente(nome);

}}

Page 16: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

16

Le eccezioni controllate (checked exceptions)

class ElencoStudenti {Tabella elenco = new Tabella();

public int matricola (String nome) throws ElementoNonPresente

{int mat;try { mat = elenco.cerca(nome); return mat;} catch (ElementoNonPresente eccezione) { System.out.println(“Lo studente” + nome + “non

esiste”); throw eccezione;

}}

}

Page 17: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

17

Le eccezioni non controllate (unchecked exceptions)

Oltre alle eccezioni dichiarate, un metodo può lanciare anche lanciare eccezioni di tipo RuntimeException e Error, o sottoclassi di queste, che sono eccezioni non dichiarate e non controllate.

Page 18: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

18

Programmazione concorrente in JAVA: i threads

• I threads (trame): oggetti eseguibili

• Possibilità di lanciare l’esecuzione di due o più tasks concorrentemente

ESEMPIO: una applet, mentre trasferisce files da remoto, continua a rispondere ai comandi GUI (cliccare bottoni,scegliere comandi da menù, etc.)

• Una trama è un programma che gira all’interno di un programma, con il suo stack di esecuzione e il suo processore virtuale

• Ogni thread ha un proprio processore (virtuale) e un proprio stack di esecuzione, ma tutti i thread condividono lo stesso heap di memoria, per cui i dati sono comuni

Page 19: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

19

La classe Thread

Thread operatore = new Thread ( );

• Il costruttore Thread( ) crea una nuova istanza della classe Thread. Per mandare effettivamente in esecuzione la trama, si deve inviare ad operatore il messagggio operatore.start( );

• Quando un oggetto di tipo Thread è attivato da start( ), questi chiama a sua volta il metodo run( ) della classe cui l’oggetto appartiene

• Il metodo run( ) non viene mai eseguito manualmente

• Alla fine dell’esecuzione di run( ) la trama termina e finisce di esistere

• L’implementazione standard di run( ) non fa nulla

Page 20: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

20

Creare trame

• Per poter creare ed eseguire una trama, di solito si estende la classe Thread per poter ridefinire il metodo run( )

• La classe Thread contiene inoltre i metodi standard:

- stop ( ) blocca l’esecuzione di una trama

- suspend ( ) sospende l’esecuzione di una trama

- resume ( ) riprende l’esecuzione di una trama

- sleep (int tempo) interrompe l’esecuzione di una tramaper un certo numero di millisecondi

Page 21: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

21

class PingPong extends Thread {String word;int delay;

PingPong (String che_dire, int intervallo) {word = che_dire;delay = intervallo;

}

public void run ( ) {try {

for ( ; ; ) {System.out.print (word + “ “);sleep (delay);

}} catch (InterruptedException e) {

return;}

}

public static void main (String[ ] args) {new PingPong (“ping”, 33).start( );new PingPong (“PONG”, 100).start( );

}}

Page 22: Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.

Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6

22

Concorrenza e consistenza dei dati

POTER ACCEDERE AGLI STESSI DATI È MOLTO UTILE,

MA PUÓ COMPORTARE SERI PROBLEMI DI CONSISTENZA

a1 = A.getSaldo( )

a1 = a1 + deposito

A.setSaldo(a1)

a2 = A.getSaldo( )

a2 = a2 + deposito

A.setSaldo(a2)