MokaByte 105 - Marzo 2006
 
MokaByte 105 - Marzo 2006 Prima pagina Cerca Home Page

 

 

 

La progettazione di applicazioni web con UML
II parte –
Approfondimenti

Continuiamo l’approfondimento della Web Application Extension, l’estensione di UML per le applicazioni web

Introduzione
Nel precedente articolo abbiamo introdotto l’argomento della progettazione di applicazioni web con UML ed abbiamo iniziato ad analizzare le classi stereotipate fondamentali della Web Application Extension. In questo articolo vediamo come sia possibile modellare altri elementi tipici di una applicazione web per poi nel prossimo articolo mettere insieme tutti questi elementi e vedere come si applicano ad un caso concreto.

 

Rappresentazione di script lato client
Abbiamo già visto come sia possibile rappresentare nel modello logico del sistema una pagina client con una classe stereotipata. Una pagina client può prevedere l’utilizzo di una serie di risorse che spesso si tende a non considerare in fase di progettazione. Caso tipico è quello degli script lato client , come le funzioni Javascript, utilizzate nelle pagine HTML. Con la WAE è possibile rappresentare sia gli script contenuti nella pagina client sia l’inclusione di un file contenente un insieme di funzioni di script.
Nella figura 1 c’è una rappresentazione delle due possibilità


Figura 1 – Script lato client

La pagina client PaginaClient1 definisce due funzioni di script con un blocco di codice nella pagina client , ad esempio all’interno di un blocco<script></script> inserito nel codice HTML, mentre la pagina client PaginaClient2 include un file esterno contenente le stesse funzioni. Nel primo caso le funzioni sono rappresentate come operazioni della classe stereotipata mentre nel secondo la libreria di funzioni è rappresentata a sua volta con una classe di stereotipo <<clientscript>> . La dipendenza tra la pagina client e la libreria di funzioni ha stereotipo <<script>>.
Anche se la modellazione degli script lato client può sembrare un’attività secondaria nella fase di progettazione di una applicazione web va tenuto presente che in alcune applicazioni questi script svolgono funzioni anche importanti che vanno documentate per una migliore comprensione dell’applicazione. Chiaramente il livello di dettaglio può variare in base alla complessità delle funzioni lato client e deve essere valutato in base all’esperienza del progettista. Tenere nella giusta considerazione anche questo aspetto nella progettazione è comunque importante; in questa fase infatti si può capire quali siano le funzioni necessarie e quali quelle riutilizzabili nelle diverse pagine della propria applicazione.
Relazioni tra pagine e frameset
Un altra delle caratteristiche fondamentali di tutte le applicazioni web sono le relazioni tra le diverse pagine e la loro stessa composizione. E’ possibile avere una pagina client che contenga non solo form per l’immissione dei dati ma anche link ipertestuali ad altre pagine client. E’ essenziale rappresentare questi legami in fase di progettazione per avere una chiaro modello della struttura dell’applicazione dal punto di vista logico. Come già accennato nel precedente articolo questo legame è espresso da una associazione con stereotipo <<link>> tra due classi stereotipate <<client page>> come in Figura 2.


Figura 2 –
Link tra pagine client

Ovviamente le relazioni non esistono esclusivamente tra pagine client ma è possibile avere un link ad una pagina server ed oltre a ciò è possibile che al URL che identifica la pagina server in questione vengano accodati alcuni parametri utili all’elaborazione. Questo insieme di cose si esprime come in Figura 3.



Figura 3 – Link tra pagine client e pagine server

In figura sono evidenziati i due modi con i quali si può rappresentare un invio di parametri nella richiesta http. Nel primo caso i parametri accodati al URL sono rappresentati come constraint dell’associazione. Nel secondo caso invece sono rappresentati da una classe di associazione tra le due classi stereotipate <<client page>> e <<server page>>.
Questa rappresentazione è secondo me estremamente utile in fase di progettazione visto che il passaggio di parametri nelle richieste http fatte tramite link è uno degli aspetti generalmente trascurati in fase di progettazione. Quanto detto è valido allo stesso modo quando il link è effettuato tra due pagine JSP.
Un’altra relazione tipica a livello di pagina è quella di inclusione. E’ molto frequente nella pratica realizzare pagine statiche o dinamiche condivise tramite inclusione nelle diverse pagine dell’applicazione. L’esempio tipico è quello degli header e dei footer.
Come è intuibile questo tipo di relazione la si può esprimere con una associazione di stereotipo <<include>> come nella figura seguente.

 


Figura 4 – Inclusione di pagine client e server


In questo caso la pagina server esegue una include dinamica di un’altra pagina server ed una include statica di una pagina client.
Altro aspetto molto interessante è la possibilità di rappresentare un frameset tramite appositi stereotipi della WAE. Lo stereotipo <<frameset>> rappresenta , manco a dirlo, il fameset vero e proprio ovvero una pagina client contenitore di frame, mentre lo stereotipo <<target>> rappresenta un’area di una pagina client a cui è associato un nome.
Utilizzando le classi stereotipate <<frameset>> e <<target>> è possibile diagrammare la struttura di un frameset e dei suoi frame come in Figura 5.



Figura 5
– I frameset

In questo caso abbiamo il fameset Main che contiene due frame. Il frame di sinistra è fisso ed è il menù dell’applicazione rappresentato dalla pagina client Menu. Il frame di destra è rappresentato dal target Body all’interno del quale vengono caricate via via le pagine client associate ai vari link contenuti nel menù. Si noti appunto la presenza della classe stereotipata <<target>> per indicare la regione del frameset nella quale vengono caricate le pagine client.
I custom tag
Altro elemento ormai comunissimo nello sviluppo delle pagine server sono i custom tag, ovvero tag personalizzati il cui compito è svolto da opportune classi handler ad essi associate. L’utilizzo dei custom tag conferisce maggiore pulizia alle pagine web in quanto consente di eliminare da esse il codice, di standardizzare la scrittura delle pagine e garantisce un completo riutilizzo delle funzionalità più comunemente svolte all’interno di una pagina web.
Con la WAE è possibile rappresentare l’inclusione di una libreria di tag all’interno di una pagina server come in Figura 6.


Figura 6 – I custom tag


In questo caso è raffigurata una pagina JSP che include la libreria core della JSTL. Il ruolo della dipendenza tra la pagina JSP e la libreria di tag è il prefisso usato per la libreria all’interno della pagina.

 

Vista dinamica
Tutti i diagrammi visti fino ad ora ci hanno permesso di capire come con la WAE si possano rappresentare le strutture ed i legami tipici dei componenti di una applicazione web quali pagine client, pagine server, script e quant’altro. Tutte le rappresentazioni viste erano però di natura statica quindi nulla è stato evidenziato riguardo la vista dinamica del sistema che modella le interazioni tra i vari elementi. Per questo tipo di rappresentazione si utilizzano gli strumenti tipici di UML quali collaboration diagram e sequenze diagram dei quali se ne trova un’ottima spiegazione in [2] e sui quali non ci soffermiamo. L’unica particolarità è che in questi diagrammi saranno presenti le classi stereotipate della WAE quando si va a rappresentare una interazione tra elementi del modello web.

 

Vista logica e componenti
Nei paragrafi precedenti si è fatto riferimento a stereotipi rappresentanti pagine client e pagine server, mentre non si è fatto esplicito riferimento ad una tecnologia di implementazione. Questo perché la rappresentazione fornita è quella della vista logica del sistema nella quale ci si occupa di stabilire quali componenti del nostro sistema assolveranno ai compiti necessari. E’ chiaro che questi elementi logici saranno poi realizzati nel nostro sistema in componenti specifici della tecnologia in uso. In ambito J2EE si rappresenteranno quindi delle realizzazioni di pagine server tramite pagine JSP o servlet e di pagine client generalmente tramite pagine HTML.
A volte si tende a trascurare o sottintendere questa distinzione definendo un modello utilizzando lo stereotipo server page come sinonimo di pagina JSP e client page come sinonimo di pagina HTML. In realtà questo avviene perché quasi sempre quando ci si appresta a definire il modello logico a livello di progettazione si ha ben chiaro in mente quale sia la tecnologia utilizzata nel progetto ma a scopo di chiarezza è bene puntualizzare che lo stesso modello logico potrebbe essere implementato da componenti diversi.

 

Conclusioni
In questo articolo e nel precedente abbiamo fatto una panoramica sugli elementi della Web Application Extension di UML ideata da Jim Conallen ed abbiamo visto come sia possibile rappresentare molti degli elementi di uso ricorrente nelle applicazioni web con questa estensione. In [1] nella Appendice A è possibile trovare un riferimento completo al profilo WAE se si desidera approfondire quanto visto in questi due articoli e esaminare gli aspetti non trattati. Nel prossimo articolo vedremo come mettere insieme i concetti visti e usare la notazione vista per la progettazione in un caso reale di una semplice applicazione web.

 

Bibliografia
[1] Jim Conalen - "Applicazioni Web con UML", II edizione italiana – Pearson Education Italia, 2003
[2] Luca Vetti tagliati - " UML ed ingegneria del software: dalla teoria alla pratica ", Mokabyte, 2000
[3] Jim Arlow, Ila Neustadt – “UML e Unified Process” – McGraw Hill , 2002

 

Alfredo Larotonda, laureato in Ingegneria Elettronica, lavora da diversi anni nel settore IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo di applicazioni web J2EE. Dopo diverse esperienze di disegno e sviluppo ora si occupa in particolare di aspetti architetturali per progetti rivolti al mercato finanziario ed industriale. E’ un Enterprise Architect certificato Sun Microsystems (SCEA) ed inoltre ha conseguito le certificazioni SCJP, SCWCD 1.3, SCWCD 1.4, SCBCD.