From ad6ca84f6e93f983de926ae71f31f42325986f61 Mon Sep 17 00:00:00 2001
From: manuel <manuel@nc8430.lan>
Date: Thu, 14 May 2009 18:15:28 +0200
Subject: * making cdisplay a template * adding some asserts * adding
 classdiagramm and protokoll * fixing protokoll.pdf in ue1

---
 ue3/protokoll/protokoll.tex | 144 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 129 insertions(+), 15 deletions(-)

(limited to 'ue3/protokoll/protokoll.tex')

diff --git a/ue3/protokoll/protokoll.tex b/ue3/protokoll/protokoll.tex
index 8b413e7..dd53735 100644
--- a/ue3/protokoll/protokoll.tex
+++ b/ue3/protokoll/protokoll.tex
@@ -38,44 +38,110 @@ Manuel Mausz, \matrnr 0728348\\
 
 Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
 
-TODO
+Als Datentyp für Register und Hauptspeicher der CPU wurde ein allgemeines
+Template implementiert, welche andere Datentypen oder Klasse umhüllen kann.
+Zudem wurden die gängigsten Operatoren definiert, die man sich von einem
+Datentyp erwarten kann. Gemäß der Aufgabenstellung wurde der Datentyp CDat als
+umhüllter Integer-Wert definiert.
+
+Der Hauptspeicher der CPU wurde als abgeleitetes Template \mbox{CVectorMem} des
+Templates \mbox{std::vector<T, Allocator>} implementiert, damit dieses um die
+Methode \mbox{initialize} und \mbox{dump} erweitert werden konnten. Erstere
+dient zur Initialisierung des Hauptspeichers bzw. Füllung des Vectors,
+zweiteres zur Debugausgabe. Der Datentyp CMem wurde via typedef als
+\mbox{CVectorMem} mit dem Templateargument CDat definiert. Somit enthält der
+Hauptspeicher nur Elemente des Typs CDat.
+
+Die geforderten zwei Display-Klassen \mbox{CDisplayWDEZ} und 
+\mbox{CDisplayWHEX} wurden von der abstrakten Klasse CDisplay abgeleitet, welche
+selbst als Template CDisplayT mit dem Templateargument CDat definiert ist.
+
+Der Programmspeicher \mbox{CProgram} wurde vom Template
+\mbox{std::vector<CInstruction *>} abgeleitet. Somit ist diese Klasse, ähnlich
+wie CMem, selbst ein Vector. Zudem wurden weitere Methoden hinzugefügt. Die
+Methode \mbox{compile} dient zum Kompilieren bzw. Umwandeln des
+Syntax der Programmdatei in Instanzen der Klasse CInstruction, die später von
+der CPU ausgeführt werden. Zur Umwandlung werden bei der Instantiierung von
+\mbox{CProgram} sämtliche erlaubten Instruktionen (also Instanzen von
+\mbox{CInstruction}) in ein \mbox{std::set} eingefügt. Im Zuge der Methode
+\mbox{compile} wird durch Iterieren die jeweilige Instruktion gesucht und durch
+Anwendung des Designpattern \textit{Factory method pattern} die Instruktion
+dupliziert und in \mbox{CProgram} gespeichert. Labels werden zwecks Effizienz in
+einer \mbox{std::map} festgehalten.
+
+Die jeweiligen unterstützen Instruktionen wurden wie gefordert von der Klasse
+\mbox{CInstruction} abgeleitet. \mbox{CInstruction} fordert die
+Implementierung einer Methode \mbox{compile}, die während des parsens der
+Programmdatei von \mbox{CProgram} aufgerufen werden, als auch eine Methode
+\mbox{execute}, die im Zuge der Ausführung des Programms von CCPU
+aufgerufen werden.
+
+Die eigentliche CPU wird durch die Klasse \mbox{CCPU} implementiert. Diese
+dient hauptsächlich als Container für die einzelnen, notwendigen Teile
+(Hauptspeicher, Programmspeicher, Displays, ...) und besitzt daher entsprechend
+viele get- und set-Funktionen. Die Methode \mbox{run} dient zur Ausführung des
+Programms und ist eine Schleife, die über die Instruktionen iteriert und die
+Methode \mbox{execute} aufruft.
 
 %==================================================================
-\begin{figure}[htb]
-  \begin{center}
-    \epsfxsize=0.9\textwidth\epsfbox{mycpu.png}
-  \end{center}
-  \caption{Klassendiagramm 1}
-  \label{fig:classdiagram1}
-\end{figure}
+\begin{center}
+  \begin{figure}[htb]
+    \epsfxsize=1.6\textwidth\epsfbox{mycpu.png}
+    \caption{Klassendiagramm 1}
+    \label{fig:classdiagram1}
+  \end{figure}
+\end{center}
 %==================================================================
 
 \subsection{Verwaltung der Ressourcen}
 
-TODO
+Alle Objekte, die im Konstruktor alloziert werden, werden im Destruktor wieder
+freigegeben. Die Objekte, die über die \textit{Factory method pattern}
+alloziert werden, werden im Zuge des Destruktor des Vectors bzw.
+von \mbox{CProgram} wieder freigegeben.
 
 \subsection{Fehlerbehandlung}
 
-TODO
+Es wurden keine eigenen Exceptions eingeführt. Statt dessen werden Exceptions
+meist in Exceptions des Typs \mbox{std::runtime\_error} umgewandelt. Da die
+Hierarchie nicht sehr tief ist, fängt lediglich \mbox{CPropram::compile}
+Exceptions des Typs \mbox{std::runtime\_error}, um zusätzliche Information an
+den ursprünglichen Aufrufer der Methode weiterzugeben. Dies geschieht ebenfalls
+per Exception des Typs \mbox{std::runtime\_error}.
 
 \subsection{Implementierung}
 
-TODO
-
+Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
+Punkt~\ref{Listings}.\\
+Es wurde viel mit Templates gearbeitet.
 
 \section{Projektverlauf}
 
 \subsection{Probleme und Fallstricke}
 
-TODO
+Abgesehen von den mittlerweile üblichen Schwierigkeiten die Angabe bzw.
+die Gedanken dessen Verfassers verstehen zu wollen, arbeitete das erste Design
+noch vermehrt mit Text. Unter anderem hatte die Methode
+\mbox{CInstruction::execute} einen Parameter des Typs \mbox{std::string}, was
+zum dazu führte, das die Instruktion bei jeder Aufführung (zum Beispiel durch
+Jumps) erneut geparsed werden musste.
 
 \subsection{Arbeitsaufwand}
 
 \begin{tabular}{ll}
   \toprule
-  Entwicklungsschritt / Meilenstein & Arbeitsaufwand in Stunden\\
+  Entwicklungsschritt / Meilenstein & Arbeitsaufwand\\
+  \midrule
+  Erstes Design & 3 Stunden\\
+  \hline
+  Implementierung & 3 Tage\\
+  \hline
+  Anpassung des Designs und der Implementierung & 4 Stunden\\
+  \hline
+  Dokumentation (Doxygen) und Überprüfung aller\\
+  Anforderungen gemäß der Programmierrichtlinien & 4 Stunden\\
   \hline
-  TODO & TODO\\
+  Erstellung des Protokolls & 3 Stunden\\
   \bottomrule
 \end{tabular}
 
@@ -88,5 +154,53 @@ TODO
 \subsection{mycpu.cpp}
 \lstinputlisting{../mycpu/mycpu.cpp}
 
+\newpage
+\subsection{cdat.h}
+\lstinputlisting{../mycpu/cdat.h}
+
+\newpage
+\subsection{cmem.h}
+\lstinputlisting{../mycpu/cmem.h}
+
+\newpage
+\subsection{cinstruction.h}
+\lstinputlisting{../mycpu/cinstruction.h}
+
+\newpage
+\subsection{cinstruction.cpp}
+\lstinputlisting{../mycpu/cinstruction.cpp}
+
+\newpage
+\subsection{instructions.h}
+\lstinputlisting{../mycpu/instructions.h}
+
+\newpage
+\subsection{instructions.cpp}
+\lstinputlisting{../mycpu/instructions.cpp}
+
+\newpage
+\subsection{cdisplay.h}
+\lstinputlisting{../mycpu/cdisplay.h}
+
+\newpage
+\subsection{displays.h}
+\lstinputlisting{../mycpu/displays.h}
+
+\newpage
+\subsection{cprogram.h}
+\lstinputlisting{../mycpu/cprogram.h}
+
+\newpage
+\subsection{cprogram.cpp}
+\lstinputlisting{../mycpu/cprogram.cpp}
+
+\newpage
+\subsection{ccpu.h}
+\lstinputlisting{../mycpu/ccpu.h}
+
+\newpage
+\subsection{ccpu.cpp}
+\lstinputlisting{../mycpu/ccpu.cpp}
+
 \end{document}
 
-- 
cgit v1.2.3

