Design Pattern in Java



Похожие документы
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Progettazione : Design Pattern Creazionali

Object Oriented Software Design

Oggetti Lezione 3. aspetti generali e definizione di classi I

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercizi della lezione 5 di Java

Esercitazione sui Design Pattern

Telematica II 17. Esercitazione/Laboratorio 6

Programmazione Orientata agli Oggetti in Linguaggio Java

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Concetto di Funzione e Procedura METODI in Java

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

Funzioni in C. Violetta Lonati

Java: Compilatore e Interprete

GESTIONE DEI PROCESSI

Programmazione a Oggetti Lezione 10. Ereditarieta

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali

Modulo 4: Ereditarietà, interfacce e clonazione

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Alcuni Design Pattern in Java

Soluzione dell esercizio del 2 Febbraio 2004

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Realizzazione di una classe con un associazione

Programmazione a Oggetti Modulo B

(Alcuni) Design Pattern e Tecniche di Riuso, Architettura Software e sue Qualità Progetto di Applicazioni Software

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Esercitazione n 4. Obiettivi

Soluzione dell esercizio del 12 Febbraio 2004

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

Multithreading in Java. Fondamenti di Sistemi Informativi

13. Chain of Responsibility

Registratori di Cassa

UML Diagrammi delle classi. UML Diagramma classi 1

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Inizializzazione, Assegnamento e Distruzione di Classi

Algoritmi di Ricerca. Esempi di programmi Java

Parola chiave extends

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Corso di Amministrazione di Reti A.A. 2002/2003

Sequenza alternativa degli eventi: Variazione di prezzo superiore al 20% per almeno un articolo.

Object Oriented Programming

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

SAPIENZA Università di Roma, Facoltà di Ingegneria

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Protezione. Protezione. Protezione. Obiettivi della protezione

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

FPf per Windows 3.1. Guida all uso

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

Corso sul linguaggio Java

Il Pattern PROXY. Ex presentazione realizzata dallo studente Paolo Melchiori (matricola 65734) nell a.a

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Il calendario di Windows Vista

InitZero s.r.l. Via P. Calamandrei, Arezzo

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Architettura MVC-2: i JavaBeans

L apposizione di firme e informazioni su documenti firmati

Database 1 biblioteca universitaria. Testo del quesito

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Artifact Centric Business Processes (I)

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Ingegneria del Software 5. Esercizi sui casi d uso. Dipartimento di Informatica Università di Pisa A.A. 2014/15

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Generazione Automatica di Asserzioni da Modelli di Specifica

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Approccio stratificato

Introduzione a Classi e Oggetti

Amministrazione gruppi (all interno della Scuola)

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Il Software. Il software del PC. Il BIOS

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Database. Si ringrazia Marco Bertini per le slides

Ingegneria del Software

Omnia Web Timesheet. Manuale utente

Finalità della soluzione Schema generale e modalità d integrazione Gestione centralizzata in TeamPortal... 6

dall argomento argomento della malloc()

Guida Software GestioneSpiaggia.it

Brochure Internet. Versione The Keyrules Company s.r.l. Pagina 2 di 8

Транскрипт:

Design Pattern in Java Claudio Di Ciccio, Massimiliano de Leoni (con la supervisione del docente Massimo Mecella) Università di Roma La Sapienza - Sede di Latina Corso di Progettazione del Software A.A. 2005/2006

I Pattern Il concetto di pattern nasce dall idea del prof. Alexander nel contesto dell architettura (!!!) ma può essere applicato in molte altre discipline compresa la progettazione del software Alexander, nella sua lunga esperienza, aveva sviluppato una serie di best practice, cioè idee progettuali/realizzative che si erano dimostrate efficaci ed efficienti. Il messaggio di Alexander ai futuri esperti era: Se l idea che ha portato ad una soluzione del problema ha una valida generale e se il contesto ne permette l applicazione, perché non riutilizzarla? L idea è che non è necessario reinventare la ruota ogni volta: i pattern sono un sistema eccellente per catturare ed esprimere l esperienza maturata in un determinato mestiere I design pattern (letteralmente pattern di progettazione ) sono pattern (cioè nati per perseguire un intento: la soluzione di un problema) che utilizzano metodi e classi di un linguaggio OO. I design pattern sono ad un livello più elevato rispetto ai linguaggi di programmazione Object Oriented perché indipendenti dagli stessi I design pattern più importanti originariamente erano stati sviluppati per SmallTalk, un linguaggio Object Oriented che non si è mai diffuso I design Pattern in Java 2

Gli elementi in gioco I pattern originali di Alexander erano formulati nel modo seguente: SE ti trovi in CONTESTO come nel caso ESEMPI con questo PROBLEMA che implica REQUISITI ALLORA per queste MOTIVAZIONI applica FORMATI_PROGETTO AND/OR REGOLE_PROGETTO per realizzare SOLUZIONE che guida a NUOVO_CONTESTO AND NUOVI_PATTERN Ad ogni design pattern è stato associato un nome compatto che ne chiarisse l essenza Pattern user Ha Problema Opera Risolve Contesto Priorizza Risolve Forze Soluzione uno scenario che illustra il problema di progettazione e come le classi e gli oggetti del pattern lo risolvono. Devono essere descritte tutte quelle forze (problemi, vincoli e implicazioni varie) che influenzano la parte del progetto che il pattern deve affrontare, le interazioni e i conflitti; I design Pattern in Java 3

Pattern Singleton / 1 Questo design pattern è usato per assicurare che una classe abbia una sola istanza ed un unico punto di accesso globale. In molte situazioni c è la necessità di garantire l esistenza di un unico oggetto di una classe In un sistema ci possono essere tante stampanti ma solo una classe PrintSpooler Se si hanno varie finestre dell'applicazione che vogliono interagire con dei dati, il gestore di questi dati deve essere uno solo e condiviso da tutte, altrimenti ogni istanza di tale gestore potrebbe fornire dati differenti in momenti differenti Se si apre un Pannello di Controllo da Sistema Operativo (Pannello di Controllo > Sistema su Windows XP) una volta, e si tenta di riaprirlo una seconda, appare sempre la stessa finestra. Perché? Evidentemente quella finestra deve essere un Singleton! I design Pattern in Java 4

Pattern Singleton / 2 Idea: Le classi Singleton vengono progettate con i costruttori privati per evitare la possibilità di istanziare un numero arbitrario di oggetti della stessa. Esiste un campo statico inizialmente null, privato anch'esso, della stessa classe (la classe Singleton per ciò conterrà al suo interno un handle di classe Singleton dichiarato privato e statico). Esiste un metodo statico pubblico con la responsabilità di fornire ad altre classi chiamanti il riferimento all'unica istanza possibile. Esso sarà l'unico ad accedere al costruttore privato, assegnando alla variabile statica un nuovo handle solo se essa è null. Altrimenti restituirà il valore corrente della variabile. I design Pattern in Java 5

Pattern Singleton / 3 La classe mantiene all interno il riferimento all unica istanza Singleton della classe L istanza alla prima esecuzione del metodo statico (inizializzazione pigra) oppure contemporaneamente alla definizione della variabile di istanza riferimento all oggetto La classe contiene poi tutti i metodi, le proprietà e gli attributi tipici dell astrazione per cui è stata concepita L inizializzazione pigra viene spesso usata quando non si hanno abbastanza informazioni per istanziare l oggetto Singleton nel momento di dell inizializzazione statica. Un Singleton potrebbe richiedere valori calcolati più avanti I design Pattern in Java 6

Esempio Singleton public class Singleton { // istanza allocata in modo pigro private static Singleton instance = null; // specifica delle proprieta' caratteristiche // dell'oggetto //... // costruttore definito come privato in modo // da proibire ai client di creare oggetti private Singleton() { public static Singleton getinstance() { if (instance == null) instance = new Singleton(); return instance; public class Application { public static void main(string args[]) { Singleton obj=single.getinstance(); Singleton obj2=singleton.getinstance(); Variazioni per il singleton non pigro: private static Singleton instance = new Singleton(); private Singleton() { public getinstance() { return (instance); System.out.println( Primo oggetto: +obj); System.out.println( Secondo oggetto: +obj2); if (obj==obj2) System.out.println( Sono lo STESSO oggetto ); I design Pattern in Java 7

Pattern Observer / 1 L intento del pattern Observer è definire una dipendenza uno-a-molti tale che quando un oggetto cambia stato tutti quelli che ne dipendono vengono automaticamente notificati del fatto ed aggiornati di conseguenza L oggetto osservato è chiamato Subject (soggetto) mentre gli oggetti osservatori sono noti come Observer In risposta alla notifica, ogni osservatore richiederà al soggetto le informazioni necessarie per sincronizzare il proprio stato con il nuovo stato del soggetto. I design Pattern in Java 8

Pattern Observer / 2 Idea: Gli Observer offrono un metodo invocabile dal Subject per la notifica, e richiedono ad esso la loro registrazione. Il Subject mantiene una lista di tutti gli Observer Nel momento in cui si verifica una condizione che implichi un'alterazione dello stato corrente, il Subject richiama su ogni elemento della lista di Observer il loro metodo preposto a ricevere questo tipo di avvisi. Caso tipico di adozione dell'interfaccia il Subject non sa come reagiranno gli Observer alle notifiche, ma sa che tutti hanno un metodo apposto per riceverne gli Observer sanno del Subject che esso tiene nota del fatto di avvisarli quando necessario, ma non si interessano del come I design Pattern in Java 9

Pattern Observer / 3 Gli ascoltatori delle Swing sono un esempio di pattern Observer. Infatti il componente che scatena l evento è il subject mentre gli ascoltatori formano una lista di Observer Noto anche come Publish/Subscribe Il soggetto pubblica le modifiche al proprio stato La pubblicazione agli osservatori è fatta chiamando il metodo notify che internamente chiama il metodo update di tutti gli Observer registrati Gli osservatori si sottoscrivono per ottenere gli aggiornamenti La sottoscrizione di un Observer x è realizzata da x invocando sul subject il metodo add(x) I design Pattern in Java 10

Implementaz. Observer/1 public interface Observer { void update(); public class ConcreteObserver implements Observer { private ConcreteSubject subject; public ConcreteObserver(ConcreteSubject asubject) { subject = asubject; subject.add(this); public void update() { System.out.println("Io sono l'observer " + this + " ed il nuovo stato del mio subject e' " + subject.getstate()); I design Pattern in Java 11

Implementaz. Observer/2 public interface Subject { void add(observer anobserver); void remove(observer anobserver); void notify(); public class ConcreteSubject implements Subject { private int state; // la lista degli osservatori private LinkedList observers; public ConcreteSubject(int initialstate){ state = initialstate; public int getstate() { return state; public void setstate(int astate) { state = astate; I design Pattern in Java 12

Implementaz. Observer/3 public void notify() { Iterator iter=observers.iterator(); Observer obs; while(iter.hasnext()) { obs=(observer)iter.next(); obs.update(); public void add(observer anobserver) { observers.add(anobserver); public void remove(observer anobserver) { observers.remove(anobserver); I design Pattern in Java 13

Implementaz. Observer/4 public static void main(string[] args) { int concreteobservers[3]; int initialstate = 10; ConcreteSubject mysubject = new ConcreteSubject(initialState); System.out.println("E' stato creato un subject con stato " + mysubject.getstate()); for (int i = 0; i < 3; i++) { concreteobservers[i] = new ConcreteObserver(mySubject); System.out.println("..."); mysubject.setstate(17); mysubject.notify(); System.out.println("..."); mysubject.setstate(06); mysubject.notify(); Un possibile output è il seguente: E' stato creato un subject con stato 10... Io sono l'observer ConcreteObserver@288051 ed il nuovo stato del mio subject e' 17 Io sono l'observer ConcreteObserver@45eb ed il nuovo stato del mio subject e' 17 Io sono l'observer ConcreteObserver@ee7a14 ed il nuovo stato del mio subject e' 17... Io sono l'observer ConcreteObserver@288051 ed il nuovo stato del mio subject e' 17 Io sono l'observer ConcreteObserver@45eb ed il nuovo stato del mio subject e' 17 Io sono l'observer ConcreteObserver@ee7a14 ed il nuovo stato del mio subject e' 17 I design Pattern in Java 14

Implementazione Java Java fornisce già implementate le classi per realizzare il pattern Observer Gli osservatori devono implementare l interfaccia java.util.observer la quale definisce il metodo public void update(observable o,object arg) Il subject per essere tale deve estendere la classe java.util.observable che tra gli altri fornisce i seguenti metodi: public void addobserver(observer o) public void removeobserver(observer o) public void notifyobserver([object arg]) protected void setchanged() Il subject notifica il cambiamento dello stato invocando notifyobserver il quale chiama i metodi update degli osservatori installati quando vengono chiamati in sequenza Si intende che il subject cambia stato quando viene chiamato il metodo setchanged I design Pattern in Java 15

Esempio d'uso Abbiamo una classe ListaStudenti che mantiene una lista di Studenti iscritti all'esame di Progettazione del Software, con metodi per l'aggiornamento della stessa Abbiamo una classe MatricoleWindow che si occupa della visualizzazione del listato delle matricole, un'altra classe DetailsWindow con nomi, cognomi, matricole, e contatore finale di iscritti. MatricoleWindow e DetailsWindow sono Observer del Subject ListaStudenti. ListaStudenti invocherà setchanged() se è stato aggiunto o rimosso uno studente o ne sono stati modificati i dati, e lo notificherà a tutti gli Observer MatricoleWindow aggiornerà il listato DetailsWindow farà lo stesso, e in più aggiornerà anche il contatore, se è stato aggiunto o rimosso uno studente I design Pattern in Java 16