summaryrefslogtreecommitdiffstats
path: root/ue4/protokoll
diff options
context:
space:
mode:
authorGünther Neuwirth <e0626638@student.tuwien.ac.at>2009-05-29 19:43:29 +0200
committerGünther Neuwirth <e0626638@student.tuwien.ac.at>2009-05-29 19:43:29 +0200
commit87a3b3b466ebc0859bee7ffe0f5b461ce49227d3 (patch)
tree3fdb60bfc0ae26e55adeba3d202d192799426a76 /ue4/protokoll
parent0c146f50d4b1c4d986a21387e1804c4707d8fd6f (diff)
downloadooprog-87a3b3b466ebc0859bee7ffe0f5b461ce49227d3.tar.gz
ooprog-87a3b3b466ebc0859bee7ffe0f5b461ce49227d3.tar.bz2
ooprog-87a3b3b466ebc0859bee7ffe0f5b461ce49227d3.zip
Protocoll, conditions
Diffstat (limited to 'ue4/protokoll')
-rw-r--r--ue4/protokoll/protokoll.tex103
1 files changed, 95 insertions, 8 deletions
diff --git a/ue4/protokoll/protokoll.tex b/ue4/protokoll/protokoll.tex
index 3db10b0..6131cdb 100644
--- a/ue4/protokoll/protokoll.tex
+++ b/ue4/protokoll/protokoll.tex
@@ -37,7 +37,26 @@ Manuel Mausz, \matrnr 0728348\\
37 37
38Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. 38Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
39 39
40TODO 40Wie gefordert, wurden die zwei zusätzliche Datentypen, \mbox{CDatSet} und \mbox{CDatN}, implementiert und der Programmcode generisch gestaltet.
41
42Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und boost::operators<\mbox{CDatSet}> mittels Mehrfachvererbung abgeleitet.
43So war es möglich die Implemntierung, mittels Codewiederverwendung, auf das Überschreiben eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken.
44
45Da der Typ \mbox{CDatN} Werte variabler Bitlänge representiert, war es notwendig diesen vollständig neu zu implementieren. Es wurde von boost::operators<\mbox{CDatN}> abgeleitet und dabei eine zusätzliche
46Methode \mbox{align()} definiert, die sicherstellt, dass der transportierte Wert immer auf die geforderte Bitanzahl konvertiert wird.
47Weiters wurde ein Kopierkonstruktor definiert, der einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet.
48Letzterer ist mit dem Defaultwert 31 deklariert und repräsentiert die Bitanzahl, auf die ersterer konvertiert wird. Damit ist es möglich alle vorhandenen Datentypen einheitlich zu verarbeiten.
49Der Defaultkonstruktor wurde wie gewünscht deaktiviert.
50
51Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms mit \mbox{``-f''} erweitert.
52Der Parameter dieser Option muß \mbox{``s''} oder ein Wert zwischen ``2'' und ``32'' sein.
53Im Hauptprogramm wird nun anhand dieses Parameters der zuständige Datentyp instanziert und die template Methode
54\mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des Programms anstößt.
55
56Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden \mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die abgeleiteten \mbox{Instructions}
57zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzierten Datentyp erhalten.
58
59\newpage
41 60
42%================================================================== 61%==================================================================
43\begin{center} 62\begin{center}
@@ -49,23 +68,46 @@ TODO
49\end{center} 68\end{center}
50%================================================================== 69%==================================================================
51 70
71\newpage
52\subsection{Verwaltung der Ressourcen} 72\subsection{Verwaltung der Ressourcen}
53 73
54TODO 74Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector verwaltet.
75Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm, instanzierten Datentyp initialisiert.
76Dadurch ist das Löschen der register im Destruktor nicht mehr notwendig.
77
78Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\
55 79
56\subsection{Fehlerbehandlung} 80\subsection{Fehlerbehandlung}
57 81
58TODO 82Es wurden mehrere Exceptions, als Subklassen der jeweiligen Templateklassen, von Typ \mbox{std::invalid\_argument} abgeleitet.
83Diese sind \mbox{CCPUError}, \mbox{CInstructionError}, \mbox{CMemError} und \mbox{CProgramError}.
84
85Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm weitergereicht,
86wo wider eine Umwandlung in \mbox{runtime\_error()} stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine fehlerbeschreibende Ausgabe auf \mbox{std::cerr}
87und den Programmabbruch mit Exitstatus 1.
59 88
60\subsection{Implementierung} 89\subsection{Implementierung}
61 90
62TODO 91Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
92Punkt~\ref{Listings}.\\
93
94
63 95
64\section{Projektverlauf} 96\section{Projektverlauf}
65 97
66\subsection{Probleme und Fallstricke} 98\subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke}
99
100\mbox{CDatN}:
101
102Mit der, in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl, ist es nur möglich positive Zahlen zu verarbeiten.
103Somit entspricht -1 dem Maximum der, mit der Bitanzahl, darstellbaren positiven Zahl usw..
104
105Ein weiteres Problem besteht darin, dass die Anzahl der Instruktionen in CProgram, den maximal darstellbaren Wert übersteigt.
106In diesen Fall ist das Programmverhalten undefiniert.
67 107
68TODO 108Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu deaktivieren, wurden einige Probleme initiiert.
109Es war nicht weiter möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur Deklaration ein Defaultkonstruktor notwendig ist.
110Weiters musste eine Alternative zum, nicht mehr anwendbaren \mbox{boost::lexical\_cast} in \mbox{CMem} implementiert werden.
69 111
70\subsection{Arbeitsaufwand} 112\subsection{Arbeitsaufwand}
71 113
@@ -73,9 +115,14 @@ TODO
73 \toprule 115 \toprule
74 Entwicklungsschritt / Meilenstein & Arbeitsaufwand\\ 116 Entwicklungsschritt / Meilenstein & Arbeitsaufwand\\
75 \midrule 117 \midrule
76 TODO & TODO\\ 118 Erstes Design & 1 Tage\\
77 \hline 119 \hline
78 TODO & TODO\\ 120 Implementierung & 2 Tage\\
121 \hline
122 Dokumentation (Doxygen) und Überprüfung aller\\
123 Anforderungen gemäß der Programmierrichtlinien & 4 Stunden\\
124 \hline
125 Erstellung des Protokolls & 2 Stunden\\
79 \bottomrule 126 \bottomrule
80\end{tabular} 127\end{tabular}
81 128
@@ -88,5 +135,45 @@ TODO
88\subsection{mycpu.cpp} 135\subsection{mycpu.cpp}
89\lstinputlisting{../mycpu/mycpu.cpp} 136\lstinputlisting{../mycpu/mycpu.cpp}
90 137
138\newpage
139\subsection{cdat.h}
140\lstinputlisting{../mycpu/cdat.h}
141
142\newpage
143\subsection{cdatset.h}
144\lstinputlisting{../mycpu/cdatset.h}
145
146\newpage
147\subsection{cdatn.h}
148\lstinputlisting{../mycpu/cdatn.h}
149
150\newpage
151\subsection{cmem.h}
152\lstinputlisting{../mycpu/cmem.h}
153
154\newpage
155\subsection{cinstruction.h}
156\lstinputlisting{../mycpu/cinstruction.h}
157
158\newpage
159\subsection{instructions.h}
160\lstinputlisting{../mycpu/instructions.h}
161
162\newpage
163\subsection{cdisplay.h}
164\lstinputlisting{../mycpu/cdisplay.h}
165
166\newpage
167\subsection{displays.h}
168\lstinputlisting{../mycpu/displays.h}
169
170\newpage
171\subsection{cprogram.h}
172\lstinputlisting{../mycpu/cprogram.h}
173
174\newpage
175\subsection{ccpu.h}
176\lstinputlisting{../mycpu/ccpu.h}
177
91\end{document} 178\end{document}
92 179