Marco Faella Il paradigma Model-View-Controller. Il pattern Strategy.



Documenti analoghi
Alcuni Design Pattern in Java

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

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

Programmi e Oggetti Software

SWIM v2 Design Document

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

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

Elementi di UML (7): Diagrammi dei componenti e di deployment

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

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Concetti di base di ingegneria del software

Soluzione dell esercizio del 12 Febbraio 2004

Implementazione di MVC. Gabriele Pellegrinetti

Strumenti di modellazione. Gabriella Trucco

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

Programmazione a Oggetti Modulo B

Laboratorio di Basi di Dati

Funzioni in C. Violetta Lonati

7. Architetture Software

Diagrammi di Interazione

Introduzione alla programmazione in C

Studente: SANTORO MC. Matricola : 528

Specifiche Tecnico-Funzionali

Object Oriented Programming

Registratori di Cassa

sito web sito Internet

Esercizi di JavaScript

Programmazione Orientata agli Oggetti in Linguaggio Java

Generazione Automatica di Asserzioni da Modelli di Specifica

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

Costruzione del layout in gino cms

SCENARIO. Personas ALICE Lucchin / BENITO Condemi de Felice. All rights reserved.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Plate Locator Riconoscimento Automatico di Targhe

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

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

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Corso di Informatica

Configurazione di Outlook Express

Guida Compilazione Piani di Studio on-line

Corso di Informatica

PowerPoint 2007 Le funzioni

Soluzione dell esercizio del 2 Febbraio 2004

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

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

Progettazione di un Database

Progettazione Web Applicazioni client-server

Progettaz. e sviluppo Data Base

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

Concetto di Funzione e Procedura METODI in Java

Olga Scotti. Basi di Informatica. Excel

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Gestione Risorse Umane Web

Adobe Flash CS5.5 e Web Animation. Lezione 7: introduzione ad ActionScript 3.0, livelli guida, realizzazione di un player audio in streaming

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

Programmazione in Java Parte I: Fondamenti

Nozione di algoritmo. Gabriella Trucco


Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

Programmazione Java: Interfacce grafiche (GUI)

DESCRIZIONE: Microsoft Office 2002 XP Corso Completo (Patente 60 giorni)

SOFTWARE A SUPPORTO DELLA GESTIONE AMMINISTRATIVA DELLO SPORTELLO UNICO SPECIFICA DEI REQUISITI UTENTE

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

Android. Implementare una interfaccia utente

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

Prova di Laboratorio di Programmazione

Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto:

Le variabili. Olga Scotti

Il sistema C.R.M. / E.R.M.

Architettura MVC-2: i JavaBeans

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Progettazione : Design Pattern Creazionali

Analisi e sviluppo di un portale di e-commerce

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

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

UML Diagrammi delle classi. UML Diagramma classi 1

Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento.

Le presenti note vengono rilasciate per presentare le principali novità della release 2010 Sp1 di Contact Pro.

Architettura MVC-2 A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

Università degli Studi di Messina

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

SOMMARIO... 3 INTRODUZIONE...

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Il calendario di Windows Vista

Guida all accesso al portale e ai servizi self service

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

1. Indice Uno shop pronto alla vendita in pochi passaggi Registrazione Il suo assistente di installazione...

Scenari esemplificativi di utilizzo delle Mailing List

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

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

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Esercitazione di Basi di Dati

Sviluppo di applicazioni web con il pattern Model-View-Controller. Gabriele Pellegrinetti

Introduzione all Information Retrieval

Transcript:

Marco Faella Il paradigma Model-View-Controller. Il pattern Strategy. 10 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com A.A. 2009-2010

Il paradigma Model-View-Controller Il paradigma MVC consiste nel distinguere, all'interno di un sistema informatico, tre tipologie di componenti: quelle che rappresentano i dati in oggetto (Model), quelle che si occupano di presentare i dati all'utente (View) e quelle che si occupano dell'interazione con l'utente (Controller) Si tratta di un pattern architetturale, cioè di uno schema di progettazione di alto livello Tale paradigma trova la sua applicazione principale nei programmi con interfaccia grafica (GUI) e nei sistemi con interfaccia web Il paradigma detta la distinzione di responsabilità tra le tre categorie e il flusso di informazioni tra di esse E' stato proposto ufficialmente in un articolo del 1988 da Glenn Krasner e Stephen Pope ( A cookbook for using the model-view controller user interface paradigm in Smalltalk-80 )

Il paradigma Model-View-Controller Il modello rappresenta i dati in sé, indipendentemente dal modo in cui questi saranno visualizzati Il modello non deve dipendere né dalle viste né dai controller con cui interagirà Tuttavia, il modello deve offrire le seguenti funzionalità: per le viste, deve offrire metodi che espongano i dati in sola lettura per i controller, deve offrire metodi che permettano di modificare i dati in risposta a delle richieste dell'utente infine, in caso di cambiamento dei dati, deve avvisare le viste, affinché queste possano rispecchiare il cambiamento quest'ultima funzionalità viene tipicamente realizzata seguendo il pattern OBSERVER, oggetto della lezione precedente

Esempio: un editor HTML Consideriamo l'esempio di un editor di pagine HTML Il modello è rappresentato dai caratteri che compongono la pagina classe HtmlPage Possiamo immaginare diverse viste dei dati una vista carattere per carattere classe HtmlRawView una vista WYSIWYG (what you see is what you get) classe HtmlRenderedView Controller: l'observer che riceve gli eventi dall'utente e produce modifiche sul modello classe InsertListener Figura 1: Diagramma di sequenza UML dell'interazione tra controller, modello e vista. La figura a destra mostra il flusso di messaggi tipico del paradigma MVC Notiamo che il controller, ricevendo un evento dalla GUI, come l'inserimento di un carattere da parte dell'utente, effettua una modifica del Model

Esempio: un editor HTML

Il paradigma Model-View-Controller Quindi, il controller non dialoga direttamente con le viste Nato per le interfacce grafiche, il paradigma MVC è stato poi applicato in altri domini, come le applicazioni complesse basate sul web Molti framework per la realizzazione di applicazioni web si ispirano a MVC, ma lo hanno reinterpretato ed adattato alle loro esigenze

Il pattern STRATEGY Il pattern STRATEGY si occupa essenzialmente di quelle situazioni in cui una classe prende una procedura come argomento In un linguaggio orientato agli oggetti, questa procedura deve presentarsi sotto forma di oggetto di una apposita classe Contesto: Una classe (Context) può sfruttare diverse varianti di un algoritmo I clienti della classe vogliono fornire versioni particolari dell'algoritmo Soluzione: Definire un'interfaccia (Strategy) che rappresenti un'astrazione dell'algoritmo Per fornire una variante dell'algoritmo, un cliente costruisce un oggetto di una classe (ConcreteStrategy) che implementa l'interfaccia Strategy e lo passa alla classe Context Ogni volta che deve eseguire l'algoritmo, la classe Context invoca il corrispondente metodo dell'oggetto che concretizza la strategia

Diagramma del pattern STRATEGY La figura a destra rappresenta il diagramma delle classi UML proprio del pattern STRATEGY Come si vede, in questo caso il diagramma aggiunge ben poco alla descrizione della soluzione Il metodo dowork, il cui nome, come sempre, è puramente convenzionale, rappresenta il punto di accesso all'algoritmo Anche se non è mostrato dal diagramma, la classe Context deve avere un metodo per accettare un oggetto di tipo Strategy Figura 2: Diagramma UML del pattern STRATEGY.

Applicazione del pattern STRATEGY Abbiamo già incontrato un esempio di applicazione del pattern STRATEGY: nella scelta del layout di un componente grafico Swing/AWT Ricordiamo che per impostare la disposizione degli elementi grafici all'interno di un contenitore, si utilizza una chiamata del tipo: contentpane.setlayout(new GridLayout(2,2)); L'oggetto anonimo di tipo GridLayout rappresenta proprio la disposizione che si intende dare a questo pannello: in questo caso, una griglia di due righe e due colonne Oltre a GridLayout, la libreria standard fornisce altre classi di layout, come BoxLayout e FlowLayout BoxLayout dispone il contenuto su un'unica riga, o colonna FlowLayout dispone il contenuto su più righe, modificando dinamicamente la disposizione quando il contenitore in questione viene ridimensionato

Applicazione del pattern STRATEGY Tutte le classi di layout implementano l'interfaccia LayoutManager, i cui metodi principali sono i seguenti: Dimension minimumlayoutsize(container parent) restituisce le dimensioni minime richieste da questo layout Dimension preferredlayoutsize(container parent) restituisce le dimensioni ideali secondo questo layout void layoutcontainer(container parent) dispone gli elementi secondo questo layout A questo punto, è facile vedere che siamo in presenza di un'applicazione del pattern Strategy, come evidenziato dalla slide successiva

Applicazione del pattern STRATEGY La figura a destra mostra il rapporto tra le classi coinvolte nella scelta di un layout per un contenitore Swing/AWT La classe Container ha un metodo per impostare un layout, il cui argomento è di tipo LayoutManager la classe Container corrisponde alla classe Context del pattern L'interfaccia LayoutManager offre diversi metodi, legati alla realizzazione di un particolare layout tale interfaccia corrisponde all'interfaccia Strategy del pattern i suoi metodi sono tutti esempi del metodo dowork del pattern Figura 3: Diagramma UML relativo alla scelta di un layout per un contenitore Swing/AWT. Infine, GridLayout è un esempio di classe concreta che implementa l'interfaccia

Applicazione del pattern STRATEGY

Altra applicazione del pattern STRATEGY Esaminiamo un'altra applicazione di STRATEGY che ritroviamo nella libreria standard La classe java.util.collections contiene alcuni metodi di utilità, tra cui uno che permette di ordinare una lista di oggetti public static void sort(list l, Comparator c) Questo metodo ordina la lista l, con il mergesort, utilizzando l'oggetto di tipo Comparator per effettuare i confronti tra gli oggetti presenti nella lista Quindi, l'interfaccia Comparator ricopre il ruolo di Strategy e sort è l'algoritmo che la utilizza

Mini-progetto: studio di funzioni Proponiamo un esercizio piuttosto articolato, che permette di approfondire e mettere in pratica le nozioni apprese relativamente alle interfacce grafiche Scopo: realizzare un'applicazione per lo studio di funzioni parametriche di una variabile reale Ad esempio, parabole: a x 2 + b x + c con variabile x e parametri a, b, c L'aspetto dovrebbe essere simile alla figura a destra Figura 4: L'aspetto suggerito per l'applicazione da realizzare.

Mini-progetto: studio di funzioni Il primo pannello rappresenta il grafico della funzione in esame sul piano cartesiano Il secondo pannello presenta il valore della funzione per alcuni valori della sua incognita Il terzo pannello permette di modificare i parametri della funzione, entro un certo intervallo (ad es., da -10 a 10) Cambiando i parametri, vengono immediatamente aggiornati i primi due pannelli Figura 4: L'aspetto suggerito per l'applicazione da realizzare.

Mini-progetto: studio di funzioni Seguire il più possibile il framework MVC ed il pattern Observer In questo caso, il framework MVC si coniuga così: Model: la funzione View: il suo grafico, o una tabella di valori Controller: le classi che rispondono allo spostamento degli slider e modificano i parametri della funzione Progettare l'applicazione in modo che possa funzionare con diverse tipologie di funzioni parametriche

Mini-progetto: studio di funzioni Basare l'applicazione su un'interfaccia che rappresenta una generica funzione parametrica: public interface PFunction { // Returns the number of parameters int getnparams(); // Sets the value of the i-th parameter to val void setparam(int i, double val); // Returns the current value of the i-th parameter double getparam(int i); // Returns the name of the i-th parameter String getparamname(int i); // Returns the value of this function on the argument x double eval(double x); } Le classi che gestiscono le viste e i controller manipolano generici oggetti di tipo PFunction L'applicazione istanzia oggetti (un oggetto?) di tipo Parabola, che è una classe che implementa PFunction