MokaByte Numero  43  - Luglio Agosto 2000
Deployment View
Decomposizione in nodi
dell’architettura hardware
del sistema
di 
Luca Vetti Tagliati
Proiezione hardware dell’architettura fisica di un sistema: la Deployment View dello Unified Modeling Language

Con il presente articolo si conclude l’analisi delle viste dello Unfied Modeling Language dedicate allo studio dell’architettura fisica dei sistema. In particolare, si focalizza l’attenzione sull’aspetto Hardware: ossia su come i componenti SW vengono dislocati nei vari nodi di cui si compone il sistema. Tale proiezione nello UML è affidata alla deployment view, costituita dagli omonimi diagrammi

Introduzione
Nell’articolo precedente sono stati illustrati gli strumenti messi a disposizione dallo Unified Modeling Language per modellare la proiezione software della architetturra fisica di un sistema. In particolare è stata introdotta la component view, e si è visto come essa sia interamente costituita dagli omonimi diagrammi, nei quali l’elemento base, intorno al quale ruota l’intera vista, è il componente. Nel presente articolo si focalizza l’attenzione sulla proiezione Hw dell’architettura fisica di un sistema fornita dalla deployment view, in cui, in modo del tutto analogo alla component view, l’elemento base è costituito dai nodi: elementi che esistono nel mondo reale (in questo caso nel senso etimologico del termine) e rappresentano risorse computazionali, aventi almeno funzione di memorizzazione e tipicamente anche capacitá elaborative. I nodi rappresentano i processori o i dispositivi in cui vengono allocati i componenti per poter essere eseguiti e la relativa sommatoria, corredata da opportuni collegamenti, costituisce l’ambiente Hw nel quale il sistema viene eseguito.
La Deployment View presenta molte analogie con la Componet View, ed il rapporto che intercorre tra componenti e nodi è che, mentre i componenti permettono di raggruppare le entità scaturite dall’analisi logica del sistema (classi, interfacce, …) i nodi rappresentano i dispositivi dove tali componenti vengono allocati e tipicamente eseguiti.
Stabilire un ordine cronologico nell’uso delle viste dello UML è spesso molto immediato ed intuitivo: si parte dalla Use Case View, si prosegue con la Design, poi la Component e così via. Nelle situazioni reali tale processo non è mai diretto: raramente si riesce a completare in modo esaustivo ciascuna vista attraverso una sola esecuzione del processo; normalmente si procede con uno sviluppo di tipo itereativo. Durante lo studio delle viste successive, o a seguito di feed del cliente, spesso emergono lacune che generano la necessità di apportare delle modifiche progettuali e quindi di eseguire una nuova iterazione dell’intero processo o di parte di esso. Di ciò non bisogna preoccuparsi troppo finché tali lacune restano limitate. Comunque, nell’iter del processo di progettazione di un sistema, la Physical View non occupa una posizione ben determinata e precisa: spesso è la base di partenza, o perché la topologia hardware è già predisposta dal cliente e o perché si tratta di una configurazione “classica”, mentre altre volte e la logica conseguenza di quanto prodotto nelle viste precedenti.
Per dirla tutta, nella pratica, la progettazione della vista implementativa (component e physical view) non è quasi mai un’attività affidata completamente al personale tecnico o comunque è sempre fortemente vincolata da fattori di carattere commerciale; ogni azienda informatica dispone di propri prodotti, o di canali preferenziali con determinati vendors, oppure, più semplicemente, dispone di un elevato skill in una precisa suite di prodotti e quindi, nel proporre una soluzione al cliente, tende a usare tali prodotti, anche magari quando non risultano essere l’ideale : può capitare di veder installato un costosissimo DBMS manager solo per gestire 1 o due tabelle! 
Pertanto, in tale ottica, l’architettura fisica rappresenta, il più delle volte, il riproponimento di soluzioni ampiamente sperimentate ed affinate con l’eperienza maturata presso e a spese dei vari clienti. 
Comunque, così come sono presenti una serie di pattern per la design view, esiste anche tutta una serie di physical pattern utilizzabili per la vista fisica del sistema.
 
 
 

Diagrammi di “dispiegamento”.
I deployment diagram, come i component, sono utilizzati per modellare gli aspetti fisici di un sistema orientato agli oggetti; mentre però i component diagram focalizzano l’attenzione sulla decomposizione in moduli del sistema Sw, i deployment mostrano la configurazione, a tempo di esecuzione, dei nodi hw e dei componenti che risiedono su di essi.
Si tratta di particolari diagrammi delle classi che focalizzano la loro attenzione sui nodi del sistema.
Pertanto, corredati da opportune informazioni, i nodi costituiscono la vista statica (non potrebbe essere altrimenti) della configurazione del dispiegamento del sistema software sui dispositivi hw che lo formano.
 
 
 

Nodi
Un nodo é un elemento fisico e rappresenta una risorsa computazionale, tipicamente fornita almeno di funzione di memorizzazione e spesso di capacità elaborative.
Graficamente viene rappresentato per mezzo di un cubo o parallelepipedo; nulla vieta, anzi è auspicabile ricorrere ad opportuni stereotipi (nomali PC, chioschi, smart card, ecc.) al fine di fornuire una più adeguata e suggestiva rappresentazione dell’elemento che si vuole descrivere. Molto probabilmente i nodi sono gli elementi dello UML che meglio si prestano al concetto di stereotipizzazione, e che possiedono il più vasto repertorio di icone utilizzabili: touch screen, smart card, java rings, desk top, lap top, fax, telefoni cellulari, telecamere, modem, e così via.
Come al solito, ogni nodo deve essere corredato da un nome univoco che ne consenta il riconoscimento e l’individuazione all’interno dei vari diagrammi. Tale nome può essere semplice o corredato dal percorso (il famoso path name), ossia il prefisso l’eventuale package di appartenenza. Le regole per la composizione del nome sono quelle più volte menzionate negli articoli articoli precedenti.
Tipicamente del nodo viene fornito unicamente il nome, ma, così come avviene per le classi, nulla vieta di aggiungervi tag value e/o sezioni supplementari al fine di fornire maggiori dettagli (Figura 1). Chiaramente è sempre opportuno inserire le informazioni ritenute utili, mentre bisogna evitare tutti quei dati che, come tali, non aumentano il contenuto informativo e, paradossalmente, rendono il diagramma più pensante e meno leggibile.
 


Figura 1. Esempi di nodi.


 

Già da questi prime informazioni si può evincere una stretta somiglianza tra i nodi e i componenti: in particolare entrambi possono:

  • partecipare a relazioni di dipendenza, generalizzazione, associazione;
  • essere annidati;
  • possedere delle istanze;
  • partecipare ad interazioni, e cosi’ via.


Ciononostante, esistono delle importanti differenziazioni che vale la pena evidenziare:

  • i componenti partecipano all’esecuzione del sistema; i nodi eseguono i componenti;
  • i componeti rappresentano il raggruppamento di entita’ scaturite nel processo di analisi logica del sistema; i nodi rappresentano il dispiegamento fisico dei componenti;
Le classi scaturite dal processo di disegno del sistema, confluiscono in uno più componenti allocati, a tempo di esecuzione, su uno o più nodi.
Volendo è possibile evidenziare il rapporto che esiste tra nodi e componenti attraverso il ricorso a relazioni di dipendenza, come illustrato in figura 2, ossia: un nodo dipende dai processi che vi sono allocati.
 


Figura 2. Relazione di dipendenza tra nodi e componenti.


 

Per esigenze grafiche, si preferisce evitare rappresentazioni come quelle in figura in quanto generano grafici eccessivamente estesi e decisamente poco leggibili; è preferibile evidenziare i componenti allocati su un nodo semplicemente scrivendone il nome in un’opportuna sezione come illustrato in figuira 1.
L’insieme degli oggetti o componenti che sono allocati insieme in un nodo vengono detti distribution unit (unità di distribuzione).
Dacché un deployment digram non è altro che una particolare “specializzazione” del diagramma delle classi focalizzata sul concetto di nodo, esistono tutta una serie di analogie tra i nodi e classi; si può notare che anche per i nodi è possibile specificare degli attributi come per esempio il tipo di microprocessore, la frequenza di funzionamento, la capacità della memoria ecc., e, cosa del tutto inaspettata (e non sempre utile), è possibile specificare funzioni come turnOn, turnOff, suspend, ecc. ecc. Ancora, anche i nodi possono essere raggruppati in package ed è possibile associarli tra di essi per mezzo delle relazioni di dipendenza, associazione, e così via. Poiché i nodi sono molto simili alle classi è possibile utilizzare tutte le features previste per le relative relazioni: roles, cardinalità, vincoli ecc.
La relazione più utilizzata per collegare tra loro i nodi è sicuramente l’associazione che, in questo contesto, rappresenta una connessione fisica tra dispositivi hw.
Nella figura presente viene proposta la deployment view di un comune supermercato che offre, ai propri clienti,la possibilità di poter effettuare la spesa via Internet, stando comodamente seduti nella propria poltrona di casa. 
 


Figura 3. Esempio di deployment diagram di un supermercato che consente di fare la spese via Internet.


 
 

Processori e dispositivi
In genere, in prima analisi, i nodi vengono suddivisi in due grandi categorie:

  1. i processori (processors), ossia nodi con capaictà elaborative e quindi in grado di eseguire componenti;
  2. i dispositivi (device), ossia nodi che non dispongono di capacità elaborative e, in generale, rappresentano elementi che vengono utilizzati come interfacce del mondo reale.


Nella stragrande maggioranza dei casi nella proiezione Hw della struttura fisica di un sistema si incontrano processors (Pc client, server, ecc. ecc.); mentre più raramente si trovano esempi di device. Nel diagramma di fiugra 3 sono presenti dicersi device, quali il “BarCode Scanner” e il “registratore di cassa”. 
 


Figura 4. Esempio di figura 3 realizzato utilizando opportuni stereotipi. 


Nel diagramma in figura 4 è illustarta una versione del diagramma di figura 3. La variante consiste nell’utilizzo di opportuni stereotipi. Come si può ben notare il diagramma assume un aspetto decisamente più intuitivo ed accattivante. Per la precisione, il bar code scanner illustrato in figura non è esattamente quello utilizzato nelle casse dei supermercati: si tratta di uno scanner molto sofisticato equipaggiato di un vero PC, e come tale appartiene alla categoria dei processors. Quello invece installato normalmente nelle comuni casse svolge unicamente funzione di acquisizione del codice e quindi è un povero device.
Inoltre, si è deciso di impostare esplicitamente le cardinalità nelle relazioni di associazione al fine di fornire una amigliore rappresentazione della configurazione HW del sistema.
 
 
 

I componenti nei deployment diagram
Modellando la proiezione Hw dell’architettura fisica di un sistema, risulta molto utile, ma non obbligatorio, evidenziare la distribuzione dei componenti sui nodi che costituiscono il sistema.
La relativa rappresentazione grafica può essere effettuata o per mezzo di esplicite relazioni di dipendenza tra i nodi ed i componenti ivi allocati, o, più semplicemente, inserendo un apposito compartimento nella rappresentazione grafica del nodo (come peraltro già fatto in precedenza). 
Una variante molto apprezzata è l’implementation diagram ottenuto dalla fusione del component e del deployment diagram come riportato nella figura seguente. Il vantaggio, nei sitemi di dimensioni contenute, è di avere un’immediata visione e comprensione del sistema nel suo globale. Chiaramente questo risultato è ottenibile quando il numero dei nodi e dei componenti è contenuto, altrimenti si corre il rischio di ottenere l’esito opposto: i digrammi tendono ad aumentare vertiginosamente determinando grossi problemi in fase di visualizzazione e stampa.
Ovviamente non è sempre necessario e auspicabile tentare di catturare tutti i dettagli di una vista in un solo diagramma!
 
 
 

Conclusioni
Il presente articolo è stato dedicato alla illustrazione dei Deployment diagram: una delle due tipologie di diagrammi previste dallo UML per modellare la proiezione fisica di un sistema orientato agli oggetti. In particolare nel deployment diagram viene focalizzata l’attenzione sull’aspetto Hw: attraverso il suo utilizzo è possibile rappresentare la vista statica di dispiegamento di un sistema. Tipicamente si tratta di modellare la topologia del hardware necessario per eseguire il sistema. Gli elementi fondamentali di questa vista sono i nodi; ossia elementi fisici che esistono nel mondo reale e rappresentano risorse computazionali, tipicamente fornite almeno di funzione di memorizzazione (device) e spesso di capacità elaborative (processori). Come nel caso dei component diagram, i deployment diagram sono essenzialmente dei class diagrams che focalizzano l’attenzione sui nodi fisici che costituiscono il sistema.
Chiramente se il sistema oggetto di studio è un applicativo destinato a funzionare su un computer senza grosse necessità di connessione con dispositivi diversi da quelli standard, la realizzazione di un deployment diagram risulta del tutto inutile. Se invece (caso tipico), il sistema è distribuito, quindi le varie componenti vengono allocate su su diversi nodi allora il deployment diagram è decisamente un utile mapping tra le componenti software e i relativi nodi di allocazione.
Come al solito nella pratica la progettazione della deployment view è fortemente vincolata da accordi di carattere commerciali tra la propria società ed i vari vendors, e comunque si tende a riproporre architetture ampiamente sperimentate e migliorate con l’esperienza maturata presso i clienti.
 
 
 

Bibliografia

[1] The Unified Modeling Language User Guide
Grady Booch, James Rumbaugh, Ivar Jacobson, Addison Wesley
Questo libro vanta il primato di essere stato scritto dai progettisti originali del linguaggio, sebbene sia conosciuto come “Grady’s book”, dal nome del suo primo autore. La mancanza di una sua copia (magari autografata!) può generare giudizi di scarsa professionalità per coloro che operano nel settore della progettazione O.O... Ciò però, costituisce una condizione necessaria, ma non sufficiente, in quanto bisogna, assolutamente, aggiungere una copia del [3] e una del [4]. Sono soldi spesi bene! Forse, il limite del libro, se proprio se ne vuole trovare uno, è quello di essere poco accessibile ad un pubblico non espertissimo di progettazione O.O. Un altro piccolo inconveniente è che, probabilmente, taluni esempi possano sembrare di carattere accademico: poco rispondenti alle problematiche del mondo reale.

[2] UML Toolkit
Hans-Erik Eriksson, Magnus Penker, Wiley
Questo libro si fa particolarmente apprezzare per via del taglio pratico dello stesso. Illustra in modo semplice il linguaggio, attraverso numerosi esempi, limitando le digressioni di carattere teorico. Si suppone infatti, che coloro che si occupano di progettazione O.O. abbiano una certa familiarità con i relativi concetti. Chissà perché si ha la sensazione che non sia sempre così! Naturalmente, studiare libri che illustrano gli aspetti teorici dell’informatica, è sempre qualcosa più che auspicabile. È altresì vero però, che coloro che non hanno tempo da perdere, per la lettura di concetti arcinoti, gradiscono arrivare rapidamente al nocciolo. Ciò spesso equivale a strappare alle nottate lavorative ore preziose per il sonno.

[3] The Unified Modeling Language Reference Manual
Grady Booch, James Rumbaugh, Ivar Jacobson, Addison Wesley
Il commento da riportare per questo libro, noto per come “Rumbaugh’s book”, è sostanzialmente equivalente a quanto riportato per il primo. Esso però offre un livello di difficoltà decisamente inferiore, e pertanto dovrebbe essere più accessibile. Come suggerisce il nome, si tratta di un manuale, per cui ne rispetta la tipica struttura.

[4] Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch, Addison Wesley.
Si tratta di un ottimo libro che bisogna assolutamente avere se si vuole lavorare nell’ambito della progettazione O.O. . I “pattern” riportati, forniscono un ottimo ausilio al processo di disegno del software. L’utilizzo del libro contribuisce ad aumentare la produttività, fornisce soluzioni chiare, efficienti e molto eleganti. La fase di disegno del software, spesso, si riduce ad individuare e personalizzare i “pattern” che risolvono la problematica specifica. Si è di fronte ad una nuova frontiera della progettazione O.O.: il riutilizzo di parti del progetto. L’unica pecca imputabile, è che i vari diagrammi non sempre rispettano il formalismo UML.

[5] www.omg.org
Si tratta del sito ufficiale del Object Managment Group.

[6] www.mokabyte.it, numero 34 (Ottobre 1999)
UML e lo sviluppo del software.

[7] www.mokabyte.it, numero 35 (Novembre 1999)
Use Case: l’analisi dei requisiti secondo l’U.M.L.

[8] www.mokabyte.it, numero 36 (Dicembre 1999)
Diagrammi delle classi e degli oggetti: proiezione statica della Design View.

[9] www.mokabyte.it, numero 37 (Gennaio 2000)
Proiezione statica della “Design View” parte seconda: esempi “celebri” di diagrammi delle classi..

[10] www.mokabyte.it, numero 38 (Febbraio 2000)
Proiezione dinamica della “Design View” prima parte diagrammi di interazione.

[11] www.mokabyte.it, numero 39 (Marzo 2000)
Proiezione dinamica della “Design View” seconda parte: state chart diagra,.

[12] www.mokabyte.it, numero 40 (Aprile 2000)
Proiezione dinamica della “Design View”; terza ed ultima parte: activity diagram

[13] www.mokabyte.it, numero 41 (Maggio 2000)
Component View: decomposizione in moduli dell’architettura software del sistema.

Chi volesse mettersi in contatto con la redazione può farlo scrivendo a mokainfo@mokabyte.it