Programmazione Orientata agli Oggetti in Linguaggio Java Sommario

Transcript

Programmazione Orientata agli Oggetti in Linguaggio Java Sommario
26/01/2005
Programmazione Orientata
agli Oggetti in Linguaggio Java
Design Pattern:
Storia
Parte b
versione 2.1
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
G. Mecca – Università della Basilicata – [email protected]
Design Pattern: Storia >> Sommario
Sommario
m Una
Visione Critica dei Pattern Originali
m Il Pattern Singleton
m Il Pattern Factory Method
G. Mecca - Programmazione Orientata agli Oggetti
2
1
26/01/2005
Design Pattern: Storia >> I Pattern Originali Dopo 10 anni
I Pattern Originali Dopo 10 Anni
m Dopo
10 anni
ðalla conferenza OOPSLA 2004, una tavola
rotonda sui pattern della GoF 10 anni dopo
m Obiettivo
ðverificare quali tra i pattern originali si sono
realmente confermati come soluzioni efficaci
nel tempo
ðe quali, viceversa, avrebbero potuto essere
omessi
G. Mecca - Programmazione Orientata agli Oggetti
3
Design Pattern: Storia >> I Pattern Originali Dopo 10 anni
I Pattern Originali Dopo 10 Anni
m Il
responso
ðalcuni pattern da rimuovere
ðalcuni pattern discutibili
m Pattern
da rimuovere
ðBridge, Interpreter
m Pattern
discutibili
ðSingleton, Chain of Responsibility (poco
usato)
G. Mecca - Programmazione Orientata agli Oggetti
4
2
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Nome: Singleton
Categoria: creazionale
Il Pattern Singleton
m Un
Difficoltà di apprendimento
limitata
Difficoltà di applicazione
media
esempio di pattern discusso
ðSingleton
ðè un pattern di tipo “creazionale”
m Descrizione
del pattern
ðserve a creare una classe con un’unica
istanza, che rappresenta un oggetto con
visibilità “globale”, accessibile in tutta
l’applicazione
G. Mecca - Programmazione Orientata agli Oggetti
5
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
>> volpiEConigli2 – Configurazione.java
m Esempio
ðvolpi e conigli
ðper ciascuna esecuzione c’è un’unica
configurazione della simulazione
ðè opportuno che la configurazione sia visibile
da molte classi (Gioco, Volpe, Coniglio, Test)
>> visibilità globale
m In
questo caso
ðè possibile applicare il singleton
G. Mecca - Programmazione Orientata agli Oggetti
6
3
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
package it.unibas.volpieconigli2.modello;
public class Configurazione {
private int numeroRighe;
private int numeroColonne;
...
il riferimento all’unica istanza
della classe viene mantenuto come
valore della proprietà statica singleton
es: singleton vale #2367
private static Configurazione singleton = new Configurazione();
private Configurazione() {}
public static Configurazione getInstance() {
return Configurazione.singleton;
}
public void carica(String nomeFile) throws Exception {
java.util.Properties proprieta = caricaProperties(nomeFile);
...
}
il costruttore è privato; non
è possibile creare oggetti
all’esterno
il metodo getInstance()
restituisce sempre lo stesso
riferimento (#2367)
public int getNumeroInizialeConigli() {
return (int)(this.numeroRighe * this.numeroColonne * this.percentualeConigli);
}
...
}
G. Mecca - Programmazione Orientata agli Oggetti
7
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m In
tutte le altre classi
ðposso ottenere il riferimento al singleton
attraverso la chiamata
Configurazione.getInstance()
ðe poi chiamarne i metodi; es:
Configurazione.getInstance().getNumeroRighe();
Configurazione.getInstance().getFameLimiteVolpi();
G. Mecca - Programmazione Orientata agli Oggetti
8
4
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
Singleton
Diagramma UML della GoF
Singleton
static uniqueInstance
field1
field2
static Instance()
method1()
method2()
return uniqueInstance
fonte: Design Patterns – Elements of Reusable OO Code
9
G. Mecca - Programmazione Orientata agli Oggetti
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Perchè
singleton è discutibile ?
ðper via di due problemi
m Problema
n. 1
ðutilizzo esagerato
ðè opportuno usare un singleton solo nei casi
in cui serve effettivamente un componente
unico e globale
ðma questa scelta non deve essere frettolosa
G. Mecca - Programmazione Orientata agli Oggetti
10
5
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Esempio:
scacchiera
ðpotrebbe essere un singleton ?
m In
generale no
ðnon è indispensabile la visibilità globale
ðche deve essere, per quanto possibile,
impedita
ðaltrimenti altri componenti potrebbero per
errore modificare lo stato della scacchiera
G. Mecca - Programmazione Orientata agli Oggetti
11
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m
In altri termini
ðper poter essere un singleton, un componente deve
essere effettivamente condivisibili a livello globale
ðovvero tale per cui, pur essendo condiviso tra vari
client, questi non possano interferire tra di loro
modificandone lo stato
ðnel caso di configurazione questo rischio è molto
basso perchè i metodi set sono privati
ðun altro esempio plausibile di singleton: Console
G. Mecca - Programmazione Orientata agli Oggetti
12
6
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Ma
in effetti, a pensarci bene
ðla stessa configurazione potrebbe non
essere per sempre un singleton
ðse mettessi in linea l’applicazione su un sito
Web, potrei avere vari giocatori che giocano,
ciascuno con la sua configurazione
ða quel punto il singleton non andrebbe più
bene
G. Mecca - Programmazione Orientata agli Oggetti
13
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Problema
n. 2
ðquando è realmente utile il singleton ?
m Infatti
ðsi tratta un componente “unico” visibile in
tutta l’applicazione
m Ma...
ðquesto è equivalente ad una classe con
costruttore privato e metodi statici
G. Mecca - Programmazione Orientata agli Oggetti
14
7
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m In
effetti
ðnella versione originale, Configurazione era
un componente statico
ðesattamente come it.unibas.utilita.Console
m Di
conseguenza
ðin molti casi l’utilizzo di un singleton può
essere surrogato utilizzando viceversa un
componente statico
G. Mecca - Programmazione Orientata agli Oggetti
15
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Quando
serve realmente il singleton?
ðci sono due casi in cui è indispensabile
mI
caso
ðho bisogno di un oggetto, ovvero di
manipolare un riferimento
m II
caso
ðil componente unico deve avere
comportamento polimorfo (alcuni dei metodi
devono essere sovrascritti nelle sottoclassi)
G. Mecca - Programmazione Orientata agli Oggetti
16
8
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Un
esempio del I caso
ðAnimaleNullObject in volpi e conigli
m Infatti
ðcostruire tanti oggetti di tipo animale nullo è
inutile, visto che si comportano tutti allo
stesso modo
ðmi basta un componente unico e globale
ðma deve essere necessariamente un oggetto
perchè devo disporlo sulla scacchiera
G. Mecca - Programmazione Orientata agli Oggetti
17
Design Pattern: Storia >> Il Pattern Singleton
package it.unibas.volpieconigli2.modello;
public class AnimaleNullObjectSingleton {
private static AnimaleNullObjectSingleton singleton =
new AnimaleNullObjectSingleton();
private AnimaleNullObjectSingleton() {}
public static AnimaleNullObjectSingleton getInstance() {
return singleton;
}
public boolean isConiglio() { return false; }
public void agisci(Scacchiera scacchiera) { return; }
public String toString() { return " "; }
}
G. Mecca - Programmazione Orientata agli Oggetti
18
9
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m In
questo caso
ðcambia l’inizializzazione della scacchiera
public Scacchiera(int numeroRighe, int numeroColonne) {
elementi = new Animale[numeroRighe][numeroColonne];
for (int i = 0; i < numeroRighe; i++) {
for (int j = 0; j < numeroColonne; j++) {
elementi[i][j] = AnimaleNullObjectSingleton.getInstance();
}
}
}
G. Mecca - Programmazione Orientata agli Oggetti
19
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Un
esempio del II caso
ðin Java non esiste
ðdal momento che una classe basata su
singleton non può essere estesa
m Infatti
ðse il costruttore è privato la classe diventa
automaticamente finale
G. Mecca - Programmazione Orientata agli Oggetti
20
10
26/01/2005
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m La
soluzione del libro originale
ðdichiarare il costruttore protected
ðma anche questo in Java non ha senso,
perchè non si tratta più di un singleton (se il
costruttore è protected, altre classi dello
stesso package possono creare oggetti)
m Viceversa
ðla soluzione originale con costruttore
protected aveva senso in C++
G. Mecca - Programmazione Orientata agli Oggetti
21
Design Pattern: Storia >> Il Pattern Singleton
Il Pattern Singleton
m Di
conseguenza
ðin Java, l’ambito di applicabilità del singleton
è molto limitato
ðha senso solo in casi simili a quello di
AnimaleNullObject
ðbisogna evitare di applicarlo quando non è
indispensabile
G. Mecca - Programmazione Orientata agli Oggetti
22
11
26/01/2005
Design Pattern: Storia >> Riassumendo
Riassumendo
m
Creational patterns (5)
ð
ð
ð
ð
ð
m
m
Structural Patterns (7)
ð
ð
ð
ð
ð
ð
ð
Adapter
Bridge (da rimuovere)
Composite
Decorator
Facade (visto)
Flyweight
Proxy
Behavioral Patterns (11)
ð Chain of Responsibility
(discutibile)
ð Command
ð Interpreter (da rimuovere)
ð Iterator
ð Mediator
ð Memento
ð Observer
ð State
ð Strategy
ð Template Method
ð Visitor
Abstract Factory
Builder
Factory Method
Prototype
Singleton (discutibile, visto)
m
Altri pattern
ð Null Object (visto)
ð DAO (visto)
G. Mecca - Programmazione Orientata agli Oggetti
23
Design Pattern: Storia >> Sommario
Riassumendo
m Una
Visione Critica dei Pattern Originali
m Il Pattern Singleton
m Il Pattern Factory Method
G. Mecca - Programmazione Orientata agli Oggetti
24
12
26/01/2005
Termini della Licenza
Termini della Licenza
m
This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California
94305, USA.
m
Questo lavoro viene concesso in uso secondo i termini della
licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere
una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una
lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
G. Mecca - Programmazione Orientata agli Oggetti
25
13

Documenti analoghi

Singleton Pattern - Home Page Danilo Spada

Singleton Pattern - Home Page Danilo Spada Elements of Reusable Object-Oriented Software” di Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Gli autori del libro dichiarano di non essere a conoscenza di come si sia originato l'ep...

Dettagli

Sul pattern Singleton 1 Introduzione

Sul pattern Singleton 1 Introduzione Si tratta anzitutto di rendere impossible l’uso del costrutto new da parte del programma utente e di fornire un metodo indiretto per ottenere una istanza (l’unica) della classe. A tal fine occorre: ...

Dettagli

Singleton - Tiziano Manni

Singleton - Tiziano Manni istanziazione di un unico oggetto, tramite l’invocazione a un metodo della classe, incaricato della produzione degli oggetti. Le diverse richieste di istanziazione, comportano la restituzione di un...

Dettagli