LEZIONE x:Class Diagram - Un esempio pratico
Prendiamo come esempio una applicazione classica: quella che permette
di scrivere un documento di testo. Cerchiamo di descrivere i passi che
costituiscono tale applicazione.
Supponiamo che si stia digitando un documento di testo, utilizzando
qualche famoso editor di testi, come Microsoft Word, ad esempio.
L'utente ha due possibilità iniziali:
Cominciare a scrivere un nuovo documento
Aprire un documento esistente
Il testo da scrivere, ovviamente, verrà digitato tramite l'utilizzo della tastiera.
Ogni documento è composto di svariate pagine, e ogni pagina, a sua
volta, è composta da una testata, dal corpo del documento e da un piè
di pagina. Nella intestazione e nel piè di pagina è possibile
aggiungere la data, l'ora, il numero di pagina, la collocazione del
file, ecc.
Il corpo del documento è formato da frasi. Le frasi, a loro volta, sono
composte da parole e segni di punteggiatura. Le parole sono formate da
lettere, numeri e/o caratteri speciali. Inoltre,. Vi è la possibilità
di aggiungere delle immagini e delle tabelle nel documento. Le tabelle
sono costituite da righe e colonne ed ogni cella di una tabella può
contenere del testo o delle immagini.
Dopo aver terminato il documento, l'utente può scegliere di salvarlo o stamparlo.
Abbiamo in tal modo descritto, in maniera semplificata ma congruente,
il processo di creazione di un documento tramite Microsoft Word.
Rifacendoci a quanto già detto nella guida circa l'intervista con il
cliente, siamo in grado, allora, di estrarre la seguente lista di
parole chiave:
documento
, editor di documenti, Microsoft Word, testo
, tastiera, intestazione, piè pagina, corpo del documento, data,
ora, numero di pagina, collocazione del file, pagina, frase, parola,
segno di punteggiatura, lettera, numero, carattere speciale, immagine,
tabella, riga, colonna, cella, utente.
Potremmo dire che le parole chiave evidenziate in blu sono sicuramente
candidate a diventare classi o attributi per il modello da sviluppare.
Come è possibile osservare, nell'esempio descritto l'oggetto attorno a cui ruoto un po' tutto il discorso è il Documento. Per tale ragione, sarà una buona idea identificare nel Documento la classe centrale del nostro Class Diagram.
Un documento, come detto, può avere svariate pagine e, quindi, potremo
definire un attributo: numeroDiPagine che descrive tale caratteristica.
Invece, per le operazioni, sarà bene definire i metodi: Apri( ), Salva( ), Stampa( ),Nuovo( ).
Si è detto, poi, che ogni documento è composto di pagine. La Pagina
sarà, dunque, un buon candidato per essere una classe del nostro
diagramma.
La Classe Pagina conterrà un attributo : numeroDiPagina, che identificherà il numero della pagina dell'oggetto, e le seguenti operazioni: nuovaPagina(), nascondiIntestazione() e nascondiPièdiPagina().
I metodi per la testata e il piè di pagina ci fanno intendere che è bene definire altre due classi: Intestazione e PiePagina.
Tali classi hanno i seguenti attributi in comune: data, ora, numeroDiPagina e pathFile. Tali attributi sono opzionali per ogni intestazione o pie' di pagina e l'utente potrà configurarli a suo piacimento.
La somiglianza tra Intestazione e PièPagina ci spinge a definire ancora
una nuova classe che sia in comune alle due appena descritte. È qui che
utilizziamo il concetto di ereditarietà che abbiamo definito in
precedenza.
La classe padre sarà BottomUp
(questo nome è scelto perché le intestazioni e i piè di pagina
appaiono, rispettivamente, nella parte alta e bassa di ogni pagina del
documento) e conterrà gli attributi che sono in comune alle classi
Intestazione e PiePagina oltre alle operazioni (anch'esse in comune) : visualizza(), modifica() e nascondi().
Le classi Intestazione e PiePagina (figlie di BottomUp) avranno la
necessità, quindi, di definire, rispettivamente, soltanto le
operazioni: nuovaIntestazione() e nuovoPiePagina().
Prima di passare ad esaminare il corpo del
documento o il testo, diamo uno sguardo alla definizione dei componenti
di un testo. Come detto, il testo del documento è composto di frasi. Le
frasi, a loro volta, sono composte di parole e le parole sono formate
da caratteri. Se le parole sono, dunque, array di caratteri e le frasi
sono identificabili come array di parole, allora una frase è anche (per
una sorta di proprietà transitiva) un array di caratteri.
Quindi, il corpo di un documento può essere descritto come un array di
caratteri. Per tale ragione, per descrivere il testo di un documento
faremo uso della classe Carattere con alcune sottoclassi.
La classe Carattere avrà gli attributi: codiceASCII e tipo
(il tipo ci informa sulla tipologia di carattere, ovvero se esso è in
formato normale, corsivo, grassetto o sottolineato) e definirà le
operazioni: Normale(), Corsivo(), Grassetto() e Sottolineato().
Come discendenti della classe Carattere definiremo poi: Lettera, SegnoDiPunteggiatura, CarattereSpeciale e Numero.
Inoltre, nel corpo del documento, come detto, possono comparire tabelle
o immagini. Entrambe costituiranno altre due nuove classi nel nostro
diagramma.
La Classe Tabella contiene gli attributi numeroDiRighe e numeroDiColonne e definisce le operazioni inserisciRiga( ) e inserisciColonna( ).
Ogni tabella consiste di una o più celle e, come già detto, in ogni cella è possibile che compaiano testo o immagini.
Dovremmo essere ad un buon punto per
iniziare a mettere insieme tutti i tasselli finora definiti.
Utilizzando le associazioni tra le classi che abbiamo descritto
otterremo dunque il seguente Class Diagram che descrive il nostro
esempio:
È importante rendersi conto che il
diagramma precedente non costituisce la massima descrizione in
dettaglio per un processo di scrittura di un documento di testo.
Il modello descritto potrà essere specializzato sempre di più e,
quindi, crescere in modo appropriato per poter consentire un
appropriato lavoro di analisi e disegno.