Modellazione - Dipartimento di Ingegneria dell`Informazione
Transcript
Modellazione - Dipartimento di Ingegneria dell`Informazione
5 UML Analisi, Modellazione e altro UML (2) - 2010/11 G. Bucci 1 Contenuto Analisi e Modellazione z Il pattern Singleton (en passant) z Stereotipi per l’analisi z Il pattern MVC z z z Il pattern Observer Una metodologia di Analisi-ProgettoSviluppo z (Anticipo ulteriori concetti UML) UML (2) - 2010/11 G. Bucci 2 Modellazione/Diagr Classi z Diagramma delle classi: è il principale strumento di modellazione z z E’ la rappresentazione strutturale (statica) del sistema Tre prospettive di uso: z Livello concettuale: relazioni tra le classi del modello z Livello di specifica: responsabilità delle classi (interfacce) z Livello di implementazione: classi di supporto, trasformazione, dettagli realizzativi (puntatori, liste, etc..) UML (2) - 2010/11 G. Bucci 3 Prospettive z Analisi, mod concettuale Mod. dominio button Client Applicazione z Responsabilità button Client +push() BWindows z Blinux +push() Progetto, mod implementativo Client +push() BLinux +push() <<interface>> Window <<interface>> AbFactory WLinux +createWindow() +createButton() WWindows <<interface>> Button UML (2) - 2010/11 WinFactory LinuxFactory +createWindow() +createButton() +createWindow() +createButton() G. Bucci Blinux BWindows 4 Modellazione OO 1. Costruzione del modello di dominio z z z Si identificano le entità del dominio applicativo e si modellano con oggetti/classi Si identificano le relazioni di associazione Possibilmente di identificano gerarchie di classi, specializzando, ridefinendo il comportamento nelle classi subordinate UML (2) - 2010/11 G. Bucci 5 Modello di dominio z In esso entrano solo le entità che fanno parte del dominio applicativo (dette classi di analisi, ovvero classi entity) z Esempio: z CC, Fido, Cliente, Mutuo Non entrano gli oggetti che rappresentano soluzioni progettuali/implementative (liste, puntatori, ecc) o altro (interfacce utente, oggetti con funzione di controllo) z Esempio: UML (2) - 2010/11 StampaListaFidi G. Bucci 6 Identific. classi/associazioni z Classi/Oggetti sono tipicamente espressi da sostantivi (cliente, mutuo, fido …) z Associazioni sono tipicamente espresse da verbi che esprimono: z z z Collocazione fisica (contenuto in); azioni (gestisce, corre, ..); proprietà (possiede, ha); soddisfacimento di condizioni (sposato a) Ogni riferimento da una classe a un’altra è un’associazione Una associazione deve esprimere una proprietà strutturale del dominio, non un evento transitorio UML (2) - 2010/11 G. Bucci 7 Esempi Evitare di rappresentare soluzioni progettuali (implementative) Banchetto Banchetto UML (2) - 2010/11 Lista 1..* 1..* Invitato G. Bucci Invitato NO! SI! 8 Esempi Una associazione deve esprimere una proprietà strutturale del dominio, non un evento transitorio Biblioteca presta Biblioteca Libro SI! NO! UML (2) - 2010/11 contiene G. Bucci Libro prestato 9 Esempi I nomi delle classi devono riflettere la loro natura intrinseca, non il ruolo giocato nelle associazioni Marito sposa Moglie NO! Uomo 0,1 sposa marito 0,1 moglie Donna SI! UML (2) - 2010/11 G. Bucci 10 Esempio: Modellazione di un museo z z z z z Un museo si compone di diverse sezioni, ciascuna comprende un certo numero di sale. Ogni sezione ha un orario di apertura giornaliero ed è custodita durante l’orario da un solo custode secondo un turno settimanale; il turno definisce quale sezione un custode deve sorvegliare ogni giorno della settimana. Ciascuna sala comprende diverse opere d’arte: dipinti, sculture (divise in bassorilievi, altorilievi, statue), arazzi e ceramiche. Ogni opera ha un autore, ma ci sono opere di autore sconosciuto. Ogni opera appartiene a un periodo storico (Rinascimento, Medio Evo, Novecento, ..); alcuni autori appartengono a un movimento artistico (impressionismo, cubismo, futurismo,…) UML (2) - 2010/11 G. Bucci 11 Esempio (continuazione) z Si analizza attentamente il testo alla ricerca dei sostantivi che identificano le classi e/o i loro eventuali attributi z I verbi come “ha”, “contiene”, “possiede”,.. danno le relazioni strutturali tra le classi z I verbi come “gestisce”, “legge” possono identificare relazioni strutturali oppure funzionalità UML (2) - 2010/11 G. Bucci 12 Esempio (continuazione) z z z z z Un museo si compone di diverse sezioni, ciascuna comprende un certo numero di sale. Ogni sezione ha un orario di apertura giornaliero ed è custodita durante l’orario da un solo custode secondo un turno settimanale; il turno definisce quale sezione un custode deve sorvegliare ogni giorno della settimana. Ciascuna sala comprende diverse opere d’arte: dipinti, sculture (divise in bassorilievi, altorilievi, statue), arazzi e ceramiche. Ogni opera ha un autore, ma ci sono opere di autore sconosciuto. Ogni opera appartiene a un periodo storico (Rinascimento, Medio Evo, Novecento, ..); alcuni autori appartengono a un movimento artistico (impressionismo, cubismo, futurismo,…) In grassetto possibili classi e attributi UML (2) - 2010/11 G. Bucci 13 Esempio (continuazione) z Un museo si compone di diverse sezioni, ciascuna comprende un certo numero di sale. Ogni sezione ha un orario di apertura giornaliero….. z Sono aggregazioni Museo Sezione -orario Sala UML (2) - 2010/11 G. Bucci 14 Esempio (continuazione) z z Ogni sezione ha un orario di apertura giornaliero ed è custodita durante l’orario da un solo custode secondo un turno settimanale; il turno definisce quale sezione un custode deve sorvegliare ogni giorno della settimana. Qui c’è una associazione ternaria: un custode è associato a una sala ma in base al turno. L’associazione stessa è una classe che lega sezioni a custodi in base al giorno della settimana Sezione -orario Custode * * CustoditaDa -giorno UML (2) - 2010/11 G. Bucci 15 Esempio (continuazione) z Ciascuna sala comprende diverse opere d’arte: dipinti, sculture (divise in bassorilievi, altorilievi, statue), arazzi e ceramiche. Sala 1 contiene 1..* Perché non aggregazione? Opera -periodoS torico Dipinto Statua UML (2) - 2010/11 Scultura A razzo Bassorilievo Ceramica A ltoril. G. Bucci 16 Esempio (continuazione) z z Ogni opera ha un autore, ma ci sono opere di autore sconosciuto. Ogni opera appartiene a un periodo storico (Rinascimento, Medio Evo, Novecento, ..); alcuni autori appartengono a un movimento artistico (impressionismo, cubismo, futurismo,…) Sala Perché attributi e non classi? 1 contiene 1..* Opera -periodoStorico UML (2) - 2010/11 Autore eseguita 1..* 0..* G. Bucci +movimentoArtistico 17 Museo Sezione Custode -orario CustoditaDa -giorno Sala 1 contiene 1..* Opera -periodoStorico Dipinto Statua UML (2) - 2010/11 Scultura Bassorilievo eseguita 1..* Arazzo Autore 0..* +movimentoArtistico Ceramica Altoril. G. Bucci 18 Commento z Il diagramma precedente rappresenta il modello del dominio applicativo z z z z In pratica è il modello dei dati Nel campo dell’elaborazione dei dati il modello dei dati è di norma l’aspetto rilevante Il nostro esempio somiglia molto a un problema di basi di dati: è difficile immaginare un caso d’uso diverso da una interrogazione o un aggiornamento z Di per sé c’è poca (o nessuna) “logica di business” La logica dell’applicazione si costruisce a parte UML (2) - 2010/11 G. Bucci 19 ..Commento z z Ci vuole un po’ di fantasia a immaginare che oggetti della classe Opera abbiano un comportamento (interagiscano con altri oggetti scambiando messaggi) In questo caso il modello dei dati serve essenzialmente a navigare: z z z Recuperare uno o più dati Aggiornare uno o più dati Lo scambio dei messaggi tra oggetti è da riguardarsi come funzionale alla navigazione UML (2) - 2010/11 G. Bucci 20 Divagazione Classi di applicazioni Prevalente controllo Automazione ind. Monitor/Controllo Controllo e manipolaz. dati Prevalente manipolaz. Dati Word Banche process. Modellazione UML (2) - 2010/11 G. Bucci Contabilità 21 Applicazioni di controllo Prevalente controllo Automazione ind. Monitor/Controllo Controllo e manipolaz. dati Prevalente manipolaz. Dati Word Banche process. Modellazione Pochi Contabilità dati da manipolare, eventi da tenere sotto controllo Tempo reale (anche stretto) Operatività (24H ?) UML (2) - 2010/11 G. Bucci 22 Applicazioni “Enterpise” Prevalente controllo Automazione ind. Monitor/Controllo Controllo e manipolaz. dati Prevalente manipolaz. Dati Word Banche process. Modellazione Contabilità Molti dati da manipolare Persistenza Operatività Real UML (2) - 2010/11 G. Bucci (24H) time (?) 23 Schema Appl. Enterprise UML (2) - 2010/11 G. Bucci 24 N-tier (AE) Presentation Network Business logic Dati Middleware Middleware Client UML (2) - 2010/11 Web server Appl. servers G. Bucci DB server 25 ..Commento z Pratica consolidata per le applicazioni enterprise: ORM (object-relational mapping) Un mondo “morto” Un mondo “vivo” UML (2) - 2010/11 G. Bucci 26 .. ..ma perché ? z Perché si vuole utilizzare tecnologie OO L’Applicazione è programmata a oggetti z La base di dati contiene un numero di dati potenzialmente molto grande z Nell’applicazione, in un dato momento, sono presenti solo gli oggetti che servono (quelli che corrispondono ai dati che in quel momento vengono manipolati) to n z Il Mapper ha la funzione di mappare e m go r oggetti su tabelle e viceversa. l l ’a z UML (2) - 2010/11 G. Bucci r o T u s o m re e n 27 Esempio: una bolla di consegna z Si immaginano questi attributi Numero progressivo z Data di emissione z Termine di pagamento z Intestatario z Un certo numero di righe ciascuna delle quali descrive un prodotto, la quantità, il prezzo unitario e il prezzo totale z Ecc. z UML (2) - 2010/11 G. Bucci 28 ..bolla (AE) z Cosa possiamo chiedere a una bolla? z Lettura/modifica di attributi z Forse qualche specifica operazione: aggiunta di una Riga UML (2) - 2010/11 G. Bucci 29 Metodi get e set z z Classi come le precedenti presentano due categorie di metodi: metodi Getter e metodi Setter, per la lettura e la modifica degli attributi. Seguiremo il criterio di avere attributi privati e leggerli/modificarli attraverso l’interfaccia della classe z Cfr. Information Hidig – Incapsulamento z z Type getAttributo_i(); Si usa anche il void setAttributo_i(param); termine UML (2) - 2010/11 Proprietà in luogo di attributo G. Bucci 30 Dove sta la logica applicativa? z Nelle applicazione enterprise: z Di norma conviene che la logica applicativa sia realizzata attraverso classi aggiuntive z Tipicamente classi di controllo che “comandano” le classi del modello z Le classi del modello devono presentare metodi adeguati in modo da collaborare con le classi di controllo (permettendo la navigazione nel modello) UML (2) - 2010/11 G. Bucci 31 …Dove sta la logica applicativa? z Nelle applicazioni di controllo z Sta nel modello! z Gli oggetti del modello rappresentano entità del mondo reale che effettivamente hanno un comportamento Timer Controllore 1 Sensore SensTemperature UML (2) - 2010/11 1..* 1..* SensPressione Classe attiva 1 Attuatore Elettrovalvola G. Bucci Motore 32 Come procederemo? z Studieremo prima il caso delle applicazioni tipo Enterprise z Focalizzando solo l’aspetto della programmazione OO dell’applicazione (rimandando la questione della persistenza dei dati) z z Successivamente parleremo di ORM In un secondo tempo esamineremo anche il caso di sistemi a prevalente aspetto di controllo UML (2) - 2010/11 G. Bucci 33 Torniamo al Museo z Aggiungiamo qualche attributo per rendere l’esempio più realistico Museo Sezione -nome: String -indirizzo Sala -numero: int -orario -num: int 1 contiene 1..* Opera Autore eseguita -id: int -nome: String 1..* 0..* -nome: String -descrizione: String -movimentoArtistico -periodoStorico ~//altri attributi Gli altri attributi potrebbero essere oggetti legati all'opera; p.es. gli eventuali restauri subiti, gli expertise, ecc. UML (2) - 2010/11 G. Bucci 34 L’applicazione z Potrebbe richiedere che il sistema mostri tutti i dati relativi a una data Opera z z z Occorre prevedere la funzionalità corrispondente. Stabiliamo che ci sia un oggetto della classe AnalisiOpera, avente la responsabilità di mostrare i dati relativi all’opera selezionata tramite menu Stabiliamo che AnalisiOpera presenti il metodo mostraOpera(String), responsabile di mostrare i dettagli relativi all’opera specificata, invocato a seguito della scelta da menù il metodo mostraOpera(String) della classe AnalisiOpera chiama il metodo getOpera(String) di Museo UML (2) - 2010/11 G. Bucci 35 ..Esempio Museo AnalisiOpera -nome: String -indirizzo +mostraOpera(nome) +getOpera(nome): Opera z Occorre prevedere i metodi adeguati nelle altre classi per permettere la navigazione z Arrivare fino a Opera z Restituire all’applicazione (all’oggetto della classe AnalisiOpera) il riferimento all’opera cercata UML (2) - 2010/11 G. Bucci 36 Aggiungiamo le interfacce (i metodi) Museo -nome: String -indirizzo +getOpera(nome): Opera -sezioni Sezione -numero: int -orario +getOpera(nome): Opera -sale Sala -num: int +getOpera(nome): Opera 1 contiene 1..* -opere Opera -id: int -nome: String -descrizione: String -periodoStorico ~//altri attributi eseguita 1..* Autore -nome: String 0..* -movimentoArtistico +getName(): String UML (2) - 2010/11 G. Bucci 37 Procediamo alla realizzazione Museo Realizzate come Collection ( size(), get(index), …) -nome: String -indirizzo +getOpera(nome): Opera -sezioni Restituisce null se non si trova l’opera Sezione -numero: int -orario -sale Sala -num: int +getOpera(nome): Opera +getOpera(nome): Opera 1 contiene UML (2) - 2010/11 G. Bucci 38 Java Museo -nome: String -indirizzo +getOpera(nome): Opera Opera getOpera(String nome){ Opera o = null; if (sezioni.isEmpy()){ ahi! ahi! :::: } int i=0; while (o==null && i<sezioni.size()){ o= sezioni.get(i).getOpera(nome); i++; } return o; } -sezioni Sezione -numero: int -orario -sale Sala -num: int +getOpera(nome): Opera +getOpera(nome): Opera 1 contiene UML (2) - 2010/11 G. Bucci 39 ..Java Museo -nome: String -indirizzo +getOpera(nome): Opera -sezioni Sezione -numero: int -orario Opera getOpera(String nome){ Opera o = null; if (sale.isEmpy()){ che fare?? :: } int i =0; while (o==null && i<sale.size()){ o= sale.get(i).getOpera(nome); i++; } return o; } -sale Sala -num: int +getOpera(nome): Opera +getOpera(nome): Opera 1 contiene UML (2) - 2010/11 G. Bucci 40 Opera getOpera(String nome){ if (opere.isEmpy()){ è possibile ?? :::: } int i=0; while (i<opere.size()){ if (opere.get(i).getName() == nome ) return opere.get(i); i++; -sezioni } Sezione Sala return null; -sale int } -numero: -num: int -orario +getOpera(nome): Opera +getOpera(nome): Opera 1 contiene 1..* -opere Opera -id: int -nome: String -descrizione: String -periodoStorico ~//altri attributi eseguita 1..* Autore -nome: String 0..* -movimentoArtistico +getName(): String UML (2) - 2010/11 G. Bucci 41 La navigazione Museo AnalisiOpera +mostraOpera(nome) -nome: String -indirizzo +getOpera(nome): Opera -sezioni Sezione -sale -numero: int -orario Sala -num: int +getOpera(nome): Opera +getOpera(nome): Opera 1 contiene 1..* -opere Torna il riferimento all’opera cercata (o null) Opera -id: int -nome: String -descrizione: String -periodoStorico ~//altri attributi eseguita 1..* Autore -nome: String 0..* -movimentoArtistico +getName(): String UML (2) - 2010/11 G. Bucci 42 ..E ora l’applicazione void mostraOpera(String nome) { opera = museo.getOpera(nome); if (opera != null){ descr = opera.getDescrizione(); autore = opera.getAutore(); nomeAutore = autore.getNome(); //ecc. } else { 1 // l’opera con quel nome non esiste contiene 1..* -opere } I primi due metodi devono essere aggiunti alla classe Opera, il terzo alla classe Autore. Opera -id: int -nome: String -descrizione: String -periodoStorico ~//altri attributi UML (2) - 2010/11 G. Bucci +getName(): String +getDescrizione() +getAutore() eseguita 1..* Autore -nome: String 0..* -movimentoArtistico +getNome() 43 Domanda z Perché tutto questo traffico? z Non si poteva rendere le opere visibili ad AnalisiOpera, in modo da evitare la lunga navigazione? In AnalisiOpera Opera o = null; int i= 0; while (i<opere.size() && o==null){ if (opere.get(i).getNome == nome) o= opere.get(i); } UML (2) - 2010/11 G. Bucci 44 Risposta Certamente sì! Però…. z L’applicazione risulterebbe strettamente intrecciata con il modello di dominio: l’eliminazione/aggiunta di un’opera comporterebbe l’aggiornamento di tutti gli oggetti che fanno riferimento ad essa: z Anche dell’oggetto applicazione! z E di tutte le applicazioni che intendono accedere alle opere !!! z Vogliamo che il modello possa espandersi/contrarsi senza alcun impatto sulle applicazioni UML (2) - 2010/11 G. Bucci 45 Eventualmente... z Motivi di efficienza possono suggerire l’aggiunta di associazioni non strettamente necessarie Attenzione: Non sono la stessa cosa z Mettiamo in Museo il metodo getOpere() che restituisce all’applicazione la collection opere UML (2) - 2010/11 G. Bucci 46 Confronto con le Basi dati z z Le tabelle sono visibili dall’applicazione ma solo come nomi La gestione è affidata al DBMS; l’accesso è via SQL Applicazione D B M S Vogliamo riportarci a una situazione analoga Î Museo deve fare da “contenitore” degli oggetti del modello e provvedere l’interfaccia per accedervi UML (2) - 2010/11 G. Bucci 47 ..Cosa vogliamo Museo Applicazione z z La classe Museo provvede l’interfaccia tra il modello di dominio e l’esterno. Essa costituisce una sorta di contenitore La logica dell’applicazione sta all’esterno e si riferisce al museo per raggiungere gli oggetti del modello z Forse parte della logica applicativa poteva anche essere parzialmente embedded nel Museo (e nelle altre classi del modello) UML (2) - 2010/11 G. Bucci 48 ..Commenti z E’ meglio avere la logica applicativa esterna o dentro il modello? z z Dipende dal contesto ma la logica esterna consente un minor accoppiamento e maggior coesione Se la logica è esterna, quante classi applicative conviene avere? Una sola omnicomprensiva ? z Una per funzionalità? z z Approfondiremo più avanti questo aspetto UML (2) - 2010/11 G. Bucci 49 Contenuto Analisi e Modellazione z Il pattern Singleton (en passant) z Stereotipi per l’analisi z Il pattern MVC z z z Il pattern Observer Una metodologia di Analisi-ProgettoSviluppo z (Anticipo ulteriori concetti UML) UML (2) - 2010/11 G. Bucci 50 Motivo z E’ bene che Museo venga istanziato una sola volta z z Probabilmente anche AnalisiOpera deve essere presente in un solo esemplare Come si fa a garantire che venga istanziato un solo oggetto di una data classe? col Pattern Singleton !!! UML (2) - 2010/11 G. Bucci 51 Singleton Garantisce che di una classe non possa essere istanziato più di un oggetto Come: z ¾ ¾ Rendere impossible l'uso del costrutto new da parte del programma utente (nascondere il costruttore) Fornire un metodo indiretto per ottenere una istanza (l'unica) della classe. Ovvero: z z Dichiarare privato il costruttore Prevedere un metodo pubblico statico (di classe) che: z z UML (2) - 2010/11 istanzia un esemplare se l’esemplare non è già istanziato restituisce l'oggetto già istanziato nel caso contrario G. Bucci 52 ..Singleton public class Singleton { private static Singleton instance = null private static String nome= "XX"; // prevediamo un nome public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } private Singleton() { //costruttore privato !!} public String getNome(){ //restituisce il nome return nome; } } UML (2) - 2010/11 G. Bucci 53 .. Singleton Nel chiamante: Singleton soloLui; :::: soloLui = Singleton.getInstance(); Definizione Il pattern Singleton garantisce che ci sia una sola istanza di una data classe e fornisce un punto di accesso globale a tale istanza. UML (2) - 2010/11 G. Bucci 54 Contenuto Analisi e Modellazione z Il pattern Singleton (en passant) z Stereotipi per l’analisi z Il pattern MVC z z z Il pattern Observer Una metodologia di Analisi-ProgettoSviluppo z (Anticipo ulteriori concetti UML) UML (2) - 2010/11 G. Bucci 55 Tre stereotipi per l’analisi z Entity: classi di oggetti che rappresentano la semantica del dominio applicativo z Boundary: classi di oggetti che rappresentano l’interfaccia tra gli attori e il sistema (il modello applicativo e il resto) z Controller: classi di oggetti che determinano il modo in cui l’applicazione risponde agli input degli attori: Robustness diagram di Unified Process UML (2) - 2010/11 G. Bucci 56 Boundary Control Entity UML (2) - 2010/11 G. Bucci 57 Estrema sintesi z Qualunque sistema è schematizzabile in questomodo INTERFACCIA U. UML (2) - 2010/11 FUNZIONALITA’ G. Bucci MODELLO DEL DOMINIO 58 ..segue z Qualunque sistema è composto da questi ingredienti Analisi Opera Calcola Saldo di XX Cerca Fattura del gg/mm/aa Calcola Totale Crediti ….. UML (2) - 2010/11 G. Bucci Museo Opera Conto Corrente Cliente Libro Fattura …….. 59 ..ma anche z Qualunque sistema è composto da questi ingredienti Driver Dispositivo UML (2) - 2010/11 Controllore Temperatura Pressione Temperatura Controllore Velocità Altezza Controllore Frenata Questo può essere un vero modello matematico G. Bucci 60 ..Un vero modello! z Un modello fatto di equazioni! Sensore di livello a Firenze Interruz. UML (2) - 2010/11 Driver Controllore livello Livello Modello piena Calcola livello a 3 ore a Empoli G. Bucci 61 Dinamica (semplificata) UML (2) - 2010/11 G. Bucci 62 Contenuto Analisi e Modellazione z Il pattern Singleton (en passant) z Stereotipi per l’analisi z Il pattern MVC z z z Il pattern Observer Una metodologia di Analisi-ProgettoSviluppo z (Anticipo ulteriori concetti UML) UML (2) - 2010/11 G. Bucci 63 MVC Model-View-Controller Model: Oggetto applicativo (classi entity) z View: Presentazione (viste)/lettura z ingressi (classi boundary) z Controller: Determina il comportamento del modello e della presentazione (classi control) Controller View Model UML (2) - 2010/11 G. Bucci 64 Viste differenti UML (2) - 2010/11 G. Bucci 65 Controller Comandi cambiam. stato Definisce il comportamento del modello zMappa le azioni dell’utente in richieste di aggiornamento dello stato del modello zSeleziona la vista per le risposte z(Un controllore per funzionalità) z Selezione vista Model Incapsula lo stato dell’applicazione zSegnala i cambiamenti (di stato) a View z Input utente Rich. stato Segnalazione cambiamenti Invocazione metodi UML (2) - 2010/11 Eventi View Mostra il modello (i dati nel modello) zRichiede lo stato al modello (aggiornamento) zTrasmette al controllore gli input dell’utente zConsente al controllore di selezionare differenti viste z G. Bucci 66 MVC E’ esso pure un Pattern di progettazione (di livello molto alto) z Disaccoppia le tre categorie di oggetti z z z Evita i grovigli Tra View e Model c’è un protocollo publish/subscribe: il modello che subisce un cambiamento (di stato) informa le viste ad esso relative; queste hanno la possibilità di aggiornarsi z Più viste per uno stesso modello UML (2) - 2010/11 G. Bucci 67 Dinamica (forma classica) (Boundary) UML (2) - 2010/11 (Control) G. Bucci (Model) 68 Pattern Observer Il Modello e la Vista implementano il pattern publish & subscribe detto anche observer z Il pattern assume che l’oggetto (Subject o Observable) che contiene i dati sia separato rispetto agli oggetti (Observer) che presentano i dati z Gli observer osservano i cambiamenti nel subject z UML (2) - 2010/11 G. Bucci 69 Pattern Observer UML (2) - 2010/11 G. Bucci 70 Il Pattern Observer z Definisce una relazione uno a molti tra oggetti, in modo che se un oggetto cambia il suo stato gli oggetti da esso dipendenti vengono avvisati automaticamente UML (2) - 2010/11 G. Bucci 71 Modello UML UML (2) - 2010/11 G. Bucci 72 Messa in moto 1. 2. 3. 4. 5. Istanziazione soggetto (concreto) Istanziazione osservatore (concreto) Registrazione dell’osservatore sul soggetto Passaggio del soggetto all’osservatore Eventuale ripetizione dei passi 2-4 UML (2) - 2010/11 G. Bucci 73 Dettaglio UML (2) - 2010/11 G. Bucci 74 Dinamica UML (2) - 2010/11 G. Bucci 75 Interfaccia osservatore UML (2) - 2010/11 G. Bucci 76 Sogetto public abstract class Soggetto { protected int stato; protected ArrayList<Osservatore> osservatori; public void registraOsservatore(Osservatore o) { osservatori.add(o); } public void rimuoviOsservatore(Osservatore o) { int i = osservatori.indexOf(o); if (i>=0) osservatori.remove(i); } protected void informaOsservatori() { for (int i=0; i<osservatori.size(); i++){ Osservatore o = osservatori.get(i); o.aggiorna(); }} public abstract void setStato(int s); public abstract int getStato(); } UML (2) - 2010/11 G. Bucci 77 Sogetto public abstract class Soggetto { protected int stato; protected ArrayList<Osservatore> osservatori; public void registraOsservatore(Osservatore o) { osservatori.add(o); } public void rimuoviOsservatore(Osservatore o) { int i = osservatori.indexOf(o); if (i>=0) osservatori.remove(i); } protected void informaOsservatori() { for (int i=0; i<osservatori.size(); i++){ Osservatore o = osservatori.get(i); o.aggiorna(); }} public abstract void setStato(int s); public abstract int getStato(); } UML (2) - 2010/11 G. Bucci 78 Soggetto concreto public class SoggettoConcreto extends Soggetto{ public SoggettoConcreto(){ osservatori = new ArrayList<Osservatore>(); stato = 0; } public void setStato(int s) { stato= s; System.out.println("Sono il soggetto (concreto). " +"Ho subito una variazione di stato.); this.informaOsservatori(); } public int getStato() { return stato; } UML (2) - 2010/11 G. Bucci 79 Osservatore Concreto UML (2) - 2010/11 G. Bucci 80 Stimolatore UML (2) - 2010/11 G. Bucci 81 Supporto java.util Osservatore: z Deve implementare l’interfaccia Observer z L’interfaccia ha il solo metodo update(Observable obj, Object arg) z chiamato quando l’oggetto osservato cambia z I due parametri individuano l’oggetto che è cambiato e gli argomenti passati all’observer UML (2) - 2010/11 G. Bucci 82 Lo schema semplificato Invece di un update della vista iniziale potrebbe essere l’apertura di una nuova vista UML (2) - 2010/11 G. Bucci 83 Contenuto Analisi e Modellazione z Il pattern Singleton (en passant) z Stereotipi per l’analisi z Il pattern MVC z z z Il pattern Observer Una metodologia di Analisi-ProgettoSviluppo z (Anticipo ulteriori concetti UML) UML (2) - 2010/11 G. Bucci 84 Una metodologia per l’analisi, la progettazione e lo sviluppo di sistemi software (ICONIX) UML (2) - 2010/11 G. Bucci 85 Passi del metodo 1. Analisi dei requisiti z z z z 2. z Analisi di robustezza Rifinitura casi d’uso e modello di dominio Progetto dettagliato z z 4. il “Cosa” Analisi/Progetto preliminare z 3. Specifica dei requisiti funzionali Modello di dominio (preliminare) Analisi dei casi d’uso Validazione requisiti Ù casi d’uso Diagrammi di sequenza il “Come” Assegnazione responsabilità alle classi Realizzazione UML (2) - 2010/11 G. Bucci 86 Specifica Requisiti z z [R2] Il sistema deve permettere in qualunque momento la modifica o l'eventuale eliminazione di ogni singola escursione. Si assume di trascurare le implicazioni e gli effetti indotti da una modifica o da una cancellazione, nel senso che non si producono avvisi per le persone registrate, non si calcolano gli eventuali rimborsi da effettuare, ecc.. [R3] Il sistema deve permettere di registrare un partecipante ad una data escursione, consentendo, nel caso siano previsti, la scelta di eventuali optional; deve calcolare il costo dell'escursione comprensivo degli optional. UML (2) - 2010/11 G. Bucci 87 Modello di dominio UML (2) - 2010/11 G. Bucci 88 Un Caso d’uso UML (2) - 2010/11 G. Bucci 89 RequisitiÙCasi d’uso R1 R2 R3 CU1 CU2 CU3 CU4 R4 R5 X X X X X X Verificare che tutti i requisiti funzionali siano “coperti” almeno da un caso d’uso UML (2) - 2010/11 G. Bucci 90 Riempire il fossato (tra cosa e come) COME COSA Robustness Analysis UML (2) - 2010/11 G. Bucci 91 Analisi/Progetto preliminare z L’analisi di robustezza può determinare Una revisione dei casi d’uso z Il perfezionamento del modello di dominio z z Lo scopo è identificare le funzioni (stereotipi controllori) UML (2) - 2010/11 G. Bucci 92 Progetto dettagliato: Diagramma di sequenza UML (2) - 2010/11 G. Bucci 93 ….Progetto dettagliato Identificare tutte le classi e attribuire loro le responsabilità => classi completamente definite Introdurre eventuali pattern progettuali Ricorrere a Frameworks e/o Librerie di componenti (Possono avere un impatto non trascurabile ) I precedenti due punti possono portare a rivedere quanto elaborato (nuove classi, ulteriori interazioni) UML (2) - 2010/11 G. Bucci 94 Esempio: Progetto dettagliato/sviluppo Questo sia un risultato dell’analisi dei casi d’uso Stabiliamo di usare le Swing di Java per realizzare l’interfaccia => Occorre adattarsi alle convenzioni delle Swing UML (2) - 2010/11 G. Bucci 95 Esempio: Progetto dettagliato/sviluppo Costruisce il bottone Nella parte che costruisce la finestra “Menu”: JButton rBtn = new JButton("Registrazione"); rBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { RDlg rDialog = new RDlg(“Registrazione partecipanti”); } Aggiunge un ascoltatore Al verificarsi dell’evento }); UML (2) - 2010/11 (un osservatore, ovvero un viene istanziata la finestra controllore) dell’evento “Registrazione partecipanti” ActionEvent (sul bottone) G. Bucci 96 Negli esercizi di esame Come è stato fatto fino ad ora z Si simulano Attori e Viste con un programma (una o più classi), chiamando direttamente i metodi delle classi di controllo e presentando i risultati sulla console del sistema (di Eclipse) z Ovviamente non c’è da fare il controllo degli eventi (a meno che non sia espressamente richiesto) perché si assume che il simulatore generi solo eventi ammessi UML (2) - 2010/11 G. Bucci 97 ..negli esercizi di esame z Fare il diagramma che corrisponde alla precedente UML (2) - 2010/11 G. Bucci 98 ..negli esercizi di esame UML (2) - 2010/11 G. Bucci 99 FINE z Non è detto che nel futuro non venga richiesto di fare qualche boundary usando le swing. UML (2) - 2010/11 G. Bucci 100