4 programmazione object-oriented interfacce ereditarietà ... · programmazione oo 2011-2012 g....
TRANSCRIPT
![Page 1: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/1.jpg)
Programmazione OO 2011-2012 G. Bucci 1
4
Programmazione Object-OrientedInterfacce
Ereditarietà vs ComposizioneAlcuni Design Patterns
UNIVERSITA’ DI FIRENZEFacoltà di Ingegneria
Giacomo Bucci
![Page 2: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/2.jpg)
Programmazione OO 2011-2012 G. Bucci 2
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 3: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/3.jpg)
Programmazione OO 2011-2012 G. Bucci 3
Programmare verso l’implementazione
Cane c = new Cane();c.abbaia();
Animale
Cane GattoClient
Cane è una implementazione concreta di Animale
![Page 4: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/4.jpg)
Programmazione OO 2011-2012 G. Bucci 4
Programmare verso l’interfaccia
Animale a = new Cane();a.faIlVerso();
Il client sa che a è un Cane, ma lo usa in modo polimorfico
![Page 5: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/5.jpg)
Programmazione OO 2011-2012 G. Bucci 5
Meglio ancora• Assegnare l’oggetto concreto (l’implementazione) a
run-time
Intermediario inter = new Intermediario();Animale a = inter.getAnimale();a.faIlVerso();
Animale
+faIlVerso()
Cane
+faIlVerso()
Gatto
+faIlVerso()
Client
Intermediario
+getAnimale()
Il client non sa che tipo di animale è a, sa solo che a sa fare il suo verso
![Page 6: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/6.jpg)
Programmazione OO 2011-2012 G. Bucci 6
Meglio ancora• Assegnare l’oggetto concreto (l’implementazione) a
run-time
Intermediario inter = new Intermediario();Animale a = inter.getAnimale();a.faIlVerso();
Animale
+faIlVerso()
Cane
+faIlVerso()
Gatto
+faIlVerso()
Client
Intermediario
+getAnimale()
L’intermediaro deve sapere quale oggetto istanziare (eventualmente attraverso un parametro)
Il client non sa che tipo di animale è a, sa solo che a sa fare il suo verso
![Page 7: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/7.jpg)
Programmazione OO 2011-2012 G. Bucci 7
……segue
Intermediario inter = new Intermediario();Animale a = inter.getAnimale();a.faIlVerso();
Animale
+faIlVerso()
Cane
+faIlVerso()
Gatto
+faIlVerso()
Client
Intermediario
+getAnimale()
E’ una Fabbrica
![Page 8: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/8.jpg)
Programmazione OO 2011-2012 G. Bucci 8
Simile al Design Pattern
Factory Method
Intermediario inter = new Intermediario();Animale a = inter.getAnimale();a.faIlVerso();
……segue
Animale
+faIlVerso()
Cane
+faIlVerso()
Gatto
+faIlVerso()
Client
Intermediario
+getAnimale()
![Page 9: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/9.jpg)
Programmazione OO 2011-2012 G. Bucci 9
Il vero Factory Method (GoF)
Animale Client
![Page 10: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/10.jpg)
Programmazione OO 2011-2012 G. Bucci 10
Factory method• Intent
Define an interface for creating an object, but letsubclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
• Also Known AsVirtual Constructor
In generale si parla di fabbrichequando si vuole confinare da qualche parte i dettagli della creazione di oggetti
![Page 11: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/11.jpg)
Programmazione OO 2011-2012 G. Bucci 11
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 12: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/12.jpg)
Programmazione OO 2011-2012 G. Bucci 12
Ereditarietà o composizione?
• L’ereditarietà è statica (definita al tempo di compilazione)
• L’ereditarietà è facile da usare è parte del linguaggio; evita la riscrittura di parti comuni
• L’ereditarietà viola il principio dell’incapsulameto le classi figlie vedono quello che c’è nella classe padre (una modifica nella classe padre può avere conseguenze sulle classi figlio)
![Page 13: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/13.jpg)
Programmazione OO 2011-2012 G. Bucci 13
Ereditarietà o composizione?
• La composizione è dinamica (attraverso i riferimenti acquisiti al tempo di esecuzione)
• La composizione permette la sostituzione di un oggetto con un altro al tempo di esecuzione
• La composizione presuppone che gli oggetti rispettino le interfacce il principio di incapsulamento non viene mai violato
• Programmare verso l’interfaccia
![Page 14: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/14.jpg)
Programmazione OO 2011-2012 G. Bucci 14
Ereditarietà o composizione?
• Favorire la composizione di oggetti rispetto all’ereditarietà
• La composizione aiuta a tenere ogni classe ben focalizzata e coesa
• Evita la costruzione di gerarchie classi mostruose e ingestibili, ma porta a un aumento del numero degli oggetti
![Page 15: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/15.jpg)
Programmazione OO 2011-2012 G. Bucci 15
Problema• Modellare uno studio professionale
• Differenti tipi di professionisti che svolgono• attività comuni in modo del tutto identico (mangiare)• attività comuni ma in modo differenziato caratteristico di
ciascun professionista (display)
![Page 16: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/16.jpg)
Programmazione OO 2011-2012 G. Bucci 16
Due professionisti
![Page 17: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/17.jpg)
Programmazione OO 2011-2012 G. Bucci 17
Facciamoli lavorare
• Supponiamo che debbano progettare e modellare. Ma come?• Ingegneri e Architetti progettano e modellano allo
stesso modo• Due metodi concreti in Professionista
• Ingegneri e Architetti progettano e modellano in modi diversi
• Due metodi astratti in Professionista e reimplementati
![Page 18: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/18.jpg)
Programmazione OO 2011-2012 G. Bucci 18
Progettano e modellano
Progettano in modo identico
Modellano in modo diverso
![Page 19: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/19.jpg)
Programmazione OO 2011-2012 G. Bucci 19
Estendiamo un po’
• Progettazione • Meccanica• Civile
• Modellazione• Urbanistica• Strutturale
L’ingegnere può fare progettazione meccanica o progettazione civile.
Che facciamo? Deriviamo da Ingegnere due diversi tipi di ingegneri e ridefiniamo la progettazione?
![Page 20: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/20.jpg)
Programmazione OO 2011-2012 G. Bucci 20
L’essenza del problema
• Polimorfismo = interfaccia unica ma comportamenti specifici diversi
• Ereditarietà: modo diretto per ottenere il polimorfismo …. ma con qualche inconveniente!
![Page 21: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/21.jpg)
Programmazione OO 2011-2012 G. Bucci 21
..essenza del problemaPossono venir fuori gerarchie mostruose
L’eredità è rigida: il comportamento è fissato al tempo di compilazione. E’ quello e basta!
E se volessimo che operazione() fosse fatta in modi diversi, in tempi diversi (scegliere il comportamento a run-time)?
![Page 22: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/22.jpg)
Programmazione OO 2011-2012 G. Bucci 22
..essenza del problema
Se provassimo a separare le parti soggette a variare in modo che gli effetti delle variazioni non si propaghino anche alle parti che possono restare fisse ???
![Page 23: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/23.jpg)
Programmazione OO 2011-2012 G. Bucci 23
Favorire la composizione!
•Super (cioè A) delega l’Operatore all’esecuzione dell’operazione
• L’operazione viene fatta secondo operatore concreto istanziato
• Al tempo di esecuzione di può sostituire un operatore con un altro
Separare e Delegare Come A2Come A1
![Page 24: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/24.jpg)
Programmazione OO 2011-2012 G. Bucci 24
Favorire la composizione!
1. Istanziazione di Operatore1 o Operatore2 a seconda di come deve essere fatta l’operazione
2. Istanziazione di A
3. Passaggio dell’Operatore a A; uso di A
4. Eventuale passaggio di un nuovo Operatore ad A; uso di A
![Page 25: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/25.jpg)
Programmazione OO 2011-2012 G. Bucci 25
Le due astrattepublic abstract class Super {
protected Operatore operatore;
public void setOperatore(Operatore operatore){this.operatore= operatore;
}public void operazione(){
operatore.operazione();}
}
public abstract class Operatore {public abstract void operazione();
}
![Page 26: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/26.jpg)
Programmazione OO 2011-2012 G. Bucci 26
Le concretepublic class A extends Super { }
public class Operatore1 extends Operatore {public void operazione() {
System.out.println(“Operatore 1");}
}
public class Operatore2 extends Operatore {public void operazione() {
System.out.println("Operatore 2");}
}
![Page 27: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/27.jpg)
Programmazione OO 2011-2012 G. Bucci 27
Il clientOperatore op = new Operatore2();Super sup = new A();sup.setOperatore(op);sup.operazione();
:::::::::
sup.setOperatore(new Operatore1());sup.operazione();
![Page 28: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/28.jpg)
Programmazione OO 2011-2012 G. Bucci 28
Esercizio
Rifarla usando per quanto possibile il concetto di interfaccia e fare il confronto con la soluzione fin qui illustrata (classi astratte)
![Page 29: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/29.jpg)
Programmazione OO 2011-2012 G. Bucci 29
Come diventa il ns studioE’ il pattern Strategy
![Page 30: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/30.jpg)
Programmazione OO 2011-2012 G. Bucci 30
Pattern Strategy (GoF)
![Page 31: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/31.jpg)
Programmazione OO 2011-2012 G. Bucci 31
Strategy (GoF)
• IntentDefine a family of algorithms, encapsulateeach one, and make them interchangeable. Strategy lets the algorithm varyindependently from clients that use it.
• Also Known AsPolicy
![Page 32: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/32.jpg)
Programmazione OO 2011-2012 G. Bucci 32
Lo studio si espande…• Entra in studio un economista
• Fa modelli economici, ma non progettaLa relativa funzionalità progetta() deve essere vuota
• Aggiunge un professionalità in più: amministrareSe vogliamo mantenere la struttura uniforme occorre aggiungere amministrare() all’interfaccia del professionista e renderla vuota per quelli che non la usano
![Page 33: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/33.jpg)
Programmazione OO 2011-2012 G. Bucci 33
..si espande
![Page 34: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/34.jpg)
Programmazione OO 2011-2012 G. Bucci 34
Lezione imparata
• Delegare• Incapsulare a parte ciò che è soggetto a
variare• Favorire la composizione rispetto
all’ereditarietà• E, come sempre …, programmare verso
l’interfaccia non verso l’implementazione
![Page 35: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/35.jpg)
Programmazione OO 2011-2012 G. Bucci 35
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 36: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/36.jpg)
Programmazione OO 2011-2012 G. Bucci 36
E ora una panineria !
Non ci basta. Si vuole poter aggiungere a qualunque dei tipi di base altri ingredienti (lattuga, pomodoro, mozzarella, capperi,…)
![Page 37: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/37.jpg)
Programmazione OO 2011-2012 G. Bucci 37
Un modo
![Page 38: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/38.jpg)
Programmazione OO 2011-2012 G. Bucci 38
Un altro modo (?!)
Terrificante !!!
![Page 39: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/39.jpg)
Programmazione OO 2011-2012 G. Bucci 39
Un po’ meglio
Sandwich panino = new SandwichCrudo();panino.addIngrediente(pomodoro); // aggiunge a ingredientipanino.addIngrediente(xx);....double prezzo = panino.getCost();for (ingrediente i : ingredienti) prezzo = prezzo +i.getCost();
![Page 40: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/40.jpg)
Programmazione OO 2011-2012 G. Bucci 40
Un po’ meglio
nel clientSandwich panino = new SandwichCrudo();panino.addIngrediente(pomodoro);panino.addIngrediente(xx);....double prezzo = panino.getCost();for (ingrediente i : ingredienti) prezzo = prezzo +i.getCost();
Brutto: ingredienti èmeglio sia privato !!
![Page 41: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/41.jpg)
Programmazione OO 2011-2012 G. Bucci 41
Sul codice precedente• Rendere ingredienti private entro sandwich
(evitare le variabili globali!!) e prevedere un metodo per ottenere gli ingredienti aggiunti a un panino.
Nel client Sandwich panino = new SandwichCrudo();panino.addIngrediente(pomodoro);panino.addIngrediente(xx);
....ArrayList<Ingrediente> ingredienti = panino.getIngredienti();double prezzo = panino.getCost();for (Ingrediente i : ingredienti) prezzo = prezzo +i.getCost();
![Page 42: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/42.jpg)
Programmazione OO 2011-2012 G. Bucci 42
E se provassimo questa?
![Page 43: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/43.jpg)
Programmazione OO 2011-2012 G. Bucci 43
Esempio
![Page 44: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/44.jpg)
Programmazione OO 2011-2012 G. Bucci 44
Il codicepublic abstract class Sandwich {
protected double cost;public abstract double getCost();
}
public class SandwichCrudo extends Sandwich {public SandwichCrudo(){cost = 25;}public double getCost(){return cost;}
}
![Page 45: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/45.jpg)
Programmazione OO 2011-2012 G. Bucci 45
..il codicepublic abstract class IngrDecoratore extends Sandwich {
protected Sandwich component;}
public class Lattuga extends IngrDecoratore {public Lattuga (Sandwich component){this.cost = 2;this.component = component;}public double getCost(){
return component.getCost()+cost;}
}
![Page 46: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/46.jpg)
Programmazione OO 2011-2012 G. Bucci 46
Il clientSandwich panino = new SandwichCrudo();
//panino di basepanino = new Pomodoro(panino);
// panino + pomodoropanino = new Lattuga(panino);
// panino + pomodoro + lattugapanino = new Capperi(panino); // panino + pomodoro + lattuga + //capperi
double prezzo = panino.getCost();
![Page 47: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/47.jpg)
Programmazione OO 2011-2012 G. Bucci 47
Decorator
![Page 48: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/48.jpg)
Programmazione OO 2011-2012 G. Bucci 48
Pattern Decorator
Intent• Attach additional responsibilities to an object
dynamically. Decorators provide a flexiblealternative to subclassing for extendingfunctionality.
Also Known As• Wrapper
![Page 49: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/49.jpg)
Programmazione OO 2011-2012 G. Bucci 49
Confronto
Funzionalità estese dalle strategie
Funzionalità estese dai decoratori
![Page 50: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/50.jpg)
Programmazione OO 2011-2012 G. Bucci 50
Confronto
Il componente sa delle possibili estensioni: spetta a lui tenere il riferimento alla strategia
Un decoratore aggiunge roba dall’esterno: il componente non sa nulla del decoratore
![Page 51: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/51.jpg)
Programmazione OO 2011-2012 G. Bucci 51
Confronto
Il componente sa che delle possibili estensioni: spetta a lui tenere il riferimento alla strategia
Un decoratore aggiunge roba dall’esterno: il componente non sa nulla del decoratore
E’ bene che la classe Component sia leggera!
![Page 52: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/52.jpg)
Programmazione OO 2011-2012 G. Bucci 52
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 53: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/53.jpg)
Programmazione OO 2011-2012 G. Bucci 53
Un disegno• Un oggetto :Picture che contiene linee, testi,
figure e altri oggetti :Picture
![Page 54: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/54.jpg)
Programmazione OO 2011-2012 G. Bucci 54
Lo schema precedente
• E’ una relazione tra parti e composizioni di parti
• E’ organizzato come una gerarchia
• Ci si pone il problema di fare in modo che le singole parti o le composizioni possano essere trattate in modo uniforme
![Page 55: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/55.jpg)
Programmazione OO 2011-2012 G. Bucci 55
Il pattern Composite
![Page 56: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/56.jpg)
Programmazione OO 2011-2012 G. Bucci 56
Tipico nella grafica-graphics
![Page 57: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/57.jpg)
Programmazione OO 2011-2012 G. Bucci 57
Pattern Composite
Intent• Compose objects into tree structures to
represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
![Page 58: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/58.jpg)
Programmazione OO 2011-2012 G. Bucci 58
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 59: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/59.jpg)
Programmazione OO 2011-2012 G. Bucci 59
Iteratori
• Capita di aver a che fare con strutture dati complesse (liste, code, ecc. )
• E’ buona norma accedere a queste strutture senza esporre la loro organizzazione interna
• A volte è necessario percorrere la struttura in modi diversi, senza per questo caricare l'interfaccia della struttura con un numero eccessivo di metodi
• Un iteratore è un oggetto usato per percorrere la struttura in modo sequenziale• Corrisponde al concetto di cursore
![Page 60: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/60.jpg)
Programmazione OO 2011-2012 G. Bucci 60
Iteratore
Aggregato
+addElement()+removeElement()
Iteratore
-indice
+first()+hasNext()+getNext()
Client
Disaccoppia la struttura dal suo
accesso
Istanziato passandogli l’oggetto
su cui deve agire
![Page 61: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/61.jpg)
Programmazione OO 2011-2012 G. Bucci 61
Il “design pattern” Iterator
![Page 62: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/62.jpg)
Programmazione OO 2011-2012 G. Bucci 62
Iterator
• IntentProvide a way to access the elements of anaggregate object sequentially withoutexposing its underlying representation.
• Also Known AsCursor
![Page 63: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/63.jpg)
Programmazione OO 2011-2012 G. Bucci 63
aggregatoabstract class Aggregato {public abstract Iteratore createIterator();}
class AggregatoConcreto extends Aggregato {public Iteratore createIterator() {
Iteratore i = new IteratoreConcreto(this);return i;}
}NB: gli aggregati sono aggregati
della classe Elemento
Passa se stesso, cioè l’aggregato
![Page 64: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/64.jpg)
Programmazione OO 2011-2012 G. Bucci 64
Iteratore (casareccio)abstract class Iteratore {
public abstract Elemento first();public abstract boolean hasNext();public abstract Elemento getNext();
}
class IteratoreConcreto extends Iteratore {private Aggregato a;public IteratoreConcreto(Aggregato a){
this.a= a;}public Elemento first() { .. }public Elemento getNext() { .. }public boolean hasNext() { .. }
}
![Page 65: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/65.jpg)
Programmazione OO 2011-2012 G. Bucci 65
...nel client
Aggregato a = new AggregatoConcreto();Iteratore i = a.createIterator();
Elemento e = i.first(); //il primo
e = i.getNext(); //il successivo
\\ecc
![Page 66: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/66.jpg)
Programmazione OO 2011-2012 G. Bucci 66
Più iteratori sullo stesso aggregato
![Page 67: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/67.jpg)
Programmazione OO 2011-2012 G. Bucci 67
…più iteratori sullo stesso…
Aggregato a = new AggregatoConcreto();Iteratore i1 = a.createIterator(1); Iteratore i2 = a.createIterator(2); :::: i1.first();i1.getNext();:::::i2.first();i2.getNext();::::
![Page 68: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/68.jpg)
Programmazione OO 2011-2012 G. Bucci 68
Iteratore java• E’ un’Interfaccia:• Comune a tutte le Collection, cioè a tutte le classi che
implementano l’interfaccia Collection• A sua volta Collection estende l’interfaccia Iterable
Il metodo next()throws
![Page 69: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/69.jpg)
Programmazione OO 2011-2012 G. Bucci 69
Interface Collection
• Esempi di classi che la implementano• AbstractCollection, AbstractList, …., ArrayList, …., Stack,
…Vector• Tutte presentano il metodo iterator() che restituisce
l’iteratore sugli elementi della collection
(sarà meglio vedere la documentazione Java)
![Page 70: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/70.jpg)
Programmazione OO 2011-2012 G. Bucci 70
Esempio di usopublic abstract class Elemento {…}
Elemento è una qualunque classeQui è astratta perché presumibilmente si intende specializzarla in sottoclassi di elementi differenziati
![Page 71: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/71.jpg)
Programmazione OO 2011-2012 G. Bucci 71
Esempio di usopublic abstract class Elemento {…}
public abstract class Aggregato{protected AbstractCollection<Elemento> elementi;….}
Anche Aggregato è stata fatta astratta => andrà specializzata
elementi è una Collezione astratta che verrà precisata nella classe derivata da Aggregato, ad esempio come ArrayList, Stack, Vector….
![Page 72: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/72.jpg)
Programmazione OO 2011-2012 G. Bucci 72
Esempio di usopublic abstract class Elemento {…}
public abstract class Aggregato{protected AbstractCollection<Elemento> elementi;….}
Nel client: Iterator<Elemento> it = elementi.iterator();while (it.hasNext()){
it.next().metodoDiElemento();
it è l’iteratore sull’AbstractCollection elementi
•it.next è l’Elemento correnteIl ciclo itera il metodo di Elemento su tutti gli individui in elementi
![Page 73: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/73.jpg)
Programmazione OO 2011-2012 G. Bucci 73
...Attenzione!
• Il nostro iteratore ha first()• Presumibilmente first() riporta il primo elemento e si
posiziona sul secondo (se esiste)• Presuppone che (almeno) un elemento ci sia obbligatoriamente• Oppure restituisce null, se non c’è nessun elemento
• L’iteratore di Java si porta sul primo elemento quando viene creato
• Non presuppone che ci sia almeno un elemento nell’aggregato
![Page 74: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/74.jpg)
Programmazione OO 2011-2012 G. Bucci 74
Contenuto
• Programmare verso l’interfaccia• Ereditarietà e/o composizione
• Il pattern Strategy• Il pattern Decorator
• Altri Design Patterns• Il pattern Composite• Il pattern Iterator
• Esercitiamoci
![Page 75: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/75.jpg)
Programmazione OO 2011-2012 G. Bucci 75
Esercitiamoci• Costruire più versioni di questo sistema
![Page 76: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/76.jpg)
Programmazione OO 2011-2012 G. Bucci 76
Un package per i solidi
package solidi;
public abstract class Solido { public abstract double getVolume();public abstract double getSurface();}
Solido
+getVolume(): double+getSurface(): double
Cubo
-Lunghezza: double
+getVolume(): double+getSurface(): double
Cilindro
-raggio: double-altezza: double
+getVolume(): double+getSurface(): double
![Page 77: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/77.jpg)
Programmazione OO 2011-2012 G. Bucci 77
..del tutto equivalente
package solidi;
public interface Solido { public double getVolume();public double getSurface();}
![Page 78: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/78.jpg)
Programmazione OO 2011-2012 G. Bucci 78
Prima di andare avanti• Si costruisca un aggregato (Struttura) di solidi e la si
riempia a caso di cubi e cilindri• Si costriscano questi iteratori (casarecci)
• Uno che preleva il prossimo solido indifferenziato• Uno che preleva solo cubi• Uno che preleva solo cilindri
(ovviamente dovranno essere estratti secondo l’ordine con cui sono stati immessi)
• Suggerimento: fare un iteratore generale e decorarlo in modo da ottenere gli altri due
• Si ripeta l’esercizio usando l’iteratore di Java
![Page 79: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/79.jpg)
Programmazione OO 2011-2012 G. Bucci 79
Versione 1
![Page 80: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/80.jpg)
Programmazione OO 2011-2012 G. Bucci 80
Versione 1
Attenzione: qui che Struttura sia astratta non serve praticamente a nulla. Poteva essere concreta e definire attributi e metodi
Ha senso in previsione di una eventuale estensione con più possibili strutture complete
Solido[] solidi
Solido[] solidi
![Page 81: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/81.jpg)
Programmazione OO 2011-2012 G. Bucci 81
Versione 2
Esattamente come per la versione 1
![Page 82: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/82.jpg)
Programmazione OO 2011-2012 G. Bucci 82
Versione 2
NOTA: Struttura è a tutti gli effetti un’interfaccia; definisce solo metodi che vengono implementati dalle strutture concrete.
![Page 83: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/83.jpg)
Programmazione OO 2011-2012 G. Bucci 83
Versione 3
![Page 84: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/84.jpg)
Programmazione OO 2011-2012 G. Bucci 84
Versione 3
•Struttura è astratta perchédefinisce al suo interno una struttura astratta
•I metodi però sono concreti in quanto possono essere definiti sulla struttura astratta•Le strutture concrete si differenziano attraverso le collection concrete che contengono
![Page 85: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/85.jpg)
Programmazione OO 2011-2012 G. Bucci 85
Versione 3
![Page 86: 4 Programmazione Object-Oriented Interfacce Ereditarietà ... · Programmazione OO 2011-2012 G. Bucci 2 Contenuto • Programmare verso l’interfaccia • Ereditarietà e/o composizione](https://reader033.vdocuments.mx/reader033/viewer/2022051602/5b06b98f7f8b9a58148d37d4/html5/thumbnails/86.jpg)
Programmazione OO 2011-2012 G. Bucci 86
Sul Sito • Sono riportati gli scr per tre progetti sotto Eclipse. • Per usarli basta definire tre progetti e copiarci i rispettivi sorgenti.