Design Pattern Observer INGEGNERIA DEL SOFTWARE Nicola Ferrari.

Slides:



Advertisements
Presentazioni simili
Astrazioni Polimorfe e Tipi Generici. 2 Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo.
Advertisements

Corso di Informatica Corso di Laurea in Conservazione e Restauro dei Beni Culturali Gianluca Torta Dipartimento di Informatica Tel: Mail:
Gestione della memoria centrale
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Informatica Recupero debito quarto anno Terzo incontro.
Array multidimensionali
Procedure e funzioni A. Ferrari.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
UML: Class Diagram 1 Corso IS I /03
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
29 febbraio 2008 Progettare tipi di dato astratti.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Università degli Studi di Modena e Reggio Emilia
Ing. del software B Il Pattern Observer Simone Magnolini.
Interfacce. Interfacce come strumento di progetto Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e riuso di codice.
Programma Dott. Ing. Leonardo Rigutini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
L.Lista Design P atterns Luca Lista. L.Lista Design Patterns Elementi di software OO riutilizzabile Piccoli insiemi di classi che collaborano implementando.
UML: Class Diagram Corso IS I /03
© CEFRIEL Ricettario dei principali pattern GoF Docente: Gabriele Lombardi
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Programmazione con Interfacce
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Modello E-R Generalizzazioni
Java base IV: Java e la programmazione O.O.
OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio.
Introduzione alla modellazione di sistemi interattivi
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione alla programmazione Object Oriented
CAPITOLO 5 Il PIL Il foglio elettronico per Economia.
void binario(int n); …………………
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
1 cin>>c8 s.r.l A.A Generalità Uno dei concetti largamente adottati negli ultimi anni dai professionisti del software in fase di sviluppo.
Esercizi Design pattern
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione ad oggetti
Incapsulamento e information hiding
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Astrazione di dati Dati Astratti: cosa e perchè Dati Astratti: due meccanismi differenti Dati Astratti: due meccanismi differenti Astrazione e incapsulamento.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Gestione dei thread in Java
L.Lista, V. Innocente Design P atterns Luca Lista, Vincenzo Innocente.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
1Ingegneria Del Software L-A Progetto realizzato da: Luca Iannario, Enrico Baioni, Sara Sabioni. A.A. 2008/2009.
Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Tecniche di Problem-Solving
Transcript della presentazione:

Design Pattern Observer INGEGNERIA DEL SOFTWARE Nicola Ferrari

2 Carta didentità Nome Observer Alias Dependents Publish-Subscribe Classificazione Comportamentale, basato su oggetti Scopo Definisce una relazione uno a molti tra oggetti, in modo tale che quando un oggetto cambia stato tutti gli oggetti da lui dipendenti vengono automaticamente notificati

3 Motivazioni Un esempio noto a tutti Il foglio elettronico e le sue opportunità. I dati in forma tabellare possono essere rappresentati nei diversi tipi di grafici. Observer si preoccupa della sincronizzazione automatica fra tutte queste parti. Cioè laggiornamento dei valori di certe celle provoca il ridisegno dei grafici.

4 Applicabilità Quando unastrazione presenta due aspetti, di cui uno dipende dallaltro. Quando una modifica ad un oggetto richiede modifiche ad altri oggetti che dipendono da questo. Quando si vuole mantenere un alto livello di disaccoppiamento fra gli oggetti.

5 I partecipanti Gli attori (visione globale) Subject (abstract) Observer (interface) ConcreteSubject ConcreteObserver

6 I partecipanti Subject Classe astratta da cui eredita ConcreteSubject Tiene i riferimenti ai vari observers metodi add e remove attributo observers Informa gli observers di un avvenuto cambiamento di stato metodo notify

7 I partecipanti Subject (il codice) notify() delega ad Observer laggiornamento dello stato Mancano le astrazioni di setState e getState public abstract Subject { protected int state; protected ArrayList observers; public void add(Observer o) { observers.add(o); } public void remove(Observer o) { int i = observers.indexOf(o); if (i>=0) observers.remove(o); } public void notify() { for (int i=0; i<=observers.size();i++) { Observer o = (Observer) observers.get(i); o.update(); } …. }

8 I partecipanti Observer interfaccia implementata da ConcreteObserver ConcreteObserver Tiene riferimento a Subject per leggere lo stato

9 Implementazione ConcreteObserver (il codice) public class ConcreteObserver implements Observer { private String id; private int state; private Subject subject; public ConcreteObserver(String Id, Subject subject) { this.id = Id; this.subject = subject; stato = id.length(); } public void update() { state = state+subject.getState(); } update richiede lo stato tramite getState dal soggetto concreto

10 Ricapitolando Il metodo notify chiama il metodo update da tutti gli Observer registrati. Il metodo update a sua volta richiama getState di ConcreteSubject per ottenere il nuovo stato

11 Conseguenze 1. Accoppiamento astratto fra Subject e Observer 2. Supporto per comunicazioni broadcast 3. Aggiornamenti inattesi

12 Implementazione 1. Mantenere le associazioni fra soggetti ed osservatori Usando una tabella di hash Un soggetto senza osservatori non occupa spazio Sarà più oneroso accedere agli osservatori

13 Implementazione 2. Chi fa partire la notifica? I metodi di Subject quando modificano il proprio stato automaticamente chiamano Notify dopo aver cambiato lo stato del soggetto Inefficienza nel caso di aggiornamenti multipli I client devono invocare Notify sulloggetto al momento opportuno. Si corre il rischio di dimenticarsene.

14 Implementazione 3. Riferimenti a soggetti cancellati La cancellazione di un soggetto non dovrebbe produrre riferimenti non validi negli osservatori Il soggetto notifica ai suoi osservatori la propria cancellazione in modo che questi possano eliminare il riferimento al soggetto

15 Implementazione 4. Evitare protocolli di notifica specifici per losservatore Le implementazioni prevedono che il soggetto alleghi nella notifica informazioni addizionali sul cambiamento avvenuto nellosservatore Modello push: si allegano informazione dettagliate Problema di riusabilità. Modello pull: non si allega nulla Gli Observer devono capire cosa è cambiato

16 Implementazione 5. Incapsulare semantiche complesse di aggiornamento Quando la dipendenza fra soggetti e osservatori è particolarmente complessa, potrebbe essere richiesto un oggetto che mantenga queste associazioni Maggior sincronizzazione fra osservatori e soggetto

17 Utilizzi noti Gestione degli eventi degli widget di una GUI Gestione degli eventi di un alarm clock Model View Control

18 Pattern correlati Mediator svolge il ruolo di mediatore fra soggetto e osservatori Vedi lucido 16 Singleton