Last few changes.
[GoMoku3D.git] / doc / ST / Specifica_Tecnica.tex
blob32664a20f69199384efa512fb4d53ad63e1fd066
1 \documentclass[a4paper,11pt]{article}
2 \usepackage[utf8]{inputenc}
3 \usepackage[italian]{babel}
4 \usepackage{appendix}
5 \usepackage{fancyhdr}
6 \usepackage{filecontents}
7 \usepackage{graphicx}
8 \usepackage{lastpage}
9 \usepackage{ltxtable}
10 \usepackage{pdflscape}
11 \usepackage{ulem}
12 \usepackage[pdftex]{hyperref}
14 \hypersetup{
15 breaklinks,
16 colorlinks,
17 linkcolor=blue,
18 pdftitle={Specifica\_Tecnica\_v2.0.pdf},
19 pdfsubject={Specifica Tecnica},
20 pdfauthor={ITWorks!},
21 pdfcreator={TeXLive-2007}
24 \renewcommand{\appendixtocname}{Appendici}
25 \renewcommand{\appendixpagename}{Appendici}
26 \renewcommand{\headrulewidth}{0.6pt}
27 \renewcommand{\footrulewidth}{0.4pt}
29 \begin{document}
31 \normalem
32 \newtoks\titolo
33 \titolo{Specifica Tecnica}
34 \newtoks\data
35 \data{\today}
37 \pagestyle{fancy}
38 \lhead{\includegraphics[scale=0.3]{../Logo_simple}}
39 \chead{}
40 \rhead{\small{itworks@googlegroups.com}}
41 \lfoot{\small{\the\titolo}}
42 \cfoot{}
43 \rfoot{\thepage\ di \pageref*{LastPage}}
45 \thispagestyle{empty}
47 \begin{center}
49 \includegraphics[scale=0.7]{../Logo_green}
50 \vspace{2cm}
51 \\\Huge{\textsc{\the\titolo}}
52 \vspace{1cm}
53 \\\Large{\textsl{\the\data}}
54 \vspace{1.2cm}
56 \begin{abstract}
57 Descrizione generale delle classi che compongono l'architettura del software GoMoku3D.
58 \end{abstract}
60 \small
61 \vspace*{\stretch{1}}
62 \begin{tabular}{r|l}
63 \textbf{Redazione} & Daniele Battaglia \\
64 & Davide Pesavento \\
65 & Nicolò Navarin \\
66 & Tobia Zorzan\\
67 \textbf{Revisione} & Davide Pesavento \\
68 & Tobia Zorzan \\
69 & Martina Astegno\\
70 & Martina Bernardini\\
71 \textbf{Approvazione} & Davide Pesavento \\
72 & Nicolò Navarin\\
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 \\
79 & ITWorks! \\
80 \end{tabular}
81 \vspace{\stretch{1}}
83 \end{center}
85 \pagebreak
87 \normalsize
88 \vspace*{0.1cm}
89 \tableofcontents
91 \pagebreak
93 \listoffigures
95 \pagebreak
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}
110 \begin{itemize}
111 \item OMG, \textit{Unified Modeling Language Superstructure}, v2.1.2
112 \end{itemize}
113 \subsubsection{Informativi}
114 \begin{itemize}
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/}
120 \end{itemize}
122 \pagebreak
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.
128 \begin{figure}[hpbt]
129 \centering
130 \includegraphics[width=13cm]{attivita-generale.png}
131 \caption{Diagramma generale delle attività}
132 \end{figure}
134 \begin{figure}[hpbt]
135 \centering
136 \includegraphics[width=13cm]{attivita-stand-alone.png}
137 \caption{Attività gioca partita stand-alone}
138 \end{figure}
140 \begin{figure}[hpbt]
141 \centering
142 \includegraphics[width=13cm]{attivita-online.png}
143 \caption{Attività gioca partita online}
144 \end{figure}
146 \begin{figure}[hpbt]
147 \centering
148 \includegraphics[width=11cm]{attivita-spettatore.png}
149 \caption{Attività gioca in modalità spettatore}
150 \end{figure}
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.
156 \clearpage
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:
160 \begin{itemize}
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.
165 \end{itemize}
167 \begin{landscape}
168 \begin{figure}[hpbt]
169 \centering
170 \includegraphics[width=20cm]{GlobalClassDiagram.png}
171 \caption{Diagramma delle classi ad alto livello}
172 \label{fig:class-global}
173 \end{figure}
174 \end{landscape}
176 \clearpage
178 \section{Descrizione dei componenti}
180 \subsection{Componente \textsl{Core}}
182 \begin{figure}[hpbt]
183 \centering
184 \includegraphics[width=13cm]{CoreDiagram.png}
185 \caption{Diagramma delle classi del componente \textsl{Core}}
186 \label{fig:class-core}
187 \end{figure}
189 \begin{description}
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.
195 \end{description}
197 \begin{figure}[hpbt]
198 \centering
199 \includegraphics[width=13cm]{PlayerDiagram.png}
200 \caption{Diagramma della gerarchia dei Player e del componente \textsl{AI}}
201 \label{fig:class-player}
202 \end{figure}
204 \begin{description}
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:
206 \begin{itemize}
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.
210 \end{itemize}
211 \end{description}
213 \clearpage
215 \subsection{Componente \textsl{AI}}
217 \begin{figure}[hpbt]
218 \centering
219 \includegraphics[width=13cm]{AIDiagram.png}
220 \caption{Diagramma delle classi del componente \textsl{AI}}
221 \label{fig:class-ai}
222 \end{figure}
224 \begin{description}
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.
233 \end{description}
235 \clearpage
237 \subsection{Componente \textsl{GUI}}
239 \begin{figure}[hpbt]
240 \centering
241 \includegraphics[width=13cm]{WidgetDiagram.png}
242 \caption{Diagramma delle classi dei \textit{widget} della GUI}
243 \label{fig:class-widget}
244 \end{figure}
246 \begin{figure}[hpbt]
247 \centering
248 \includegraphics[width=13cm]{DialogDiagram.png}
249 \caption{Diagramma delle classi dei \textit{dialog} della GUI}
250 \label{fig:class-dialog}
251 \end{figure}
253 \begin{description}
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.
259 \end{description}
261 \subsubsection{Visuale 3D}
263 \begin{figure}[hpbt]
264 \centering
265 \includegraphics[width=13cm]{3DDiagram.png}
266 \caption{Diagramma delle classi della visuale 3D}
267 \label{fig:class-3d}
268 \end{figure}
270 La visualizzazione 3D della matrice di gioco è fornita dall'interazione delle seguenti classi:
271 \begin{description}
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}.
277 \end{description}
279 \clearpage
281 \subsection{Componente \textsl{Network}}
283 \begin{figure}[hpbt]
284 \centering
285 \includegraphics[width=13cm]{NetworkDiagram.png}
286 \caption{Diagramma delle classi del componente \textsl{Network}}
287 \label{fig:class-network}
288 \end{figure}
290 \begin{description}
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.
296 \end{description}
298 \clearpage
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:
311 \begin{itemize}
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.
315 \end{itemize}
317 \subsection{Factory method}
318 La gerarchia di classi del componente \textsl{AI} è stata progettata seguendo un pattern \mbox{\textit{``Factory method''}}.
319 \begin{itemize}
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.
324 \end{itemize}
326 \subsection{Template method}
327 I seguenti metodi sono dei \mbox{\textit{``Template method''}}:
328 \begin{itemize}
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.
333 \end{itemize}
335 \subsection{Adapter}
336 La gerarchia di classi per la gestione delle impostazioni è un pattern di tipo \textit{``Adapter''} a più livelli.
337 \begin{itemize}
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.
342 \end{itemize}
344 \clearpage
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}.
351 \pagebreak
353 \section{Tracciamento requisiti $\leftrightarrow$ diagrammi di attività}
354 \LTXtable{\textwidth}{Tracciamento_requisiti_attivita.tex}
356 \pagebreak
358 \section{Tracciamento componenti $\leftrightarrow$ requisiti}
359 \LTXtable{\textwidth}{Tracciamento_componenti_requisiti.tex}
361 \pagebreak
363 \appendix
364 \appendixpage
366 \section{Registro delle modifiche}
367 \vspace{5mm}
369 \begin{center}
371 \small
373 \begin{tabularx}{\textwidth}{|*{3}{X}|}
374 \hline
375 \textbf{Versione} & \textbf{Data} & \textbf{Autore} \\
376 \hline
377 \end{tabularx}
379 \begin{filecontents}{Specifica_Tecnica.changelog}
380 \begin{longtable}{*{3}{X}}
381 \vspace{1mm}
382 \\\hline
383 2.0 & 03/03/2008 & Nicolò Navarin \\
384 \multicolumn{3}{p{0.95\textwidth}}{Approvato documento per la RQ.} \\
386 \vspace{1mm}
387 \\\hline
388 1.8 & 23/02/2008 & Davide Pesavento \\
389 \multicolumn{3}{p{0.95\textwidth}}{Verifica del documento. Alcune correzioni ortografiche e tipografiche.} \\
391 \vspace{1mm}
392 \\\hline
393 1.7 & 22/02/2008 & Martina Bernardini \\
394 \multicolumn{3}{p{0.95\textwidth}}{Verifica modifiche apportate alla componente \textsl{Network}.} \\
396 \vspace{1mm}
397 \\\hline
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}.} \\
401 \vspace{1mm}
402 \\\hline
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}.} \\
406 \vspace{1mm}
407 \\\hline
408 1.4 & 16/02/2008 & Martina Bernardini \\
409 \multicolumn{3}{p{0.95\textwidth}}{Approvato documento per RPD.} \\
411 \vspace{1mm}
412 \\\hline
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.} \\
416 \vspace{1mm}
417 \\\hline
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.} \\
421 \vspace{1mm}
422 \\\hline
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.} \\
426 \vspace{1mm}
427 \\\hline
428 1.0 & 26/01/2008 & Davide Pesavento \\
429 \multicolumn{3}{p{0.95\textwidth}}{Revisione finale e approvazione per RPP.} \\
431 \vspace{1mm}
432 \\\hline
433 0.8 & 26/01/2008 & Tobia Zorzan \\
434 \multicolumn{3}{p{0.95\textwidth}}{Revisione del documento.} \\
436 \vspace{1mm}
437 \\\hline
438 0.7 & 26/01/2008 & Daniele Battaglia \\
439 \multicolumn{3}{p{0.95\textwidth}}{Aggiunta sezione ``Tracciamento componenti $\leftrightarrow$ requisiti''.} \\
441 \vspace{1mm}
442 \\\hline
443 0.6 & 25/01/2008 & Daniele Battaglia \\
444 \multicolumn{3}{p{0.95\textwidth}}{Aggiunti diagrammi di sequenza e descrizioni.} \\
446 \vspace{1mm}
447 \\\hline
448 0.5 & 25/01/2008 & Davide Pesavento \\
449 \multicolumn{3}{p{0.95\textwidth}}{Aggiornato alla versione 1.3 del template di documento.} \\
451 \vspace{1mm}
452 \\\hline
453 0.4 & 25/01/2008 & Nicolò Navarin \\
454 \multicolumn{3}{p{0.95\textwidth}}{Aggiunta sezione ``Tracciamento attività $\leftrightarrow$ requisiti''.} \\
456 \vspace{1mm}
457 \\\hline
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.} \\
461 \vspace{1mm}
462 \\\hline
463 0.2 & 24/01/2008 & Daniele Battaglia \\
464 \multicolumn{3}{p{0.95\textwidth}}{Aggiunti diagrammi delle classi e descrizioni.} \\
466 \vspace{1mm}
467 \\\hline
468 0.1 & 23/01/2008 & Davide Pesavento \\
469 \multicolumn{3}{p{0.95\textwidth}}{Versione iniziale con scheletro del documento.} \\
470 \end{longtable}
471 \end{filecontents}
472 \LTXtable{\textwidth}{Specifica_Tecnica.changelog}
474 \end{center}
476 \end{document}