1 \documentclass[a4paper,
11pt
]{article
}
2 \usepackage[utf8
]{inputenc}
3 \usepackage[italian
]{babel
}
6 \usepackage{filecontents
}
10 \usepackage{pdflscape
}
12 \usepackage[pdftex
]{hyperref
}
18 pdftitle=
{Specifica
\_Tecnica\_v2.0.pdf
},
19 pdfsubject=
{Specifica Tecnica
},
21 pdfcreator=
{TeXLive-
2007}
24 \renewcommand{\appendixtocname}{Appendici
}
25 \renewcommand{\appendixpagename}{Appendici
}
26 \renewcommand{\headrulewidth}{0.6pt
}
27 \renewcommand{\footrulewidth}{0.4pt
}
33 \titolo{Specifica Tecnica
}
38 \lhead{\includegraphics[scale=
0.3]{../Logo_simple
}}
40 \rhead{\small{itworks@googlegroups.com
}}
41 \lfoot{\small{\the\titolo}}
43 \rfoot{\thepage\ di
\pageref*
{LastPage
}}
49 \includegraphics[scale=
0.7]{../Logo_green
}
51 \\
\Huge{\textsc{\the\titolo}}
53 \\
\Large{\textsl{\the\data}}
57 Descrizione generale delle classi che compongono l'architettura del software GoMoku3D.
63 \textbf{Redazione
} & Daniele Battaglia \\
67 \textbf{Revisione
} & Davide Pesavento \\
70 & Martina Bernardini\\
71 \textbf{Approvazione
} & Davide Pesavento \\
73 \textbf{Versione
} & $
2.0$ \\
74 \textbf{Data
} &
\the\data \\
75 \textbf{Stato
} & Formale \\
76 \textbf{Uso
} & Esterno \\
77 \textbf{Distribuzione
} & Prof.\ Tullio Vardanega \\
78 & Prof.\ Renato Conte \\
97 \section{Introduzione
}
98 \subsection{Scopo del documento
}
99 Questo documento fornisce al committente una descrizione architetturale del prodotto
\mbox{\textbf{GoMoku3D
}}, basandosi sul documento di
\textit{Analisi dei Requisiti
} attraverso vari diagrammi della specifica UML. Analizzeremo l'architettura di sistema partendo da una visione ad alto livello, per scendere successivamente più in dettaglio. In accordo con il nostro
\textit{Piano di Progetto
}, questo documento sarà sottoposto ad ulteriori modifiche, almeno fino alla fine della seconda fase.
101 \subsection{Scopo del prodotto
}
102 Il prodotto che proponiamo è una variante
3D del noto gioco
\textit{GoMoku
}. Tale software dovrà supportare una modalità online oltre che a quella in locale e fornire soluzioni grafiche che ne rendano l'utilizzo semplice e immediato con particolare attenzione alla giocabilità.
104 \subsection{Glossario
}
105 Il
\textit{Glossario
} cui far riferimento è fornito in un file separato, allegato alla presente
\textit{Specifica Tecnica
}.
106 Le definizioni del glossario si applicano a tutti i documenti formali allo scopo di rendere non ambigua e omogenea la terminologia tecnica utilizzata.
108 \subsection{Riferimenti
}
109 \subsubsection{Normativi
}
111 \item OMG,
\textit{Unified Modeling Language Superstructure
}, v2.1
.2
113 \subsubsection{Informativi
}
115 \item Addison Wesley,
\textit{UML Distilled
} ($
3^a$ edizione)
116 \item Gang of Four,
\textit{Design Patterns, Elements of Reusable Object Oriented Software
}
117 \item Documentazione Qt versione
4.3. \\
\url{http://doc.trolltech.com/
4.3/index.html
}
118 \item Documentazione Coin3D versione
2.5.0. \\
\url{http://doc.coin3d.org/Coin/
}
119 \item Documentazione SoQt versione
1.4.1. \\
\url{http://doc.coin3d.org/SoQt/
}
124 \section{Definizione del prodotto
}
125 \subsection{Diagramma delle attività
}
126 Iniziamo a definire il prodotto che presentiamo, descrivendo la logica di alto livello del software tramite l'ausilio dei diagrammi delle attività. Essi descrivono il flusso degli eventi all'interno dell'applicazione.
130 \includegraphics[width=
13cm
]{attivita-generale.png
}
131 \caption{Diagramma generale delle attività
}
136 \includegraphics[width=
13cm
]{attivita-stand-alone.png
}
137 \caption{Attività gioca partita stand-alone
}
142 \includegraphics[width=
13cm
]{attivita-online.png
}
143 \caption{Attività gioca partita online
}
148 \includegraphics[width=
11cm
]{attivita-spettatore.png
}
149 \caption{Attività gioca in modalità spettatore
}
152 Va sottolineato che nelle attività
16.11 e
18.3 (di attesa da parte del giocatore) sono contenute rispettivamente la gestione della rete e dell'intelligenza artificiale. \\
154 Partendo dalle informazioni contenute in questi diagrammi, abbiamo potuto individuare le macro-componenti del software e come esse devono interagire tra loro.
158 \subsection{Architettura generale del sistema
}
159 Come mostrato in Figura~
\ref{fig:class-global
}, l'architettura ad alto livello del software è composta da
4 componenti:
161 \item \textbf{Core:
} è composto dalle classi che implementano la logica di base necessaria al corretto funzionamento del gioco e da alcune classi ausiliarie comuni a tutta l'applicazione;
162 \item \textbf{GUI:
} contiene tutte le classi che rendono possibile l'interazione tra l'utente e l'applicazione;
163 \item \textbf{Network:
} racchiude le classi usate per la gestione e l'interfacciamento con la rete;
164 \item \textbf{AI:
} contiene la classe che implementa l'algoritmo di intelligenza artificiale e altre classi di supporto.
170 \includegraphics[width=
20cm
]{GlobalClassDiagram.png
}
171 \caption{Diagramma delle classi ad alto livello
}
172 \label{fig:class-global
}
178 \section{Descrizione dei componenti
}
180 \subsection{Componente
\textsl{Core
}}
184 \includegraphics[width=
13cm
]{CoreDiagram.png
}
185 \caption{Diagramma delle classi del componente
\textsl{Core
}}
186 \label{fig:class-core
}
190 \item[GameLoop
] \`E il nucleo del componente
\textsl{Core
}: questa classe è un
\textit{thread
} che gestisce il susseguirsi dei turni di gioco in modo asincrono rispetto alle componenti GUI e Network ed ha il compito di segnalare quando è il turno di un giocatore, la
\uline{mossa
} da lui effettuata ed eventuali condizioni di vittoria o pareggio.
191 \item[GameMatrix
] Racchiude le strutture dati necessarie per rappresentare la
\uline{matrice di gioco
}. Tali strutture sono condivise anche con il componente
\textsl{AI
}, che le utilizza nei propri algoritmi, al fine di ridurre i requisiti complessivi di memoria dell'applicazione. Questa classe rende inoltre disponibili dei metodi per il controllo di validità delle mosse (
\texttt{check()
}) e delle condizioni di vittoria (
\texttt{add()
}).
192 \item[SyncSharedCondition
] Questa classe è un
\textit{singleton
} che serve a sincronizzare agevolmente i
\textit{thread
} concorrenti e fornisce un meccanismo controllato per lo scambio di dati specifici tra le diverse componenti dell'applicazione. Internamente sfrutta le classi
\texttt{QMutex
} e
\texttt{QWaitCondition
} della libreria QtCore, che assicurano operazioni cross-platform pur mantenendo un'elevata efficienza.
193 \item[Settings
] La gerarchia composta dalle classi
\texttt{AbstractSettings
}, \\
\texttt{SettingsManager
},
\texttt{GUISettings
},
\texttt{ServerSettings
} e
\texttt{LocalSettings
} permette la gestione delle opzioni del software che devono essere mantenute persistenti tra una sessione e l'altra; il
\textit{backend
} di archiviazione delle opzioni è interamente cross-platform grazie alla classe
\texttt{QSettings
} della libreria QtCore.
194 \item[Move e Point
] Sono classi ausiliarie che incapsulano rispettivamente una
\uline{mossa
} di un giocatore e una coordinata all'interno della
\uline{matrice di gioco
}, offrendo un'interfaccia comune per le operazioni su esse.
199 \includegraphics[width=
13cm
]{PlayerDiagram.png
}
200 \caption{Diagramma della gerarchia dei Player e del componente
\textsl{AI
}}
201 \label{fig:class-player
}
205 \item[Player
] \`E una classe astratta che viene usata da
\texttt{GameLoop
} tramite puntatore polimorfo per poter trattare allo stesso modo diversi tipi di giocatore. Le classi concrete che definiscono i giocatori sono:
207 \item \textbf{HumanPlayer:
} \uline{giocatore umano
} che interagisce con l'applicazione tramite la GUI;
208 \item \textbf{RemotePlayer:
} presente solo in modalità online, rappresenta un giocatore non locale;
209 \item \textbf{AIPlayer:
} \uline{giocatore artificiale
} che utilizza le funzionalità della classe
\texttt{AI
} che gli permettono di calcolare la mossa da effettuare.
215 \subsection{Componente
\textsl{AI
}}
219 \includegraphics[width=
13cm
]{AIDiagram.png
}
220 \caption{Diagramma delle classi del componente
\textsl{AI
}}
225 \item[AI
] Classe astratta da cui derivano le classi che effettivamente implementano l'algoritmo di intelligenza artificiale. Fornisce un'interfaccia comune in modo da semplificare l'utilizzo del componente da parte del resto dell'applicazione.
226 \item[ThreatSearchAI
] Classe che concretizza l'interfaccia richiesta da
\texttt{AI
}. Viene utilizzata nel caso di
\uline{difficoltà II
} con valore diverso da
3. Mantiene un riferimento ad un oggetto di tipo
\texttt{Threat
} che fornisce i dati necessari all'algoritmo di scelta della mossa raccolti dall'inizio della partita.
227 \item[Threat
] Incapsula una struttura dati che mantiene informazioni sullo stato di gioco di un giocatore, ovvero serve a mantenere in memoria tutte le possibili locazioni nella
\uline{matrice di gioco
} in cui tale giocatore ha già posizionato almeno una
\uline{pedina
} e in cui è ancora possibile conseguire una situazione di vittoria. Ha come classe interna
\texttt{Node
}, necessaria per semplificare la gestione dei dati.
228 \item[Threat::Node
] Un'istanza di questa classe serve a rappresentare una singola minaccia offensiva, in particolare la sua collocazione nella
\uline{matrice di gioco
} e l'entità di tale minaccia.
229 \item[CCThreatSearchAI
] Concretizza l'interfaccia richiesta da
\texttt{AI
}. Questo algoritmo è da usare solamente se il parametro di
\uline{difficoltà II
} è uguale a
3. \`E una classe derivata da
\texttt{ThreatSearchAI
} in quanto l'algoritmo ha lo stesso comportamento a meno della modalità difensiva, che va integrata a causa dell'aggiunta della condizione di vittoria dovuta al valore di
\uline{difficoltà II
}. Utilizza una struttura dati di tipo
\texttt{CCThreat
}.
230 \item[CCThreat
] Deriva dalla classe
\texttt{Threat
} e ne mantiene le funzionalità; al tempo stesso introduce un'ulteriore struttura dati che ha il compito di alleggerire il carico computazionale dell'algoritmo nel caso in cui
\uline{difficoltà II
} sia uguale a
3. Per fare ciò utilizza la classe interna
\texttt{ConnectedComponent
}.
231 \item[CCThreat::ConnectedComponent
] Struttura dati le cui istanze rappresentano componenti connesse (formate da
\uline{pedine
} dello stesso giocatore adiacenti) e informazioni sull'estensione di tali componenti rispetto alla
\uline{matrice di gioco
}.
232 \item[Suggester
] \`E un
\textit{thread
} che permette alla GUI di calcolare una mossa parallelamente al consueto svolgimento delle operazioni dell'applicazione e di suggerirla all'utente che la richiede. \`E incaricata inoltre di istanziare la classe derivata da AI più opportuna a seconda delle impostazioni di gioco.
237 \subsection{Componente
\textsl{GUI
}}
241 \includegraphics[width=
13cm
]{WidgetDiagram.png
}
242 \caption{Diagramma delle classi dei
\textit{widget
} della GUI
}
243 \label{fig:class-widget
}
248 \includegraphics[width=
13cm
]{DialogDiagram.png
}
249 \caption{Diagramma delle classi dei
\textit{dialog
} della GUI
}
250 \label{fig:class-dialog
}
254 \item[MainWindow
] \`E la classe principale dell'interfaccia utente; viene istanziata una sola volta all'avvio dell'applicazione e distrutta al termine di essa; è responsabile della creazione e distruzione di tutti gli altri oggetti. Ha il compito di ricevere segnali provenienti da altre componenti dell'applicazione e modificare adeguatamente lo stato delle altre classi della GUI.
255 \item[PlayerInfo e PlayersWidget
] \texttt{PlayerInfo
} è la struttura dati usata per gestire la corrispondenza tra dati funzionali e informazioni grafiche dei giocatori;
\texttt{PlayersWidget
}, derivata da
\texttt{QWidget
}, presenta tali informazioni all'utente.
256 \item[HistoryModel
] Concretizza
\texttt{QAbstractTableModel
} per implementare la struttura dati sottostante lo storico delle mosse. L'interfacciamento con l'utente viene realizzato con l'ausilio della classe
\texttt{QTableView
} della libreria QtGui.
257 \item[ChatWidget
] Permette lo scambio di messaggi di testo tra i giocatori partecipanti ad una stessa partita online. Questa classe dialoga direttamente con lo strato di rete tramite
\textit{signals
} e
\textit{slots
}.
258 \item[TimerWidget
] Fornisce una semplice visualizzazione del tempo rimanente per effettuare la propria mossa durante una partita online, nel caso in cui si utilizzi tale variante alle regole di gioco.
261 \subsubsection{Visuale
3D
}
265 \includegraphics[width=
13cm
]{3DDiagram.png
}
266 \caption{Diagramma delle classi della visuale
3D
}
270 La visualizzazione
3D della matrice di gioco è fornita dall'interazione delle seguenti classi:
272 \item[RenderWidget
] Derivata dalla classe
\texttt{QWidget
}, fornisce un'interfaccia standard alla visualizzazione
3D, così da poter essere gestita come un qualsiasi elemento grafico delle librerie Qt. I metodi di questa classe sono le operazioni principali che il resto dell'applicazione può richiedere alla parte grafica.
273 \item[CubeRenderArea
] Derivata dalla classe
\texttt{SoQtRenderArea
}, è l'implementazione che fornisce un contesto OpenGL all'applicazione. Tale contesto è gestito con le librerie SoQt. Questa classe rappresenta, oltre che l'esecutore del
\textit{rendering
} della scena, anche il gestore di tutti gli eventi generati dall'interazione con l'utente.
274 \item[CubeRenderArea::Orientation
] \`E una classe interna enumerazione. Può assumere
6 valori che indicano un semiasse di un sistema cartesiano in
3 dimensioni. Il valore
\texttt{NO
\_ORIENTATION} è usato nel caso non vi sia alcuna direzione assegnata.
275 \item[CubeRenderArea::Direction
] Classe interna enumerazione, indica le sei direzioni possibili in cui è possibile spostare un oggetto nello spazio.
276 \item[SceneGraph
] \`E una classe usata esclusivamente da
\texttt{CubeRenderArea
}. \`E un'insieme di strutture dati e metodi che compongono e manipolano il grafo della scena. Tutti gli elementi della scena
3D infatti sono dei nodi, e l'intero albero composto da questi nodi rappresenta tutti gli elementi e le proprietà che devono essere utilizzate nelle operazioni di
\textit{rendering
}.
281 \subsection{Componente
\textsl{Network
}}
285 \includegraphics[width=
13cm
]{NetworkDiagram.png
}
286 \caption{Diagramma delle classi del componente
\textsl{Network
}}
287 \label{fig:class-network
}
291 \item[Network
] \`E la classe
\textit{fa
\c{c
}ade
} del componente
\textsl{Network
} e, come tale, fornisce al resto dell'applicazione un'interfaccia semplice e di alto livello al complesso sottosistema per la gestione della rete. In realtà questa è una classe astratta che dichiara solamente quale deve essere tale interfaccia: l'implementazione è delegata alle sottoclassi concrete
\texttt{GameClient
} e
\texttt{GameServer
}, poiché il comportamento varia a seconda se l'applicazione funge da server oppure da client per la partita.
292 \item[GameClient
] Concretizza
\texttt{Network
}. Viene usata lato client per la connessione iniziale al server e la successiva gestione del protocollo di comunicazione.
293 \item[GameServer
] Concretizza
\texttt{Network
}. Permette di gestire le connessioni in entrata tramite la classe
\texttt{QTcpServer
} e l'eventuale continuazione della comunicazione come giocatore o spettatore della partita durante lo svolgimento di essa.
294 \item[StreamSocket
] Implementa le funzionalità di basso livello necessarie a scambiare i messaggi del protocollo comuni a client e server. Il protocollo è basato su uno
\textit{stream
} XML bidirezionale trasmesso su una connessione TCP. Questa classe sfrutta la derivazione protetta dalle classi
\texttt{QXmlStreamReader
} e
\texttt{QXmlStreamWriter
} della libreria QtXml per leggere e scrivere lo
\textit{stream
} XML. Tutte le comunicazioni con l'host remoto vengono effettuate attraverso
\texttt{QTcpSocket
} della libreria QtNetwork.
295 \item[ClientSocket e ServerSocket
] Estendono
\texttt{StreamSocket
} e ne arricchiscono l'interfaccia con metodi specifici di client e server.
300 \section{Design Patterns
}
301 In questa sezione sono contenuti i
\textit{design patterns
} utilizzati nella progettazione del prodotto.
303 \subsection{Singleton
}
304 Le classi
\texttt{SyncSharedCondition
} e
\texttt{GameMatrix
} sono state progettate seguendo il pattern del
\textit{``Singleton''
}.
306 \subsection{Fa
\c{c
}ade
}
307 La classe
\texttt{Network
} è stata progettata secondo il pattern
\textit{``Fa
\c{c
}ade''
}.
309 \subsection{Strategy
}
310 La gerarchia di classi del componente
\textsl{AI
} rappresenta un pattern di tipo
\mbox{\textit{``Strategy''
}}. Esso è così composto:
312 \item \textbf{Strategy
} (
\texttt{AI
}): dichiara un'interfaccia comune utilizzata da Context.
313 \item \textbf{ConcreteStrategy
} (
\texttt{ThreatSearchAI
},
\texttt{CCThreatSearchAI
}): implementano il metodo
\texttt{move(level : int)
} e
\texttt{forceMove()
} dell'interfaccia Strategy.
314 \item \textbf{Context
} (
\texttt{AIPlayer
},
\texttt{Suggester
}): utilizzano il puntatore polimorfo
\texttt{\_ai} invocando i metodi dichiarati da Strategy e implementati da ConcreteStrategy.
317 \subsection{Factory method
}
318 La gerarchia di classi del componente
\textsl{AI
} è stata progettata seguendo un pattern
\mbox{\textit{``Factory method''
}}.
320 \item \textbf{Creator
} (
\texttt{ThreatSearchAI
}): dichiara il factory method
\texttt{createThreat()
} che ritorna un riferimento ad un oggetto di tipo Product.
321 \item \textbf{ConcreteCreator
} (
\texttt{ThreatSearchAI
},
\texttt{CCThreatSearchAI
}): implementa il factory method
\texttt{createThreat()
} e ritorna un'istanza di ConcreteProduct.
322 \item \textbf{Product
} (
\texttt{Threat
}): definisce l'interfaccia degli oggetti creati dal factory method.
323 \item \textbf{ConcreteProduct
} (
\texttt{Threat
},
\texttt{CCThreat
}): implementa l'interfaccia presente in Product.
326 \subsection{Template method
}
327 I seguenti metodi sono dei
\mbox{\textit{``Template method''
}}:
329 \item \texttt{Player::move()
}, invoca il metodo astratto
\texttt{Player::doMove()
} che deve essere ridefinito dalle sottoclassi.
330 \item \verb!ThreatSearchAI::defense(level : int)!, effettua la chiamata a \\
\verb!ThreatSearchAI::defenseHook()! che può essere ridefinito nelle classi derivate.
331 \item \verb!Threat::insert(point : Point)!, effettua la chiamata a \\
\verb!Threat::insertHook(p : Point)! che può essere ridefinito nelle classi derivate.
332 \item \verb!Threat::scanFromMatrix()!, effettua la chiamata a \\
\verb!Threat::scanFromMatrixHook(p : Point)! che può essere ridefinito nelle classi derivate.
336 La gerarchia di classi per la gestione delle impostazioni è un pattern di tipo
\textit{``Adapter''
} a più livelli.
338 \item \textbf{Target
} (
\texttt{AbstractSettings
},
\texttt{SettingsManager
}): definiscono l'interfaccia che può essere utilizzata dai Client.
339 \item \textbf{Adaptee
} (
\texttt{QSettings
}): è l'interfaccia esistente che necessita di adattamento.
340 \item \textbf{Adapter
} (
\texttt{LocalSettings
},
\texttt{ServerSettings
},
\texttt{GUISettings
}): adatta l'interfaccia di Adaptee all'interfaccia di Target. In questo caso
\texttt{LocalSettings
} e
\texttt{ServerSettings
} adattano l'interfaccia di
\texttt{QSettings
} a quella di
\texttt{SettingsManager
}, mentre
\texttt{GUISettings
} adatta
\texttt{QSettings
} solamente all'interfaccia più limitata di
\texttt{AbstractSettings
}.
341 \item \textbf{Client
} (
\texttt{MainWindow
}): utilizza gli Adapter attraverso l'interfaccia di Target.
346 \section{Stime di fattibilità e bisogno di risorse
}
347 Tra le richieste da parte del committente sono presenti la portabilità del prodotto su più sistemi operativi e la necessità di interfacciarsi ad una rete informatica (anche geograficamente distribuita). \`E anche necessario che il software possieda un'interfaccia grafica con visuale
3D. Per quanto riguarda il linguaggio di programmazione scelto per la realizzazione del software abbiamo optato per il
\textbf{C++
}. Questa scelta è stata dettata oltre che dalle richieste sopra citate, anche dalla relativa esigenza di risorse computazionali da parte degli algoritmi di intelligenza artificiale che abbiamo individuato. Per quanto concerne le librerie, è stato deciso di utilizzare per l'interfaccia utente le librerie Qt versione
4.3, che integrano la portabilità e la gestione delle connessioni di rete. Per la parte di grafica tridimensionale, dopo uno studio delle varie librerie grafiche disponibili, abbiamo deciso di utilizzare le Coin3D basate su OpenGL che, grazie alla loro nativa integrazione con le librerie Qt, alla portabilità e alla relativa semplicità d'uso, agevoleranno la realizzazione del prodotto. Tutto questo materiale è disponibile sotto licenza GNU GPLv2.
349 Utilizzando queste risorse e visti i tempi di consegna del prodotto, la ditta
\mbox{\textsl{ITWorks!
}} ritiene quindi soddisfacibili le richieste del committente. Per tempistiche più dettagliate si rimanda al
\textit{Piano di Progetto
}.
353 \section{Tracciamento requisiti $
\leftrightarrow$ diagrammi di attività
}
354 \LTXtable{\textwidth}{Tracciamento_requisiti_attivita.tex
}
358 \section{Tracciamento componenti $
\leftrightarrow$ requisiti
}
359 \LTXtable{\textwidth}{Tracciamento_componenti_requisiti.tex
}
366 \section{Registro delle modifiche
}
373 \begin{tabularx
}{\textwidth}{|*
{3}{X
}|
}
375 \textbf{Versione
} &
\textbf{Data
} &
\textbf{Autore
} \\
379 \begin{filecontents
}{Specifica_Tecnica.changelog
}
380 \begin{longtable
}{*
{3}{X
}}
383 2.0 &
03/
03/
2008 & Nicolò Navarin \\
384 \multicolumn{3}{p
{0.95\textwidth}}{Approvato documento per la RQ.
} \\
388 1.8 &
23/
02/
2008 & Davide Pesavento \\
389 \multicolumn{3}{p
{0.95\textwidth}}{Verifica del documento. Alcune correzioni ortografiche e tipografiche.
} \\
393 1.7 &
22/
02/
2008 & Martina Bernardini \\
394 \multicolumn{3}{p
{0.95\textwidth}}{Verifica modifiche apportate alla componente
\textsl{Network
}.
} \\
398 1.6 &
22/
02/
2008 & Martina Astegno \\
399 \multicolumn{3}{p
{0.95\textwidth}}{Verifica delle modifiche apportate alla componente
\textsl{3D
} e
\textsl{AI
}.
} \\
403 1.5 &
18/
02/
2008 & Tobia Zorzan \\
404 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunto diagramma delle classi per la visuale
3D e relative descrizioni. Aggiornato diagramma delle classi del componente
\textsl{GUI
}.
} \\
408 1.4 &
16/
02/
2008 & Martina Bernardini \\
409 \multicolumn{3}{p
{0.95\textwidth}}{Approvato documento per RPD.
} \\
413 1.3 &
15/
02/
2008 & Daniele Battaglia \\
414 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunto diagramma delle classi del componente
\textsl{AI
}, relative descrizioni e
\textit{design patterns
}. Aggiornato il tracciamento componenti $
\leftrightarrow$ requisiti.
} \\
418 1.2 &
15/
02/
2008 & Davide Pesavento \\
419 \multicolumn{3}{p
{0.95\textwidth}}{Varie modifiche di minore entità in seguito ad alcuni cambiamenti nei diagrammi.
} \\
423 1.1 &
12/
02/
2008 & Davide Pesavento \\
424 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunto diagramma delle classi del componente
\textsl{Network
} e relative descrizioni. Aggiornato di conseguenza il tracciamento componenti $
\leftrightarrow$ requisiti.
} \\
428 1.0 &
26/
01/
2008 & Davide Pesavento \\
429 \multicolumn{3}{p
{0.95\textwidth}}{Revisione finale e approvazione per RPP.
} \\
433 0.8 &
26/
01/
2008 & Tobia Zorzan \\
434 \multicolumn{3}{p
{0.95\textwidth}}{Revisione del documento.
} \\
438 0.7 &
26/
01/
2008 & Daniele Battaglia \\
439 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunta sezione ``Tracciamento componenti $
\leftrightarrow$ requisiti''.
} \\
443 0.6 &
25/
01/
2008 & Daniele Battaglia \\
444 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunti diagrammi di sequenza e descrizioni.
} \\
448 0.5 &
25/
01/
2008 & Davide Pesavento \\
449 \multicolumn{3}{p
{0.95\textwidth}}{Aggiornato alla versione
1.3 del template di documento.
} \\
453 0.4 &
25/
01/
2008 & Nicolò Navarin \\
454 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunta sezione ``Tracciamento attività $
\leftrightarrow$ requisiti''.
} \\
458 0.3 &
24/
01/
2008 & Nicolò Navarin \\
459 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunto diagramma delle attività ad alto livello e la sezione introduttiva.
} \\
463 0.2 &
24/
01/
2008 & Daniele Battaglia \\
464 \multicolumn{3}{p
{0.95\textwidth}}{Aggiunti diagrammi delle classi e descrizioni.
} \\
468 0.1 &
23/
01/
2008 & Davide Pesavento \\
469 \multicolumn{3}{p
{0.95\textwidth}}{Versione iniziale con scheletro del documento.
} \\
472 \LTXtable{\textwidth}{Specifica_Tecnica.changelog
}