Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGuido Mascia Modificato 11 anni fa
1
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
2
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 2 Ridefinizone dei metodi: Overriding RIMPIAZZARE LIMPLEMENTAZIONE 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
3
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 alloggetto governa quale campo è effettivamente considerato
4
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 dellesecuzione della classe Alimento Alimento: Extend super.str = Super ext.str = Extend scelta del metodo guidata dal tipo dellistanza (binding dinamico) selezione di campo guidata dal tipo del riferimento (early binding)
5
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à duso della classe Effetto sul binding
6
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 limplementazione dei metodi solo in parte, lasciando alle sottoclassi il compito di implementare alcuni metodi Ogni metodo non implementato viene dichiarato abstract
7
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; }
8
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
9
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 listanza direttamente nello stato iniziale opportuno Si può controllare luso della classe variando la dichiarazione di accessibilità dei costruttori
10
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; }
11
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 11 Vantaggi dellincapsulamento Luso è 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
12
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 12 Le eccezioni Che fare quando si presenta una situazione non prevista nellesecuzione 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 dallerrore verificatosi In JAVA la gestione degli errori può essere fatta usando il meccanismo delle eccezioni, che sono oggetti che possono essere creati e lanciati (throw) in determinate condizioni, e che possono essere catturati (catch) dal codice scritto appositamente per la loro gestione
13
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 13 Le eccezioni controllate (checked exceptions) Le eccezioni sono oggetti in JAVA Classi 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 intestazione il tipo di eccezioni eventualmente lanciate, cosicché chi chiama quel metodo può prepararsi a gestire quelle eccezioni
14
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 loggetto eccezione prodotto e cerca di gestire lerrore finally esegui operazioni di ripristino prima di terminare
15
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); }
16
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; }
17
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.
18
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 lesecuzione 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 allinterno 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
19
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 loggetto appartiene Il metodo run( ) non viene mai eseguito manualmente Alla fine dellesecuzione di run( ) la trama termina e finisce di esistere Limplementazione standard di run( ) non fa nulla
20
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 lesecuzione di una trama - suspend ( ) sospende lesecuzione di una trama - resume ( ) riprende lesecuzione di una trama - sleep (int tempo) interrompe lesecuzione di una trama per un certo numero di millisecondi
21
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( ); }
22
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)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.