<<  Gap analysis is a tool used in wildlife conservation to identify gaps in conservation lands or other wildlands where significant plant and animal species and their habitat or important ecological features occur Gerencia de Ventas  >>
Gerarchia di classi Java
Gerarchia di classi Java
Specializzare un modello
Specializzare un modello
Ereditariet
Ereditariet
Ereditariet
Ereditariet
Ereditariet
Ereditariet
Ereditariet
Ereditariet
Definire sottoclassi
Definire sottoclassi
Definire sottoclassi
Definire sottoclassi
Gerarchie di classi
Gerarchie di classi
Gerarchie di classi
Gerarchie di classi
Ereditare dalla superclasse
Ereditare dalla superclasse
I membri accessibili
I membri accessibili
Variabili oscurate
Variabili oscurate
I modificatori di visibilit
I modificatori di visibilit
Il modificatore protected
Il modificatore protected
Il riferimento super
Il riferimento super
Il riferimento super
Il riferimento super
Sovrascivere metodi
Sovrascivere metodi
Sovrascivere metodi
Sovrascivere metodi
Regole per sovrascrivere metodi
Regole per sovrascrivere metodi
Costruttori della sottoclasse
Costruttori della sottoclasse
Chiamata al costruttore della sottoclasse
Chiamata al costruttore della sottoclasse
Ordine della chiamata al costruttore
Ordine della chiamata al costruttore
Costruzione delloggetto della sottoclasse
Costruzione delloggetto della sottoclasse
Ereditariet
Ereditariet
Sovraccaricare vs
Sovraccaricare vs
Diagramma delle classi
Diagramma delle classi
La classe Object
La classe Object
La classe Object
La classe Object
La classe Object
La classe Object
Decomposizione di metodi e ereditariet
Decomposizione di metodi e ereditariet
Classi astratte
Classi astratte
Classi astratte
Classi astratte
Classi astratte
Classi astratte
Classe astratte  sintesi
Classe astratte sintesi
Quando sono appropriate
Quando sono appropriate
Riferimenti ed ereditariet
Riferimenti ed ereditariet
Riferimenti e ereditariet
Riferimenti e ereditariet
class Strumento { public void suona() {} static void brano (Strumento
class Strumento { public void suona() {} static void brano (Strumento
Riferimenti ed ereditariet
Riferimenti ed ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Polimorfismo via ereditariet
Accesso indiretto
Accesso indiretto
Composizione di classi vs ereditariet
Composizione di classi vs ereditariet
Gerarchie di interfacce
Gerarchie di interfacce

: Gerarchia di classi Java. : Maria A. Alberti. : Gerarchia di classi Java.ppt. zip-: 134 .

Gerarchia di classi Java

Gerarchia di classi Java.ppt
1 Gerarchia di classi Java

Gerarchia di classi Java

Programmazione Corso di laurea in Informatica

2 Specializzare un modello

Specializzare un modello

Una classe modella un pezzo di realt? Una macchina, una moneta, un impiegato Spesso ? necessario specializzare la versione originale del modello Un dirigente ? un particolare impiegato Dichiarazione di classi che illustra lidea Occorre evitare la duplicazione dei dati Alcuni metodi sono utili per entrambe le classi Specializzare le classi e lereditariet?

AA 2003/04 M.A. Alberti

2

Programmazione Gerarchie di classi

3 Ereditariet

Ereditariet

Consiste nel definire una classe tramite unaltra gi? definita In Java, per stabilire una relazione di sottoclasse, si usa la parola riservata extends public class Dirigente extends Impiegato { public String divisione; }

AA 2003/04 M.A. Alberti

3

Programmazione Gerarchie di classi

4 Ereditariet

Ereditariet

Il poter definire una struttura gerarchica tra le classi costituisce una fondamentale tecnica dellapproccio object-oriented facilita il disegno del software e ne promuove il riuso Derivare nuove classi da gi? definite Creare una gerarchia tra classi Controllare lereditariet? con il modificatore protected Polimorfismo tramite ereditariet?

AA 2003/04 M.A. Alberti

4

Programmazione Gerarchie di classi

5 Ereditariet

Ereditariet

La classe esistente viene detta classe antenato o superclasse o anche classe base La nuova classe derivata viene detta classe figlio o sottoclasse. Come i nomi suggeriscono, il figlio eredita alcune caratteristiche dal genitore o antenato La sottoclasse eredita metodi e dati dalla superclasse

AA 2003/04 M.A. Alberti

5

Programmazione Gerarchie di classi

6 Ereditariet

Ereditariet

Nel diagramma di classe si mette in evidenza la relazione tra classe e sottoclasse introdotta dallereditariet? la freccia ? rivolta verso la superclasse Lereditariet? implementa una relazione is-a, cio? il figlio ? una versione pi? specifica del padre

AA 2003/04 M.A. Alberti

6

Programmazione Gerarchie di classi

7 Definire sottoclassi

Definire sottoclassi

Lereditariet? ? appropriata ogni volta che esiste una relazione ?_un o is_a tra due oggetti. Il dirigente ? un particolare impiegato Ha senso definire la classe Dirigente come una sottoclasse di Impiegato La classe Dirigente eredita dalla classe Impiegato alcune caratteristiche e funzionalit?

AA 2003/04 M.A. Alberti

7

Programmazione Gerarchie di classi

8 Definire sottoclassi

Definire sottoclassi

Un quadrato ? un particolare rettangolo, che ? un tipo di poligono La classe Quadrato estende la classe Rettangolo, sottoclasse di Poligono. Un taxi ? una particolare macchina che ? un particolare veicolo class Taxi extends Macchina { } A sua volta la classe Macchina ?_un particolare Veicolo class Macchina extends Veicolo { } Un Dizionario ? un tipo di Libro Libro.java, Dizionario.java con TestDizionario.java

AA 2003/04 M.A. Alberti

8

Programmazione Gerarchie di classi

9 Gerarchie di classi

Gerarchie di classi

Una sottoclasse pu? essere superclasse di un proprio discendente Cos? si forma una gerarchia di classi

AA 2003/04 M.A. Alberti

9

Programmazione Gerarchie di classi

10 Gerarchie di classi

Gerarchie di classi

Due discendenti della stessa superclasse si dicono fratelli Un buon disegno di relazioni tra classi mette tutte le caratteristiche comuni il pi? alto possibile in gerarchia Un membro ereditato viene passato verso il basso nella linea di discendenza La gerarchia spesso deve essere estesa e modificata per soddisfare esigenze che cambiano Non esiste la gerarchia appropriata a tutte le situazioni

AA 2003/04 M.A. Alberti

10

Programmazione Gerarchie di classi

11 Ereditare dalla superclasse

Ereditare dalla superclasse

La sottoclasse eredita dalla superclasse e da tutti gli antenati. In particolare eredita: Tutti i membri (variabili e metodi) della superclasse accessibili a quella sottoclasse, a meno che Esplicitamente nasconda le variabili o ne sovrascriva i metodi, ridefinendoli. I costruttori non sono membri di una classe e perci? non vengono ereditati dalle sottoclassi.

AA 2003/04 M.A. Alberti

11

Programmazione Gerarchie di classi

12 I membri accessibili

I membri accessibili

Una sottoclase eredita i membri accessibili della superclasse, dichiarati: public o protected nella superclasse di default, senza modificatore, purch? siano nello stesso pacchetto della superclasse Una sottoclasse non eredita i membri dichiarati private dalla superclasse con lo stesso nome nella sottoclasse Variabili oscurate Metodi sovrascritti

AA 2003/04 M.A. Alberti

12

Programmazione Gerarchie di classi

13 Variabili oscurate

Variabili oscurate

class Sopra { Number unNumero; } class Sotto extends Sopra { Float unNumero; }

La variabile unNumero nella classe Sotto oscura la visibilit? della variabile unNumero della classe Sopra

AA 2003/04 M.A. Alberti

13

Programmazione Gerarchie di classi

14 I modificatori di visibilit

I modificatori di visibilit

Servono per controllare lereditariet? Determinano quali membri della classe vengono o non vengono ereditati Si ereditano le variabili e i metodi dichiarati con visibilit? public, ma non quelli con visibilit? private Le variabili public violano la regola di incapsulare i dati Quando si vuole stabilire una relazione di ereditariet? possiamo usare un terzo modificatore di visibilit?: protected

AA 2003/04 M.A. Alberti

14

Programmazione Gerarchie di classi

15 Il modificatore protected

Il modificatore protected

Il modificatore di visibilit? protected consente ai figli di ereditare i membri di una classe base Il modificatore protected favorisce lincapsulamento pi? del modificatore public Ma il modificatore protected non contribuisce allincapsulamento in modo stretto come private I dettagli in appendice F del testo Lewis-Loftus

AA 2003/04 M.A. Alberti

15

Programmazione Gerarchie di classi

16 Il riferimento super

Il riferimento super

Il riferimento super viene usato per riferirsi alla superclasse. Per accedere a variabili, a metodi o a costruttori della superclasse Spesso occorre usare il costruttore dellantenato per inizializzare i campi di un oggetto figlio, relativi allantenato, cio? ereditati dalla superclasse

AA 2003/04 M.A. Alberti

16

Programmazione Gerarchie di classi

17 Il riferimento super

Il riferimento super

Tramite il riferimento super si possono accedere variabili oscurate dalla sottoclasse La variabile unNumero della classe Sopra ? accessibile anche dalla classe Sotto super.unNumero O ai metodi sovrascritti della superclasse

AA 2003/04 M.A. Alberti

17

Programmazione Gerarchie di classi

18 Sovrascivere metodi

Sovrascivere metodi

Una classe figlio pu? sovrascrivere la definizione di un metodo ereditato per specializzarlo Un figlio pu? dover modificare un metodo ereditato Il nuovo metodo deve avere lo stesso prototipo del metodo della superclasse, ma un diverso corpo Il tipo delloggetto a cui ? inviato il metodo determina la versione del metodo invocato

AA 2003/04 M.A. Alberti

18

Programmazione Gerarchie di classi

19 Sovrascivere metodi

Sovrascivere metodi

Il metodo della superclasse pu? essere esplicitamente invocato mediante il riferimento super Se un metodo ? dichiarato anche con il modificatore final allora non pu? essere sovrascritto La sovrascrittura pu? essere applicata a variabili si dice che le variabili sono oscurate Disinfettante.java, e la sottoclasse Detergente.java Massima.java, Consiglio.java con Messaggi.java

AA 2003/04 M.A. Alberti

19

Programmazione Gerarchie di classi

20 Regole per sovrascrivere metodi

Regole per sovrascrivere metodi

Il prototipo dei due metodi deve essere identico: stesso tipo di rientro e parametri Il metodo sovrascritto non pu? essere meno accessibile del metodo originale Un metodo sovrascritto non pu? sollevare differenti tipi di eccezioni rispetto al metodo originale

AA 2003/04 M.A. Alberti

20

Programmazione Gerarchie di classi

21 Costruttori della sottoclasse

Costruttori della sottoclasse

I costruttori non vengono ereditati, non essendo membri di classe Vengono definiti esplicitamente dal programmatore Oppure viene usato quello di default Il costruttore di default ? quello senza argomenti fornito automaticamente quando non ne avete definito uno

AA 2003/04 M.A. Alberti

21

Programmazione Gerarchie di classi

22 Chiamata al costruttore della sottoclasse

Chiamata al costruttore della sottoclasse

Quando un oggetto viene instanziato, viene generata una sequenza dazioni: Viene allocato lo spazio per il nuovo oggetto sullo heap. Tutte la variabili distanza, anche quelle ereditate vengono inizializzate ai valori di default. Si esegue la chiamata esplicita a un costruttore della stessa classe (this()) se c? Altrimenti si invoca il costruttore esplicito o implicito della superclasse e si inizializzano le variabili distanza nellordine in cui appaiono nel codice. Si esegue il resto del codice del costruttore I passi da 2. a 4. vengono ripetuti ricorsivamente per tutte le classi della gerarchia.

AA 2003/04 M.A. Alberti

22

Programmazione Gerarchie di classi

23 Ordine della chiamata al costruttore

Ordine della chiamata al costruttore

Java richiede che sia completamente inizializzato loggetto che descrive il padre prima che si possa eseguire una qualunque computazione sul figlio Chiamata implicita al costruttore della superclasse Arte.java, Disegno.java e Schizzo.java Chiamata esplicita al costruttore della superclasse tramite super Libro_2.java, Dizionario_2.java con TestDizionario_2.java

AA 2003/04 M.A. Alberti

23

Programmazione Gerarchie di classi

24 Costruzione delloggetto della sottoclasse

Costruzione delloggetto della sottoclasse

Di default ogni costruttore di sottoclasse chiama il costruttore senza argomenti del padre Se il padre non ne ha uno la sottoclasse non viene compilata Se la superclasse ha costruttori con parametri, si invoca super con parametri appropriati per controllare esplicitamente la costruzione delloggetto padre La chiamata a super deve essere la prima istruzione del costruttore

AA 2003/04 M.A. Alberti

24

Programmazione Gerarchie di classi

25 Ereditariet

Ereditariet

singola e multipla

Java fornisce solo ereditariet? singola La sottoclasse deriva da una sola superclasse Lereditariet? multipla consente la derivazione di una classe da pi? classi antenati, e di ereditare i membri di pi? classi Lereditariet? multipla introduce ambiguit?, che devono essere risolte Ad esempio: lo stesso nome di variabile in pi? classi Nella maggior parte dei casi, luso di interfacce supera i limiti dellereditariet? singola senza le complicazioni di quella multipla

AA 2003/04 M.A. Alberti

25

Programmazione Gerarchie di classi

26 Sovraccaricare vs

Sovraccaricare vs

sovrascrivere

I concetti di sovraccaricamento e di sovrascrittura sono diversi Sovraccaricare si riferisce alla possibilit? di definire pi? metodi nella stessa classe con lo stesso nome ma segnature diverse Il sovraccaricamento consente di definire operazioni simili in modi diversi con dati diversi Sovrascrivere si riferisce a due metodi, uno della superclasse e uno della sottoclasse, che devono avere lo stesso prototipo La sovrascrittura consente di definire operazioni simili in modi diversi per oggetti diversi

AA 2003/04 M.A. Alberti

26

Programmazione Gerarchie di classi

27 Diagramma delle classi

Diagramma delle classi

Object

.

.

.

.

.

.

.

.

.

.

.

.

AA 2003/04 M.A. Alberti

27

Programmazione Gerarchie di classi

28 La classe Object

La classe Object

La classe Object ? predefinita nel pacchetto java.lang della libreria standard di classi Tutte le classi discendono dalla classe Object Se una classe non ? esplicitamente dichiarata discendente da una superclasse, si assume che discenda dalla classe Object La classe Object ? la radice di tutti gli alberi di discendenza

AA 2003/04 M.A. Alberti

28

Programmazione Gerarchie di classi

29 La classe Object

La classe Object

La classe Object contiene alcuni metodi, pochi ma utili, che vengono ereditati da tutte le classi Il metodo toString ad esempio ? definito per la classe Object Il metodo toString della classe Object restituisce una stringa di caratteri contenete il nome della classe e un valore che identifica loggetto univocamente Ogni volta che definiamo esplicitamente toString, in effetti lo riscriviamo

AA 2003/04 M.A. Alberti

29

Programmazione Gerarchie di classi

30 La classe Object

La classe Object

Il metodo println richiama il metodo toString per ogni oggetto che gli viene passato come parametro perch? tutti gli oggetti hanno un metodo toString ottenuto per ereditariet? Il metodo equals della classe Object determina se due riferimenti sono alias Spesso ? necessario riscrivere equals per definire il metodo con una semantica appropriata Studente.java, StudenteDott.java con Accademia.java

AA 2003/04 M.A. Alberti

30

Programmazione Gerarchie di classi

31 Decomposizione di metodi e ereditariet

Decomposizione di metodi e ereditariet

Nella decomposizione di metodi spesso si usano metodi di servizio richiamati allinterno di un metodo, in genere dichiarati private Un problema se il metodo di servizio deve essere ereditato e sovrascritto Figure.java superclasse Triangle.java, Box.java e Diamond.java Driver.java

AA 2003/04 M.A. Alberti

31

Programmazione Gerarchie di classi

32 Classi astratte

Classi astratte

Una classe incompleta che contiene metodi astratti ? un segnaposto nella gerarchia delle classi, modella un concetto generico Il modificatore abstract nellintestazione della classe Una classe abstract diventa incompleta per definizione La classe abstract non pu? essere instanziata ma deve essere specializzata

AA 2003/04 M.A. Alberti

32

Programmazione Gerarchie di classi

33 Classi astratte

Classi astratte

Una classe deve essere dichiarata astratta se: Contiene la dichiarazione di un metodo astratto Eredita un metodo astratto dalla superclasse e non ne fornisce limplementazione Dichiara di implementare un interfaccia, ma non fornisce limplementazione di tutti i metodi

AA 2003/04 M.A. Alberti

33

Programmazione Gerarchie di classi

34 Classi astratte

Classi astratte

Il discendente di una classe astratta deve sovrascrivere i metodi astratti della superclasse da cui discende o sar? considerata anche lei astratta Un metodo astratto non pu? essere definito final, static o private Perch? dovr? essere sovrascritto (final) Perch? non ha ancora una definizione (static) Perch? non potrebbe essere ereditato (private) Una questione di scelta di disegn Aiuta a stabilire gli elementi comuni che dovranno avere le sottoclassi di una classe che rappresenta un concetto astratto

AA 2003/04 M.A. Alberti

34

Programmazione Gerarchie di classi

35 Classe astratte  sintesi

Classe astratte sintesi

Una classe astratta ? definita con il modificatore abstract Pu? contenere metodi implementati e costruttori. Se ha almeno un metodo astratto allora deve essere dichiarata astratta. Non ? possibile istanziarla. Spesso dichiara una variabile del tipo classe astratta, in cui poi si archvivia il riferimento a oggetti delle sottoclassi Le sottoclassi devono fornire implementazione per tutti i metodi astratti o anche loro saranno considerate astratte. I metodi astratti non possono essere dichiarati con i modificatori private, static o final.

AA 2003/04 M.A. Alberti

35

Programmazione Gerarchie di classi

36 Quando sono appropriate

Quando sono appropriate

Non si devono istanziare oggetti della classe. La dichiarazione abstract garantisce che non verr? mai istanziata. I dati comuni possono essere raccolti in una superclasse, anche senza metodi. Qui si usa una gerarchia di classi in cui una classe serve per scambiare dati ma non ci sono metodi comuni Iniziare una gerarchia di classi che devono essere specializzate ulteriormente Qui si usa la classe astratta per contenere metodi la cui specializzazione ? rinviata alle classi specializzate Definire il comportamento fondamentale della classe senza darne limplementazione

AA 2003/04 M.A. Alberti

36

Programmazione Gerarchie di classi

37 Riferimenti ed ereditariet

Riferimenti ed ereditariet

Tramite riferimenti si pu? accedere a un oggetto legato alla classe da una relazione di ereditariet? Se la classe Festa ha una sottoclasse Natale, allora una variabile a riferimento della classe Festa pu? anche essere usata per puntare a un oggetto Natale

Festa giorno; giorno = new Natale();

AA 2003/04 M.A. Alberti

37

Programmazione Gerarchie di classi

38 Riferimenti e ereditariet

Riferimenti e ereditariet

Nella gerarchia di classi la sottoclasse specializza la superclasse e introduce nuove funzionalit? Ma la nuova classe pu? essere vista come un tipo di quella esistente Questo consente lupcasting La nuova classe ? costituita dagli elemneti della classe base cui aggiunge i propri Lupcasting ? sempre lecito

AA 2003/04 M.A. Alberti

38

Programmazione Gerarchie di classi

39 class Strumento { public void suona() {} static void brano (Strumento

class Strumento { public void suona() {} static void brano (Strumento

s) { s.suona() } } Class Archi extends Strumento { public static void main(String[] a) { Archi violino = new Archi(); Strumento.brano(violino); } } Al metodo di classe brano viene passato un parametro di tipo Archi e non di tipo Strumento. Il riferimento a Archi, violino, viene convertito a un riferimento a Strumento, mediante un upcasting.

AA 2003/04 M.A. Alberti

39

Programmazione Gerarchie di classi

40 Riferimenti ed ereditariet

Riferimenti ed ereditariet

Possiamo assegnare a variabili a riferimento di una superclasse un oggetto di una sottoclasse, semplicemente con un assegnamento Conversione larga o upcasting Assegnare a un oggetto discendente il riferimento a un antenato pu? essere fatto, ma richiede un cast esplicito Conversione stretta o downcasting La conversione larga ? pi? utile e meno pericolosa

AA 2003/04 M.A. Alberti

40

Programmazione Gerarchie di classi

41 Polimorfismo via ereditariet

Polimorfismo via ereditariet

Un riferimento polimorfico punta a oggetti di tipo diverso in tempi diversi Le interfacce possono essere usate per creare riferimenti polimorfici Lereditariet? pu? essere usata come base del polimorfismo Una variabile a riferimento pu? puntare a un oggetto in un dato istante e puntarne a un altro (legato al primo nella struttura gerarchica delle classi) in un altro momento

AA 2003/04 M.A. Alberti

41

Programmazione Gerarchie di classi

42 Polimorfismo via ereditariet

Polimorfismo via ereditariet

Sia celebrare un metodo della classe Festa, sovrascritto dalla classe Natale Linvocazione giorno.celebrare(); produce effetti diversi: Se giorno si riferisce a un oggetto della classe Festa, viene invocata la versione celebrare() della classe Festa; se invece punta a un oggetto della sottoclasse Natale verr? invocata la versione specifica e sovrascritta della sottoclasse

AA 2003/04 M.A. Alberti

42

Programmazione Gerarchie di classi

43 Polimorfismo via ereditariet

Polimorfismo via ereditariet

? il tipo delloggetto cui si punta, che determina quale metodo viene invocato Si noti che, se linvocazione avviene in un ciclo, la stessa riga di codice potrebbe eseguire metodi diversi a ogni passo I riferimenti polimorfici vengono risolti a run-time, e non durante la compilazione

AA 2003/04 M.A. Alberti

43

Programmazione Gerarchie di classi

44 Polimorfismo via ereditariet

Polimorfismo via ereditariet

Data la seguente struttura gerarchica:

AA 2003/04 M.A. Alberti

44

Programmazione Gerarchie di classi

45 Polimorfismo via ereditariet

Polimorfismo via ereditariet

Si risolve il compito di calcolare la retribuzione Istituzione.java driver con il main Staff.java inizializza la lista del personale Personale.java la classe astratta Dipendente.java modella un dipendente generico Volontario.java modella un volontario Impiegato.java modella un impiegato che pu? prendere gratifiche, specializzando un dipendente Giornaliero.java modella un lavoratore a giornata, specializzando un dipendente generico

AA 2003/04 M.A. Alberti

45

Programmazione Gerarchie di classi

46 Accesso indiretto

Accesso indiretto

Tutti i membri della superclasse sono accessibili alla sottoclasse, anche se non sono ereditati I membri di classe ereditati sono accessibili direttamente I membri non ereditati sono accessibili indirettamente tramite i metodi ereditati della superclasse Calorie.java driver, istanzia una Pizza Cibo.java istanzia un oggetto con dati grammi di grasso e calcola le calorie dovute al grasso Pizza.java

AA 2003/04 M.A. Alberti

46

Programmazione Gerarchie di classi

47 Composizione di classi vs ereditariet

Composizione di classi vs ereditariet

Tavola.java

is-a

has-a

cucch

forch

colt

piatti

Object

Piatto

Posto_a_tavola

Posata

Piatto_cena

Tavola

Cucchiaio

Forchetta

Coltello

AA 2003/04 M.A. Alberti

47

Programmazione Gerarchie di classi

48 Gerarchie di interfacce

Gerarchie di interfacce

Il meccanismo dellereditariet? pu? essere applicato alle interfacce Uninterfaccia pu? diventare lantenata di unaltra Linterfaccia figlio eredita tutti i metodi astratti dal genitore Una classe che implementa uninterfaccia derivata deve definire tutti i metodi dellintarfaccia genitore oltre a quelli del figlio Le gerarchie di classi e quelle di interfacce sono distinte

AA 2003/04 M.A. Alberti

48

Programmazione Gerarchie di classi

Gerarchia di classi Java
http://900igr.net/prezentacija/anglijskij-jazyk/gerarchia-di-classi-java-121575.html
c

661

29
900igr.net > > > Gerarchia di classi Java