diff options
Diffstat (limited to 'ue4/protokoll/protokoll.tex')
| -rw-r--r-- | ue4/protokoll/protokoll.tex | 98 |
1 files changed, 61 insertions, 37 deletions
diff --git a/ue4/protokoll/protokoll.tex b/ue4/protokoll/protokoll.tex index 87a556a..53f57df 100644 --- a/ue4/protokoll/protokoll.tex +++ b/ue4/protokoll/protokoll.tex | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | \documentclass[12pt,a4paper,titlepage,oneside]{article} | 1 | \documentclass[12pt,a4paper,titlepage,oneside]{article} |
| 2 | |||
| 2 | \usepackage[utf8]{inputenc} | 3 | \usepackage[utf8]{inputenc} |
| 3 | \usepackage{oop_prot} | 4 | \usepackage{oop_prot} |
| 4 | \usepackage{url} | 5 | \usepackage{url} |
| @@ -37,31 +38,44 @@ Manuel Mausz, \matrnr 0728348\\ | |||
| 37 | 38 | ||
| 38 | Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. | 39 | Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. |
| 39 | 40 | ||
| 40 | Wie gefordert, wurden die zwei zusätzliche Datentypen, \mbox{CDatSet} und \mbox{CDatN}, implementiert und der Programmcode generisch gestaltet. | 41 | Wie gefordert wurden die zusätzliche Datentypen \mbox{CDatSet} und |
| 41 | 42 | \mbox{CDatN} implementiert und der Programmcode generisch gestaltet. | |
| 42 | Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und boost::operators<\mbox{CDatSet}> mittels Mehrfachvererbung abgeleitet. | 43 | |
| 43 | So war es möglich die Implementierung, mittels Codewiederverwendung, auf das Überschreiben eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken. | 44 | Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und |
| 44 | 45 | \mbox{boost::operators<CDatSet>} mittels Mehrfachvererbung abgeleitet. So war es | |
| 45 | Da der Typ \mbox{CDatN} Werte variabler Bitlänge repräsentiert, war es notwendig diesen vollständig neu zu implementieren. Es wurde von boost::operators<\mbox{CDatN}> abgeleitet und dabei eine zusätzliche | 46 | möglich die Implementierung, mittels Codewiederverwendung, auf das Überschreiben |
| 46 | Methode \mbox{align()} definiert, die sicherstellt, dass der transportierte Wert immer auf die geforderte Bitanzahl konvertiert wird. | 47 | eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken. |
| 47 | Weiters wurde ein Kopierkonstruktor definiert, der einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet. | 48 | |
| 48 | Letzterer 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. | 49 | Da der Typ \mbox{CDatN} Werte variabler Bitlänge repräsentiert, war es notwendig |
| 49 | Der Defaultkonstruktor wurde wie gewünscht deaktiviert. | 50 | diesen vollständig neu zu implementieren. Es wurde von |
| 50 | 51 | \mbox{boost::operators<CDatN>} abgeleitet und dabei in jeder | |
| 51 | Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms mit \mbox{``-f''} erweitert. | 52 | Methode sicherstellt, dass der transportierte Wert immer auf die geforderte |
| 52 | Der Parameter dieser Option muss \mbox{``s''} oder ein Wert zwischen ``2'' und ``32'' sein. | 53 | Bitanzahl beschränkt wird. Weiters wurde ein Kopierkonstruktor definiert, der |
| 53 | Im Hauptprogramm wird nun anhand dieses Parameters der zuständige Datentyp instanziert und die Templatemethode | 54 | einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet. |
| 54 | \mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des Programms anstößt. | 55 | Letzterer ist mit dem Defaultwert 31 deklariert und repräsentiert die Bitanzahl, |
| 55 | 56 | auf die Ersterer beschränkt wird. Damit ist es möglich alle vorhandenen | |
| 56 | Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden \mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die abgeleiteten \mbox{Instructions} | 57 | Datentypen einheitlich zu verarbeiten. Der Defaultkonstruktor wurde wie |
| 57 | zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzierten Datentyp erhalten. | 58 | gewünscht deaktiviert. |
| 59 | |||
| 60 | Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms | ||
| 61 | mit \mbox{``-f''} erweitert. Der Parameter dieser Option muss \mbox{``s''} oder | ||
| 62 | ein Wert zwischen ``2'' und ``32'' sein. Im Hauptprogramm wird anhand dieses | ||
| 63 | Parameters der zuständige Datentyp instanziert und die Templatemethode | ||
| 64 | \mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des | ||
| 65 | Programms anstößt. | ||
| 66 | |||
| 67 | Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden | ||
| 68 | \mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die | ||
| 69 | abgeleiteten \mbox{Instructions} zu Templates umgewandelt, die als | ||
| 70 | Template-Parameter den Typ des im Hauptprogramm instanzierten Datentyps, | ||
| 71 | erwarten. | ||
| 58 | 72 | ||
| 59 | \newpage | 73 | \newpage |
| 60 | 74 | ||
| 61 | %================================================================== | 75 | %================================================================== |
| 62 | \begin{center} | 76 | \begin{center} |
| 63 | \begin{figure}[htb] | 77 | \begin{figure}[htb] |
| 64 | \epsfxsize=1.6\textwidth\epsfbox{mycpu.png} | 78 | \epsfxsize=1.1\textwidth\epsfbox{mycpu.png} |
| 65 | \caption{Klassendiagramm 1} | 79 | \caption{Klassendiagramm 1} |
| 66 | \label{fig:classdiagram1} | 80 | \label{fig:classdiagram1} |
| 67 | \end{figure} | 81 | \end{figure} |
| @@ -71,43 +85,53 @@ zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzier | |||
| 71 | \newpage | 85 | \newpage |
| 72 | \subsection{Verwaltung der Ressourcen} | 86 | \subsection{Verwaltung der Ressourcen} |
| 73 | 87 | ||
| 74 | Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector verwaltet. | 88 | Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector |
| 75 | Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm, instanzierten Datentyp initialisiert. | 89 | verwaltet. Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm, |
| 76 | Dadurch ist das Löschen der Register im Destruktor nicht mehr notwendig. | 90 | instanzierten Datentyp initialisiert. Dadurch ist das eigenhändige Löschen der |
| 91 | Register im Destruktor nicht mehr notwendig, da dies der Destruktor des Vectors | ||
| 92 | erledigt. | ||
| 77 | 93 | ||
| 78 | Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\ | 94 | Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\ |
| 79 | 95 | ||
| 80 | \subsection{Fehlerbehandlung} | 96 | \subsection{Fehlerbehandlung} |
| 81 | 97 | ||
| 82 | Es wurden mehrere Exceptions, als Subklassen der jeweiligen Templateklassen, von Typ \mbox{std::invalid\_argument} abgeleitet. | 98 | Es wurden mehrere Exceptions von der Klasse \mbox{std::invalid\_argument} |
| 83 | Diese sind \mbox{CCPUError}, \mbox{CInstructionError}, \mbox{CMemError} und \mbox{CProgramError}. | 99 | abgeleitet. Diese sind \mbox{CCPUError}, \mbox{CInstructionError}, |
| 100 | \mbox{CMemError} und \mbox{CProgramError} und werden von ihren | ||
| 101 | zugehörigen Klassen entsprechend geworfen. | ||
| 84 | 102 | ||
| 85 | Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm weitergereicht, | 103 | Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie |
| 86 | wo wider eine Umwandlung in \mbox{runtime\_error()} stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine fehlerbeschreibende Ausgabe auf \mbox{std::cerr} | 104 | in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm |
| 87 | und den Programmabbruch mit Exitstatus 1. | 105 | weitergereicht, in dem wiederum eine Umwandlung in \mbox{runtime\_error()} |
| 106 | stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine | ||
| 107 | fehlerbeschreibende Ausgabe auf \mbox{std::cerr} und den Programmabbruch mit | ||
| 108 | Exitstatus 1. | ||
| 88 | 109 | ||
| 89 | \subsection{Implementierung} | 110 | \subsection{Implementierung} |
| 90 | 111 | ||
| 91 | Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie | 112 | Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie |
| 92 | Punkt~\ref{Listings}.\\ | 113 | Punkt~\ref{Listings}.\\ |
| 93 | 114 | ||
| 94 | |||
| 95 | |||
| 96 | \section{Projektverlauf} | 115 | \section{Projektverlauf} |
| 97 | 116 | ||
| 98 | \subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke} | 117 | \subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke} |
| 99 | 118 | ||
| 100 | \mbox{CDatN}: | 119 | \mbox{CDatN}: |
| 101 | 120 | ||
| 102 | Mit der, in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl, ist es nur möglich positive Zahlen zu verarbeiten. | 121 | Mit der in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl, ist |
| 103 | Somit entspricht -1 dem Maximum der, mit der Bitanzahl, darstellbaren positiven Zahl usw.. | 122 | es nur möglich positive Zahlen zu verarbeiten. Somit entspricht -1 dem Maximum |
| 123 | der, mit der Bitanzahl, darstellbaren positiven Zahl usw.. | ||
| 104 | 124 | ||
| 105 | Ein weiteres Problem besteht darin, wenn die Anzahl der Instruktionen in CProgram, den maximal darstellbaren Wert übersteigt. | 125 | Ein weiteres Problem besteht darin, wenn Register nicht mehr gelesen werden |
| 106 | In diesen Fall ist das Programmverhalten undefiniert. | 126 | können, weil der Index des Registers ausserhalb des Bereichs des Datentyps |
| 127 | liegt. In diesen Fall ist das Programmverhalten undefiniert. | ||
| 107 | 128 | ||
| 108 | Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu deaktivieren, wurden einige Probleme initiiert. | 129 | Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu |
| 109 | Es war nicht weiter möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur Deklaration ein Defaultkonstruktor notwendig ist. | 130 | deaktivieren, traten einige Probleme auf. So war es beispielsweise nicht weiter |
| 110 | Weiters musste eine Alternative zum, nicht mehr anwendbaren \mbox{boost::lexical\_cast} in \mbox{CMem} implementiert werden. | 131 | möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur |
| 132 | Deklaration ein Defaultkonstruktor notwendig ist. Weiters musste eine | ||
| 133 | Alternative zum nicht mehr anwendbaren \mbox{boost::lexical\_cast} in | ||
| 134 | \mbox{CMem} implementiert werden. | ||
| 111 | 135 | ||
| 112 | \subsection{Arbeitsaufwand} | 136 | \subsection{Arbeitsaufwand} |
| 113 | 137 | ||
