summaryrefslogtreecommitdiff
path: root/LaTeX
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-08-13 20:21:12 +0000
committerPaul Buetow <paul@buetow.org>2008-08-13 20:21:12 +0000
commit19dd746bfe36b589369d701187925106d4251d5a (patch)
tree943bd7723e4f53ffa80d7e07732447444a276304 /LaTeX
parent179fb18a72050772b2df9fd0065c642ef39aec5a (diff)
new fixes
Diffstat (limited to 'LaTeX')
-rw-r--r--LaTeX/chapters/conclusion.tex18
-rw-r--r--LaTeX/chapters/implementierung.tex28
-rw-r--r--LaTeX/diplomarbeit.pdf2482
3 files changed, 1263 insertions, 1265 deletions
diff --git a/LaTeX/chapters/conclusion.tex b/LaTeX/chapters/conclusion.tex
index 75ac839..6538610 100644
--- a/LaTeX/chapters/conclusion.tex
+++ b/LaTeX/chapters/conclusion.tex
@@ -4,20 +4,20 @@ Es wurde erfolgreich ein Simulator fr die Simulation verteilter Systeme entwick
Darber hinaus verfgt der Simulator ber eine Vielzahl von sehr flexiblen Einstellungsmglichkeiten. Fr jede Simulation lassen sich somit komplett andere Konfigurationen verwenden. Jeder beteiligte Prozess hat wiederum eigene lokale Einstellungen, wo sich auch jedes Protokoll fr jeden Prozess separat einstellen lsst. Die Anzahl und Flexibilitt der mglichen Szenarien wird dadurch um einen sehr groen Faktor erweitert.
-Mit dem Ereigniseditor gibt es eine komfortable Mglichkeit eigene Szenarien zu programmieren und um sie anschlieend zu Simulieren. Hierbei kann entweder auf die bereits enthaltenen Protokolle oder auf selbst implementierte Protokolle zugegriffen werden. Alle dazugehrigen Einstellungen und programmierten Ereignisse lassen sich vom Anwender fr eine sptere Wiederverwendung plattformunabhngig abspeichern. Somit knnen auch abgespeicherte Szenarien beispielsweise an Kommilitonen weitergegeben werden oder fr eine sptere Prsentierung zwischengespeichert werden. Mit dem Logfilter lassen sich mit Hilfe von regulren Ausdrcken nur die relevanten Lognachrichten anzeigen, was die Analyse einer Simulation erheblich vereinfacht. Weitere Funktionalitten wie Lamport- und Vektor-Zeitstempel sowie Anti-Aliasing runden den Simulator ab.
+Mit dem Ereigniseditor gibt es eine komfortable Mglichkeit eigene Szenarien zu programmieren um sie anschlieend zu Simulieren. Hierbei kann entweder auf die bereits enthaltenen Protokolle oder auf selbst implementierte Protokolle zugegriffen werden. Alle dazugehrigen Einstellungen und programmierten Ereignisse lassen sich vom Anwender fr eine sptere Wiederverwendung plattformunabhngig abspeichern. Somit knnen auch abgespeicherte Szenarien beispielsweise an Kommilitonen weitergegeben werden oder fr eine sptere Prsentierung zwischengespeichert werden. Durch den Logfilter lassen sich mit Hilfe von regulren Ausdrcken nur die relevanten Lognachrichten anzeigen, was die Analyse einer Simulation erheblich vereinfacht. Weitere Funktionen wie Lamport- und Vektor-Zeitstempel sowie Anti-Aliasing runden den Simulator ab.
Durch den objektorientierten Aufbau ist der Simulator relativ einfach erweiterbar, was nicht nur das Protokoll-API betrifft. Insgesamt wurde an den meisten Stellen darauf geachtet, dass zu einem sp\"{a}teren Zeitpunkt Erweiterungen einflieen k\"{o}nnten. Insbesondere soll die Serialisierung von Objekten r\"{u}ckw\"{a}rtskompatibel bleiben, da sonst bei jeder neuen Simulatorversion alle Simulationen erneut angelegt und abgespeichert werden m\"{u}ssten.
-Htte fr diese Diplomarbeit noch mehr Zeit zur Verfgung gestanden, dann h\"{a}tten einige der folgenden Funktionen (hier in alphanumerisch sortierten Reihenfolge aufgelistet) auch Einzug erhalten k\"{o}nnen:
+Htte fr diese Diplomarbeit noch mehr Zeit zur Verfgung gestanden, dann h\"{a}tten einige der folgenden Funktionen (hier in alphanumerisch sortierter Reihenfolge aufgelistet) auch Einzug halten k\"{o}nnen:
\begin{itemize}
- \item Die M\"{o}glichkeit Protokolle zu entwickeln ohne den kompletten Quelltext des Simulators vorliegen zu haben. Protokollklassen also als separate Bibliothek einbinden, die dynamisch geladen werden k\"{o}nnen.
- \item Die Simulationsdauer beliebig lang machen knnen. Dazu msste \textit{VSSimulatorVisualisation} entlang der Zeitachse scrollbar gemacht werden, so dass der Benutzer fr eine nachtrgliche Betrachtung des Simulationsverlaufes zu jeder beliebigen Position zurckspringen kann.
- \item Eine Zoomfunktion fr die Simulationsvisualisierung einbauen.
- \item Im Ereigniseditor selbst auch periodische Ereignisse programmierbar machen. Bisher kann nur jeder Ereigniseintritt separat programmiert werden oder auf Protokoll-Interne Wecker zurckgegriffen werden.
- \item Lamport- und Vektor-Zeitstempel als Ereigniseintrittskriterien verwenden knnen.
+ \item Die M\"{o}glichkeit Protokolle zu entwickeln ohne den kompletten Quelltext des Simulators vorliegen zu haben. Protokollklassen als separate Bibliothek einzubinden, die dynamisch geladen werden k\"{o}nnen.
+ \item Die Simulationsdauer beliebig lang machen zu knnen. Dazu msste die Klasse \textit{VSSimulatorVisualisation} entlang der Zeitachse scrollbar gemacht werden, so dass der Benutzer fr eine nachtrgliche Betrachtung des Simulationsverlaufes zu jeder beliebigen Position zurckspringen kann.
+ \item Eine Zoomfunktion fr die Simulationsvisualisierung einzubauen.
+ \item Im Ereigniseditor selbst auch periodische Ereignisse programmierbar zu machen. Bisher kann nur jeder Ereigniseintritt separat programmiert werden oder auf Protokoll-Interne Wecker zurckgegriffen werden.
+ \item Lamport- und Vektor-Zeitstempel als Ereigniseintrittskriterien verwenden zu knnen.
\item Tiefere Schichten des OSI-Referenzmodells simulieren knnen, wie zum Beispiel TCP, UDP, IP, ...
- \item Weitere Funktionalitten einbauen, wie zum Beispiel das Anklicken einer Nachrichtenlinie, was zu der jeweiligen Nachricht alle verfgbaren Informationen anzeigt und welche gegebenenfalls vom Benutzer editiert werden knnen.
+ \item Weitere Funktionen einzubauen, wie zum Beispiel das Anklicken einer Nachrichtenlinie, was zu der jeweiligen Nachricht alle verfgbaren Informationen anzeigt und welche gegebenenfalls vom Benutzer editiert werden knnen.
\end{itemize}
-Da der Simulator hchstwahrscheinlich unter einer Open Source Lizenz freigegeben wird, werden die einen oder anderen Funktionen nachtrglich eingebaut werden. Kommilitonen werden auch herzlich dazu eingeladen sein sich an diesem Software-Projekt zu beteiligen. Als Vorbild sei hier der CPU-Simulator M32 \cite{M32}, der von Prof. Omann an der Fachhochschule Aachen entwickelt wurde, genannt. Hier existieren bereits einige Erweiterungen und Verbesserungen der Ursprungsversion, die von den Studenten angefertigt wurden. Fr die Entwicklung des VS-Simulators wurde keine proprietre Software verwendet, so dass jeder kostenlosen Zugriff auf die dazugehrigen Tools htte.
+Da der Simulator hchstwahrscheinlich unter einer Open Source Lizenz freigegeben wird, werden die einen oder anderen Funktionen nachtrglich eingebaut werden. Kommilitonen werden auch herzlich dazu eingeladen sein sich an diesem Software-Projekt zu beteiligen. Als Vorbild sei hier der CPU-Simulator M32 \cite{M32}, der von Prof. Omann an der Fachhochschule Aachen entwickelt wurde, genannt. Hier existieren bereits einige Erweiterungen und Verbesserungen der Ursprungsversion, die von den Studenten angefertigt wurden. Fr die Entwicklung des VS-Simulators wurde keine proprietre Software verwendet, so dass jeder kostenlosen Zugriff auf die dazugehrigen Tools hat.
diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex
index 73a37d3..2e75128 100644
--- a/LaTeX/chapters/implementierung.tex
+++ b/LaTeX/chapters/implementierung.tex
@@ -223,11 +223,11 @@ Das Paket \textit{core.time} in Abbildung \ref{fig:PackageCoreTime}. stellt ledi
\label{fig:PackageCoreTime}
\end{figure}
-In Abbildung \ref{fig:PackageCore}. ist das Paket \textit{core} dargestellt. Fr jedes auszufhrende Ereignis wird eine Instanz von \textit{VSTask} bentigt, welche die Ereigniseintrittszeit als Attribut abgespeichert hat. Die Instanz besitzt ebenso eine Referenz auf das Ereignisobjekt (\textit{VSAbstractEvent}) und das Prozessobjekt (\textit{VSInternalProcess}). Geplante \textit{VSTask}-Instanzen werden fr eine sptere Ausfhrung dem Task-Manager bergeben.
+In Abbildung \ref{fig:PackageCore}. ist das Paket \textit{core} dargestellt. Fr jedes auszufhrende Ereignis wird eine Instanz von \textit{VSTask} bentigt, welche die Ereigniseintrittszeit als Attribut abgpeichert. Die Instanz besitzt eine Referenz auf das Ereignisobjekt (\textit{VSAbstractEvent}) sowie das Prozessobjekt (\textit{VSInternalProcess}). Geplante \textit{VSTask}-Instanzen werden dem Task-Manager fr eine sptere Ausfhrung bergeben.
-Die Kapselung eines \textit{VSAbstractEvent}-Objektes in einem \textit{VSTask}-Objekt erlaubt es, dass die selbe \textit{VSAbstractEvent}-Instanz mehrmals auf einmal im Task-Manager geplant werden kann. Ohne dieser Kapselung gbe es fr jedes Ereignis lediglich nur eine einzige mgliche Eintrittszeit. Von dieser Mglichkeit wird zum Beispiel bei den Server- und Clientanfragen eines Protokollobjektes Gebrauch gemacht. Fr jedes Protokoll kann der Anwender in einer Simulation beliebig viele Anfragen programmieren, wobei fr jede Anfrage stets das selbe Protokollobjekt als Ereignis verwendet wird.
+Die Kapselung eines \textit{VSAbstractEvent}-Objektes in einem \textit{VSTask}-Objekt erlaubt es, dass die gleiche \textit{VSAbstractEvent}-Instanz mehrmals im Task-Manager geplant werden kann. Ohne dieser Kapselung gbe es fr jedes Ereignis nur eine einzige mgliche Eintrittszeit. Von dieser Mglichkeit wird zum Beispiel bei den Server- und Clientanfragen eines Protokollobjektes Gebrauch gemacht. Fr jedes Protokoll kann der Anwender in einer Simulation beliebig viele Anfragen programmieren, wobei fr jede Anfrage stets das selbe Protokollobjekt als Ereignis verwendet wird.
-Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Instanz dieser Klasse stellt den Task-Manager dar. Er verwaltet alle \textit{VSTask}-Instanzen und berprft periodisch, ob es auszufhrende Ereignisse gibt. Der Task-Manager unterscheidet zwischen globalen und lokalen Ereignissen. Hierbei werden alle globalen Ereignisse (gekapselt in einem \textit{VSTask}-Objekt) in einer Prioritts-Warteschlange (vgl. \cite{Algorithms}, \cite{AlgorithmsC}) abgelegt. Die Prioritts-Warteschlange stellt hierbei die korrekte Ereigniseintrittsreihenfolge sicher. Da sich die lokalen Zeiten aller beteiligten Prozesse voneinander unterscheiden knnen, muss fr jeden Prozess eine separate lokale Prioritts-Warteschlange verwendet werden, auf die jedes Prozessobjekt seine eigene Referenz hat. In den lokalen Warteschlangen sind die geplanten lokalen Ereignisse (auch gekapselt in einem \textit{VSTask}-Objekt) abgelegt. Der Task-Manager greift ber eine \textit{java.util.ArrayList} auf alle Prozessobjekte zu, und kann somit auch auf alle lokalen Warteschlangen zugreifen und verwalten.
+Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Instanz dieser Klasse stellt den Task-Manager dar. Er verwaltet alle \textit{VSTask}-Instanzen und berprft periodisch, ob es auszufhrende Ereignisse gibt. Der Task-Manager unterscheidet zwischen globalen und lokalen Ereignissen. Hierbei werden alle globalen Ereignisse (gekapselt in einem \textit{VSTask}-Objekt) in einer Prioritts-Warteschlange (vgl. \cite{Algorithms}, \cite{AlgorithmsC}) abgelegt. Die Prioritts-Warteschlange stellt hierbei die korrekte Ereigniseintrittsreihenfolge sicher. Da sich die lokalen Zeiten aller beteiligten Prozesse voneinander unterscheiden knnen, muss fr jeden Prozess eine separate lokale Prioritts-Warteschlange verwendet werden, auf die jedes Prozessobjekt seine eigene Referenz hat. In den lokalen Warteschlangen sind die geplanten lokalen Ereignisse (auch gekapselt in einem \textit{VSTask}-Objekt) abgelegt. Der Task-Manager greift ber eine \textit{java.util.ArrayList} auf alle Prozessobjekte zu und kann somit auch auf alle lokalen Warteschlangen zugreifen und diese verwalten.
\begin{figure}[h]
\centering
@@ -236,22 +236,22 @@ Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Inst
\label{fig:PackageCore}
\end{figure}
-Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. Fr jedes Versenden einer Nachricht wird hiervon eine Instanz gebildet, wo der Senderprozess die zu verschickende Daten ablegt. Da \textit{VSMessage} von \textit{VSPrefs} erbt, knnen zwischen zwei Prozessen beliebige Datentypen (s. Tabelle \ref{tb:VariablenDatentypen}.) ber eine Nachricht verschickt werden. Anschlieend wird fr jeden Empfngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welches eine Referenz der verschickten Nachricht besitzt (s. Abbildung \ref{fig:Wrapping}.). Danach wird ein \textit{VSTask}-Objekt instantiiert, wo die Referenz auf das Ereignisobjekt und das dazugehrige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager bergeben, der das dazugehrige Ereignis ausfhrt, wenn die Ereigniseintrittszeit eingetroffen ist. Via Java-Polymorphie wird hier das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt und so in \textit{VSTask} abgelegt.
+Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. Da \textit{VSMessage} von \textit{VSPrefs} erbt, knnen zwischen zwei Prozessen beliebige Datentypen (s. Tabelle \ref{tb:VariablenDatentypen}.) ber eine Nachricht verschickt werden. Anschlieend wird fr jeden Empfngerprozess ein neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welches eine Referenz der verschickten Nachricht besitzt (s. Abbildung \ref{fig:Wrapping}.). Danach wird ein \textit{VSTask}-Objekt instantiiert, in dem die Referenz auf das Ereignisobjekt und das dazugehrige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager bergeben, der das dazugehrige Ereignis ausfhrt, wenn die Ereigniseintrittszeit eingetroffen ist. Via Java-Polymorphie wird hier das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt und so in \textit{VSTask} abgelegt.
\begin{figure}[h]
\centering
\includegraphics[width=11.0cm]{images/wrapping}
- \caption{Gekapseltes \textit{VSMessage} im \textit{VSMessageReceiveEvent}-Objekt}
+ \caption{Gekapselte \textit{VSMessage} im \textit{VSMessageReceiveEvent}-Objekt}
\label{fig:Wrapping}
\end{figure}
-Erwhnenswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden vor dem Protokoll-API, welches fr die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll mglichst nichts falsch machen knnen und deswegen soll dem Protokoll-API ein eingeschrnkter Funktionsumfang zur Verfgung gestellt werden. Da sich \textit{VSMessageStub} im selben Paket wie \textit{VSMessage} befindet, kann \textit{VSMessageStub} auf paket-private Methoden von \textit{VSMessage} zugreifen. Protokolle hingegen werden in einem anderen Paket implementiert und haben somit keinen Zugriff auf diese paket-privaten Methoden. Zwar kann der Protokollentwickler ein eigenes \textit{VSMessageStub}-Objekt anlegen, jedoch kann er auf diese Weise besser unterscheiden, auf welche Methoden er zugreifen sollte, und auf welche nicht. Das Protokoll-API wird spter genauer behandelt.
+Erwhnenswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden vor dem Protokoll-API, welches fr die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll mglichst nichts falsch machen knnen und deswegen soll dem Protokoll-API ein eingeschrnkter Funktionsumfang zur Verfgung gestellt werden. Da sich \textit{VSMessageStub} im selben Paket wie \textit{VSMessage} befindet, kann \textit{VSMessageStub} auf paket-private Methoden von \textit{VSMessage} zugreifen. Protokolle hingegen werden in einem anderen Paket implementiert und haben somit keinen Zugriff auf diese paket-privaten Methoden. Zwar kann der Protokollentwickler ein eigenes \textit{VSMessageStub}-Objekt anlegen, jedoch kann er auf diese Weise besser unterscheiden, auf welche Methoden er zugreifen sollte, und auf welche nicht.
Der Task-Manager speichert anschlieend die Nachrichtenempfangsereignisse in seiner globalen Warteschlange. Die Nachricht kommt bei einem Empfngerprozess an, sobald das Ereignis fr den Empfang eintritt. Fr die korrekte Implementierung der Lamport- und Vektor-Zeitstempel wird jeder Nachricht automatisch eine Referenz auf die Lamport- sowie auf die Vektor-Zeitstempel des sendenden Prozesses als Attribut beigefgt. Fr die berprfung des Protokolls wird in jeder Nachricht auch der Klassenname des jeweiligen Protokolls abgespeichert.
-Eine Instanz von \textit{VSInternalProcess} reprsentiert einen simulierten Prozess. Ein \textit{VSInternalProcess} stellt alle vom Simulator intern verwendeten Methoden zur Verfgung, whrend ein \textit{VSAbstractProcess} lediglich Methoden hat, die der Protokollentwickler fr die Erstellung eigener Protokolle verwenden darf. Da \textit{VSAbstractProcess} abstrakt ist und hiervon keine Instanz gebildet werden darf, muss fr einen neuen Prozesses stets ein \textit{VSInternalProcess}-Objekt erstellt werden. Via Polymorphie wird dieses Objekt nach \textit{VSAbstractProcess} umgewandelt und so dem Protokoll-API zur Verfgung gestellt. Beispielsweise darf mit \textit{getTasks()} nur vom Simulator intern auf die Prioritts-Warteschlangen zugegriffen werden, whrend man im Protokoll-API selbiges vermeiden sollte und auch gar nicht direkt mglich ist. Hier wre auch ein Stub-Objekt \textit{VSProcessStub} denkbar gewesen. Da aber so gut wie alle paar Millisekunden auf die Methoden von \textit{VSInternalProcess} zugegriffen wird, wurde hier aus Performance-Grnden der Weg ber eine Vererbungungsstufe preferiert.
+Eine Instanz von \textit{VSInternalProcess} reprsentiert einen simulierten Prozess. Ein \textit{VSInternalProcess} stellt alle vom Simulator intern verwendeten Methoden zur Verfgung, whrend ein \textit{VSAbstractProcess} lediglich Methoden hat, die der Protokollentwickler fr die Erstellung eigener Protokolle verwenden darf. Da \textit{VSAbstractProcess} abstrakt ist und hiervon keine Instanz gebildet werden darf, muss fr einen neuen Prozesses stets ein \textit{VSInternalProcess}-Objekt erstellt werden. Via Polymorphie wird dieses Objekt nach \textit{VSAbstractProcess} umgewandelt und so dem Protokoll-API zur Verfgung gestellt. Beispielsweise darf mit \textit{getTasks()} nur vom Simulator intern auf die Prioritts-Warteschlangen zugegriffen werden, whrend man im Protokoll-API selbiges vermeiden sollte und dies auch gar nicht direkt mglich ist. Hier wre auch ein Stub-Objekt \textit{VSProcessStub} denkbar gewesen. Da aber fast jede Millisekunde auf die Methoden von \textit{VSInternalProcess} zugegriffen wird, wurde hier aus Performance-Grnden der Weg ber eine Vererbungsstufe preferiert.
-Alle einstellbaren Prozessvariablen werden von der Klasse \textit{VSPrefs} vererbt. Damit bei Neuberechnungen die Variablen nicht dauernd ber eine \textit{HashMap} von \textit{VSPrefs} zugegriffen werden muss, speichert \textit{VSInternalProcess} aus Performance-Grnden einige Variablen als lokale Kopie ab. Zum Beispiel wird fr die lokale Prozesszeit nicht auf das \textit{HashMap<String,Long>}-Objekt von \textit{VSPrefs}, sondern auf das Klassenattribut \textit{private long localTime} zugegriffen. Vor- und nach dem Editieren ber den Prozesseditor werden die \textit{VSPrefs}, beziehungsweise die lokalen Kopien, auf den neusten Stand gebracht. Selbiges gilt fr weitere Variablen, wie zum Beispiel der Uhrabweichung eines Prozesses.
+Alle einstellbaren Prozessvariablen werden von der Klasse \textit{VSPrefs} vererbt. Damit bei Neuberechnungen die Variablen nicht dauernd ber eine \textit{HashMap} von \textit{VSPrefs} zugegriffen werden muss, speichert \textit{VSInternalProcess} aus Performance-Grnden einige Variablen als lokale Kopie ab. Zum Beispiel wird fr die lokale Prozesszeit nicht auf das \textit{HashMap<String,Long>}-Objekt von \textit{VSPrefs}, sondern auf das Klassenattribut \textit{private long localTime} zugegriffen. Vor und nach dem Editieren ber den Prozesseditor werden die \textit{VSPrefs}, beziehungsweise die lokalen Kopien, auf den neuesten Stand gebracht. Selbiges gilt fr weitere Variablen, wie zum Beispiel der Uhrabweichung eines Prozesses.
\subsubsection{Beispiel fr die Erstellung von Prozessereignissen}
@@ -262,12 +262,12 @@ void createCrashAndRecoverExample(VSTaskManager taskManager,
VSAbstractEvent crashEvent = new VSProcessCrashEvent();
VSTask localTask = new VSTask(process.getTime()+500, process,
crashEvent, VSTask.LOCAL);
- taksManager.addTask(localTask);
+ taskManager.addTask(localTask);
VSAbstractEvent recoverEvent = new VSProcessRecoverEvent();
VSTask globalTask = new VSTask(2000, process,
recoverEvent, VSTask.GLOBAL);
- taksManager.addTask(globalTask);
+ taskManager.addTask(globalTask);
}
\end{code}
@@ -627,7 +627,7 @@ Der folgende Quelltext-Ausschnitt zeigt eine Beispielimplementierung von \textit
}
\end{code}
-Vor- und nach der eigentlichen Objektserialisierung wird jeweils eine boolesche Flagge mit dem Standardwert \textit{false} serialisiert. Sobald in einer sp\"{a}teren Simulator-Versionen weitere zu serialisierenden Klassenattribute hinzukommen, dann kann bei der Deserialisierung diese Flagge abgefragt und separat behandelt werden. Somit bleiben ltere bereits abgespeicherte Simulationen stets zur neusten Version des Simulators kompatibel. Wenn eine Flagge auf \textit{true} gesetzt wird, dann kann unter den neuen Attributserialisierungen eine weitere Flagge gesetzt werden, wodurch beliebig viele Erweiterungen in die Serialisierung sukzessiv einbaubar sind.
+Vor und nach der eigentlichen Objektserialisierung wird jeweils eine boolesche Flagge mit dem Standardwert \textit{false} serialisiert. Sobald in einer sp\"{a}teren Simulator-Versionen weitere zu serialisierenden Klassenattribute hinzukommen, dann kann bei der Deserialisierung diese Flagge abgefragt und separat behandelt werden. Somit bleiben ltere bereits abgespeicherte Simulationen stets zur neusten Version des Simulators kompatibel. Wenn eine Flagge auf \textit{true} gesetzt wird, dann kann unter den neuen Attributserialisierungen eine weitere Flagge gesetzt werden, wodurch beliebig viele Erweiterungen in die Serialisierung sukzessiv einbaubar sind.
Das zu serialisierende Objekt besitzt hier lediglich zwei zu serialisierende Attribute. Mit \textit{serialize.setObject} speichert \textit{serialize} eine Referenz auf das aktuelle Objekt ab, worauf folgende Objektserialisierungen zurckgreifen knnen. Danach wird ein \textit{process} und \textit{someOtherSerializableObject} serialisiert. Die Deserialisierung folgt genau der umgekehrten Reihenfolge, wobei ein Objekt von \textit{VSSerialize} hierbei hilft die Referenzen auf andere Objekte korrekt zu setzen.
@@ -698,13 +698,13 @@ Die \textit{main}-Methode befindet sich in der Klasse \textit{simulator.VSMain}.
\section{Entwicklungsumgebung}
-In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gewhrt werden. Fr diese Diplomarbeit wurde ausschlielich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zustzlich getestet wurde. Der Simulator wurde jedoch hauptschlich unter dem Betriebssystem FreeBSD 7.0, was ein open source Unix-Derivat ist, programmiert.
+In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gewhrt werden. Fr diese Diplomarbeit wurde ausschlielich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zustzlich getestet wurde. Der Simulator wurde jedoch hauptschlich unter dem Betriebssystem FreeBSD 7.0, was ein Open Source Unix-Derivat ist, programmiert.
-Wie bereits bekannt ist, wurde Sun's Java, was mittlerweile auch Open Source Software ist, in der Version 6 (1.6) als die Implementierungssprache gewhlt und fr die Quelltextdokumentation kam Javadoc-, fr die automatische Quelltexteinrckung astyle und als Java-Referenz kam \cite{Javadoc} zum Einsatz. Als Built-Tool wurde hier auf Apache Ant (s. \cite{AntManual} und \cite{AntTutorial}). Fr die Erstellung dieses PDF-Dokumentes wurde LaTeX in Verbindung mit dem Built-Tool GNU Make und Rubber verwendet. Eine Rechtschreibberprfung wurde mit aspell sowie OpenOffice.org durchgefhrt. xPDF diente als PDF-Anzeigeprogramm.
+Wie bereits bekannt ist, wurde Sun's Java, was mittlerweile auch Open Source Software ist, in der Version 6 (1.6) als die Implementierungssprache gewhlt und fr die Quelltextdokumentation kam Javadoc, fr die automatische Quelltexteinrckung astyle und als Java-Referenz kam \cite{Javadoc} zum Einsatz. Als Built-Tool wurde hier auf Apache Ant (s. \cite{AntManual} und \cite{AntTutorial}) zur\"{u}ckgegriffen. Fr die Erstellung dieses PDF-Dokumentes wurde LaTeX in Verbindung mit dem Built-Tool GNU Make und Rubber verwendet. Eine Rechtschreibberprfung wurde mit aspell sowie OpenOffice.org durchgefhrt. xPDF diente als PDF-Anzeigeprogramm.
Als Versionierungssystem wurde SVN (Subversion) verwendet. Fr den Zugriff auf das SVN-Repository mittels HTTPS (Hypertext Transfer Protocol Secure) wurde der Apache-Webserver mit WebDAV-Plugin verwendet. Zudem kam WebSVN als Webschnittstelle des SVN-Repository zum Einsatz. Mozilla Firefox diente fr das Betrachten der Javadocs und der WebSVN-Oberflche.
-Fr das schreiben von Java-Quelltext wurde GVim (Graphical Vi IMproved) sowie Eclipse verwendet. Eclipse untersttzt bessere Code-Refactoring-Methoden, whrend GVim mit seiner Flexibilitt und schnelleren Editiermglichkeiten und mit Vim-Script, der eigenen Script-Engine, glnzt. Es wurden auerdem das JAutoDoc- (fr die Erstellung von Javadoc-Kommentare) und das Subversion-Eclipse-Plugin verwendet. Je nach Zweck wurde zwischen diesen beiden Umgebungen gewechselt. Fr das Verfassen des LaTeX-Dokumentes wurde GVim verwendet.
+Fr das Schreiben von Java-Quelltext wurde GVim (Graphical Vi IMproved) sowie Eclipse verwendet. Eclipse untersttzt bessere Code-Refactoring-Methoden, whrend GVim mit seiner Flexibilitt und schnelleren Editiermglichkeiten und mit Vim-Script, der eigenen Script-Engine, glnzt. Es wurden auerdem das JAutoDoc- (fr die Erstellung von Javadoc-Kommentare) und das Subversion-Eclipse-Plugin verwendet. Je nach Zweck wurde zwischen diesen beiden Umgebungen gewechselt. Fr das Verfassen des LaTeX-Dokumentes wurde GVim verwendet.
Smtliche UML-Diagramme wurden mit ArgoUML angefertigt und die Screenshots mit The GIMP (GNU Image Manipulation Program) sowie ImageMagick nachbearbeitet. Mit dem zip-Programm wurden alle VS-Simulator Distributionen verpackt.
diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf
index 405c83a..51273e7 100644
--- a/LaTeX/diplomarbeit.pdf
+++ b/LaTeX/diplomarbeit.pdf
@@ -1090,17 +1090,18 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
309 0 obj <<
-/Length 1633
+/Length 1628
/Filter /FlateDecode
>>
stream
-xMoF<Jc #=e-KHE~}\.rNH"`z53pKR`E
-F0bw wi7A^={
-zWPL^zM<nToCY>i)j!-6xB83Z!-[0H)ٰt^,!zmPW^)^.w۪:]q2bE\E 25tXTJOOǎh#lfq3ָ)pT(PA4B9q/`>x:?O ǫz-몶6a9OR~#Qb>c,y#:ǑZ2Y|1C}* ؤͷkW>@2uSE*3f*"$/ѹN
-
-Fkyy^:)vʈ^Dof.i 6{۽>]fIR"ɥ,~P<@>:K$XD$X%R扄 m>dJiRH^TQsyWkw߶#5fr.sd%6Qmtvڠ(0ӣ/vOx,`% WJ;<cvޔnHP *wT3kh_(Y!#AhӒ䡆.{%w[
-^ąMݩf*h`CG`Z7uX"f$|עyG
-6endstream
+xKo6:XDZE
+4‡HG)!v{weIZM0\}dFFJݼ˨`J&No~]}s&xu[_k*V~MGPn~zqӅ#-%}^n1]Hʌv?Hd,\^Gh0n8 ܳa8TGi:z0 %WzC^]]߮)^Ӯ*yY{OP;vqRƑT,HfrL#F g2R̸6BbvV3jj5&z&(dhz OoI<?ixUm~EUVvh! $0b2g 38CO lxC.هpI{*`ԲI=oCu<d:;̳8T
+gɈփlD*){*{O
+E]TIPF`<o}<8n=]|o;mq;d֗I.e'Nj&o~8דDBED"4P3͇tRiM
+ YrTOszi1mUaГKubZȵǓ}DdYPZiLDd~7,[O F]RpĈ(aǛ~ ٻ DEN\Z|(vb>J$ԐԠЩZiI.{%w6@FFj jfxMYvaFzeo43U R!!#ASo tr(M(N4CΗA=lvUmJF
+ʼnZ*`݊Q!#ASo 7uX"f$kyG
+:um ΋'u_|}R3Qo(Ŋ$RwV31!!}wGH(#M5(OKP\gQVHvHr-]y%[8+Gc7p7r Aoz}L$Y<tfnQz|S$ppZ85}F]DF;[{MO덣;n]9,I'Y?ˢR6:Q욓I@">!_ [PEEVpy<Ͳ<Z^ͳ87ɾ[
+,GOՂkBQ\"xebmCmu n?[tN]j!m׶d8:ͨܪ5޲'_ zkX~en4Ҍ1Ψe,b*vAt8j& eocoP3ް77K:12>&6-t͉[XRnܔݔ5\kgN/}#!_ bd :-inj`Ԣ^A4
endobj
308 0 obj <<
/Type /Page
@@ -1176,7 +1177,7 @@ endobj
320 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 585.4782 357.6869 596.0604]
+/Rect [86.8628 585.4782 353.2037 596.0604]
/Subtype /Link
/A << /S /GoTo /D (figure.4.6) >>
>> endobj
@@ -6842,24 +6843,31 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
807 0 obj <<
-/Length 2566
-/Filter /FlateDecode
->>
-stream
-xڥY[s۶~ϯУ4cĕysk7'gM( SJR(J4ĸ,o)H_dЋ|q}.*{=^6 \ۛW|o"g1jqsJ2%?lzccG۬KVN[ێW }[t)ˍ_R)mE"83&K22)d0 .XAS&eY&%IV"]v-X./wtcv&Sޮww-M
-ԽY˶DɊO}tӰ"UgRdt>i/!Yv6_*Q\[)P#qrJ3Ne]o"6[KGgi%pk4u]7H48LL/j $E疟M׭Δ@#N8$ұg f$4vSWM}{O 6~lJ0サ2SoHa?]ėc nwNqqBmOS
-xV<cȤӑݑ\,4_~U:%pr[69<x*(Ro=\LJcW_ߵOn7uOue[:9 ,Z4XMbO
-x.MzGJ37 ɧ&11ؿΞq3j1?\ .gMn%Lrßι`' A B3Dl <j| 9DӚd\ `:ӧJbzس<jK@z+~yQ< `BRؔ}e)=Syln>F$|AqBK{c>RLF4@B͊ G["$cH]4fX PZK}Jez2q4PljD`ͯs; G%R
-MN-( |iպ`X
-hq,_~Hu8S'_cJ)#c~lhG9K70c&}޴cȤe{>u
-tm\9BB' 춨҇p>ߦݭQf4ꊮN0 ?Oxf?ҸO_zo񭭇] F9{wB4TIR*1i(v*
-皀tc@q]Ӻp[( RR<iZZDcTX Co}xkM9֝^[r]W$ |gih]#4
-)j8vq/T,ӊn<S~
-@r0A!ǁ%}Dsd{? k[Oqyu
-#RhVҀ
-®$1Q9b# O/HΗڗ# HEiZMߥq8|@
-*- OqMpݐɡbɊYI-rvk詜 /LiRpIK
-E`pK|.hJ]x ? F>py@JOґ1$$@
+/Length 2549
+/Filter /FlateDecode
+>>
+stream
+xڭYY6~УT5DǾM9N<T%5pHۍ(I\ _RTUKpٿW%ryhM*cyJ(ɄtšLDD:oM3TD\MWWףX-b%xJ%L$]E$)wT
+5Z",<ASF蜥i*%Ion7"^ݾ X/?X7uLC }'| M7Y.Ǣ)㺹Nz&,~ Mo<KH)ͯ~Xotƙ՘]L< ZĆjoLV1W ܢ۪ApP/I=k*czՕ+?yb'nZZ<[-D̕{zN4jÛrLmvUYW7w4a
+{xrJ#Y%\,4_T:&شwc
+
+[ vS{ǼVFs67&zӡfg MqZ5NJ84[H5?'
+Y#OxJг:aq#|v/uWNo<FtOG)mYӱ|#z@\Q_ge,l
+Y⹞eqN$Oc9[&d,Rl<&3h!X tfP@5} E>sO[GqO4ݴjy6^(!sS=Wb拑9jK@+;~ Y\TBR{]i(=8wQ'cGwB1_uMxfNhM?M,δM@s%|pa˖ 9nMQ&Pq&h5@,)d|9 ӤE -q1ZԭtF? 1[}^(C
+-ə!Ր *j$fDE}6X8vပT
+=kHxGЌz%J
+lzSۍ8Eq#|?XX,[;Ld
+io\;dxM]һ 'NIYۧL "|z|h@qv/st4R 9+njT{Z
+EK
+)ـE0kNݓxamq3') g04Iye/sh
+k>a_ǃc
+JヿR Oxeؕï( tKHX&H:RG?دҩ(pߩO._m#
+wNtZN\֌f@šŸ
+=#:mYsmi/>S`<-rv1UΒ`eZD|!7L iy~2[_9~=ZjaLl68ß+8U!8)uV TU z@_GY,OPL
+R8t4ܚT5ٴf0e,Ts]P-ξilsJX̗
+x"
+nӤ$6aԛCAu(;q
+.E.O_s-H.I :Gcendstream
endobj
806 0 obj <<
/Type /Page
@@ -6957,18 +6965,21 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
822 0 obj <<
-/Length 2128
+/Length 2100
/Filter /FlateDecode
>>
stream
-xڝYo6_GY~-EEZ]܃3Yv%毿+YX`MoO,4E)Xx_~~]U>HYf^?-VLJ1'%?-+fUyt?vor%TmKRcy:jmMXII>uJәj2XqGcILU t/n,^,~}̙Y
-4uT8 $aRV}`]G^G xޘcR&˘≾ɘ*r7$ny?/%ljC 2CmǺ8cRr5TTTp@],g/ncs@ɒuSTvRnͫWzRѡ_Džm|kr .$ Gw g(wTF^<$Ma*uK`
-/xKŌBXE2w[m,jHrIf.(V;]"`7akm{IT/:ڐ8}E-qp$ D'
-Z8=#wV9if&Jh()xPQHtT;G:
-WMVeJlN%?=ё q 9U7* Co&=m.̫27怛/z~k=mCˆWmq%z&[-w
-*! ;N{Nsn
--BX=g7P7S.yIB%zZ*c`$,~#( _O`aƏ|laG.Rn{p,eA/][%|v3 NVAެ\_Mվnt_Whl[BoWذ4tr t-<Yo* nuz`k's@tZOh깩 C՜-D7pF؞1#4 jl@c.A
-Ati^ŞD](ƟA1`hx@@n2rm}@@jGhH&>3)S2SZn>um>kQ]rMZճ,d  חNF'1n2o^BXBø4>+Km7)59 Ll*/G>=y'XrYC0ϙjl>S%o@!p>u@yA 7 ,J4%If8 SauKDvRG|8IL}ԪCWߺRvP|~s|7xo1)D Xr0@|%vF0$d1N/] O:(wmy8}Tt,Q$Mendstream
+xڥXo6_GX~-ػtlރ3Yv-毿Ȓk 8|f(pIe'k+o!~ѨIJ<>'R+&s%ޅ>\5L6l圧}㶮kwXd"OzǟOjsə5F^fֆI&3CeӥnJXqϔpf
++5\a2ꗫwɜ ]Z2N'Jɓc:6б7˅nVޜmGYZ& uLM L߳d, :R<^G3F AƶdRr5kh.XY;nsh?8XdӅd<]ݺEr޷]_o .dڙFp/~r]Wq!IK]A4=rALY=m:M"uxݹI' [8
+DZtW>px=w3
+di;,{|Uƴk?a KnY=V=_Hs+<
+j&٫򒗉5*)#SN;iNe$#Pc#pv" 2Q^"sbqeF빼g$awRkWR,g4@8|om@Ѻ]{;y?
+X[wtau[wmB?7d Badt)_QC}vO&?Oa]q"0] $~G1&
+}p MOyof@tu qRZ
+H"Ⴚ7+39Lԗ9N&#LS9u**|o Wb
+oK ))t/s(14WHZ^~Ԃgڧ6 J&s0S3z\*rAvqv\ bt'IV{=>U KWWq
+ >Yv0i &ds踅I.#5A9#nFIyT((?ϚW(- G[Ғ2s&pU0h+ Ll?Z=-5.GK"t{fɈk\m +,q&%]t}9,K|v|ć{_ORv,,:)Ev5">~[E
+dQb
endobj
821 0 obj <<
/Type /Page
@@ -7035,14 +7046,14 @@ endobj
824 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [73.4132 416.009 87.8688 426.5913]
+/Rect [419.5946 451.0827 434.0502 461.6649]
/Subtype /Link
/A << /S /GoTo /D (table.2.2) >>
>> endobj
825 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [128.5209 380.1546 142.9765 390.7368]
+/Rect [481.7937 415.2282 496.2493 425.8105]
/Subtype /Link
/A << /S /GoTo /D (figure.4.6) >>
>> endobj
@@ -7058,23 +7069,21 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
834 0 obj <<
-/Length 2383
+/Length 2343
/Filter /FlateDecode
>>
stream
-xڥYoFB)r$.⦹4vs@/a%%fvv)R/1}h,)b*-"+$ 8_l <Ю"jLݫ~4r_%ВmDzwr%<Qli=+wpu_v:9ջnVƈoQ)Ô6b%83&ԑdL
-/V<,/2D?)T O5ۃWZzd@M9Q̕`Jhiad`W`u@7]K&ڢu Ҍ"eų' T_)7{UUH:sD99K0<0Z<a۸KwC?u?s4ןCi2:5&{b:L)eE1o!.F2-43<^ט"Rݒ4꽭Ag%ѕ=TDjnJ \%mhSp_J`]:׺rW]h::
-\zz&W<cJ@
-#`/89Rت>g6?s;t.EH"@kg{Zx0
-@S5ЎGC
-T]mJS9AE4t#TB*Χ !XnpPA:j~>~z{OLYڥжM_D0edrqh8);W}jj d_ro{qzN`8s#~@&rn-@i}E+]
-ɡ{ g4Bc
-¡9-|,- >,5M(> UcΫ5 \AY-;v54#[U@ZKҹ@di1 I*?'0Zh+c頺ȡa(dA e?gvzSSϘD'.!U߇+Ml=.D@_FL-9"ܹ
-S7wwE |ι`_T:"
-U=rL&H:<ٖj߉4>۲Q.0$ps'F<.ȫ:@nz>.$ 2(AݨE|*`: bxz-Բ" Uw-pp6E~QޗUIp
-_`gW׹6+ibpXfx̒oG@"O]
-Dza/
-oaHF57ZW
+xڥY[6~ϯ Y*X,"4M;fhc+#ɮ$w{)KMrHw>j""UL%^m"Y`˃:
+ݾ{#ˍQۻP -y˷XZE-[u,ծK׮\/On"a1tT0MX Όұt2)Bd54TERK08 |// R)8]9U̕MQem8Sٯ ~}Yd)}kطnaY&b|#]/x7嵻U/`R)E7\]l9KHdYl9˵Wu_+~~f($YTe擻/tLdj17@|޷Ch3%bZhfx*'U!?{_dyݸd]ٸƮGiì>E[4X؎[W2Vjk-bg>rY 5OY.dMB|f)f` o h*Yk:55>d Gd%{(ۂ?Զ/йWvk>O  {$`hKmq;`45sVU'k
+/?9Jت}}~is>; ŰH#nظv=gwOF
+qU;eC!ؼbo+ F6QA#χ~rx++yZٹ$"ĢR0nB
+-3eS?}~ڛGsÊú3!b(D0[X*F] o Í;(g yITٙ`b\JsZKphcbFJK+ o} Х<漙
+M@s`C7ɷI*_WNqI'4
+ww쎥E7P9%~2e l ۹vAw|`Ű7AȻsIba
+ nC,=.K`,rsA濯pxA UAH';CE†wTM302>ekm,k  eSbh veO`V>S
+hfJXzȫ( ܏s@VZ?kڐmt#+Mڬ#$LkyN4p)Pt@
+x~c*QQxk7^Rh @S&fԻ
+#"_ MY
endobj
833 0 obj <<
/Type /Page
@@ -7133,7 +7142,7 @@ endobj
/D [833 0 R /XYZ 74.4095 793.4011 null]
>> endobj
337 0 obj <<
-/D [833 0 R /XYZ 204.6417 575.8724 null]
+/D [833 0 R /XYZ 206.8833 575.8724 null]
>> endobj
832 0 obj <<
/Font << /F63 220 0 R /F28 173 0 R >>
@@ -7141,19 +7150,23 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
843 0 obj <<
-/Length 1956
+/Length 2211
/Filter /FlateDecode
>>
stream
-xڥXKs6W(U$, VIʓI;㚭LS)KRvJۍ)R<NR:Fyb*L N$48۫0a{e'JwZ%Z>J2I~Tz<!},Z[Η"63( g7nm/y4WWm#2x^0Q8-*zw 40 v
-hT
-0$+ .`R ڤU6_*g76<ׇ%M;W+XA"TӴkZυwy'a7~|vi m8
-*bHӮ
-nFܭ=Wsr[m DRhڼ%~᧷x/Ӧ?fY7adLCHj~ؼܭ^Ǭ)
-tCwj}Nk<1."֋F@qz)dA=c@<F2/NKىbK5όJ)H~MM$hT?0CUq!ʼnGw}8 ${M[52 gl478YZ Mߢ 7*cΌcǙ@,|RԙRRIMn]'H~U[^+S}9H:Ѣi/VTCU9X!yʘ /Z+%@"Z h(u9vIxMKbē\o*gtKS(Ue&@ Ds!*ИkS)G1b4rZ0f!(Xų3K|Fglݜî}1.W8`Dz8۔nƒt̛1}pR]ح~@:ه}F*,L0ݻ{cnP;lK]vMۢSכ[y}&$<]KixVEM9 gr΃qpѹßPj8f׶=ӆ2$^Ѕ{m-5q;2SǶi.n"iK~+
-YNq"$̙6Pt;0Ngi[U
->n`' [ mMDž ?`|k= ̈́ZڤN[/3퉃QsNIF~\,IVjx
-Xr L  6Aꅲ I?MQVo'&4QGMZs?엗Jcxwցy@òBGK!|\|iendstream
+xڥr6QXXA
+U5JJU*4-|cnIp>۷@lZ Wh@%7,U^ 2#hzWuY^A'In4׳~fxggO1۝ ٿ{  b²2&&Yy2e+r-5>RbG,<8Jz44Chuֽf{Qn>uw_8r}6w?e
+Sh_PrB7.5d!1'`Dִi &zCÆy"iQTo-^wo bܥL `˜%74`I&7-oĆ[48{g
+T*ǎ2`7o
+HҊ!Vfsȩa09p
+9 \22K2w\oKn؆U)Xw8Cz$@GB%QY  IMx<`pHjJFԅTFDlmy9JUf2fAc
+ Yfb
+搶A`V"tXYͺ灳7+ϝ.E^=e2b]= (!C9%».`kDa`M̻U1UTL;Lt2@3j!,B <Lc뛴ΜY~Xovǃ5W94څr>#OII\rg޺lJ2㮴%>*`B[+\$ޅ@Ƽlҝ#A~ptX\]
+uC+l817(+1ieaq&¢I8dWsa@  KmɈy 8Cߞx%`:zc0J4?0#=f
+d Xms5F $"ś8Е+א'1
+Q>$5y/^oRA&kZR@{ihy
+eg,\Sz.3CTƢ3;ۇ=t?19ec
++HygmGt8qM5x)!E֨qqc' XEDF 1D||7[ ;
endobj
842 0 obj <<
/Type /Page
@@ -7166,7 +7179,7 @@ endobj
846 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [128.9946 189.397 143.4501 199.9793]
+/Rect [128.9946 243.1787 143.4501 253.761]
/Subtype /Link
/A << /S /GoTo /D (figure.4.9) >>
>> endobj
@@ -7174,30 +7187,29 @@ endobj
/D [842 0 R /XYZ 74.4095 793.4011 null]
>> endobj
845 0 obj <<
-/D [842 0 R /XYZ 74.4095 707.2591 null]
+/D [842 0 R /XYZ 74.4095 750.7482 null]
>> endobj
126 0 obj <<
-/D [842 0 R /XYZ 74.4095 327.2073 null]
+/D [842 0 R /XYZ 74.4095 375.5382 null]
>> endobj
841 0 obj <<
-/Font << /F63 220 0 R /F28 173 0 R /F26 170 0 R /F88 715 0 R >>
+/Font << /F63 220 0 R /F26 170 0 R /F28 173 0 R /F88 715 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
850 0 obj <<
-/Length 2071
+/Length 1959
/Filter /FlateDecode
>>
stream
-xڭXKs6WHmI0{gTkʄ%T&_h"%ȓ`E
-|)\/\‚&]l`xWjF.,ˍQP -ISb_^DfŖ+n_k+cY駛OOZ-RfF SdMGqYe"5皮ap pvqzu4 +HF_YfJJ Xa'F6tzd]%:/7c?QhRmTɅ-#wlU,xX4)^"M\Д3(l
-IsI挋ؔi<cJYy! vSRʨ#."ER^q:11*SW|6)
-ʋ]^Jj:i͕nGf[D\8Zj}EK']9^ .i\2õ ,3.,TʈhˌRa jBAu@vr.ꮍ(^2He,$ ܎g6z;
-z3w $?Ah:b>?2/$G,2ή
-&%xu@&an!./aG/xxWԌw㗻PnU`H$ u<ޮW-1D@NJf[
-6/bWi+{s=zon?K?h~~ 0HlЂ6}fgn"i[}
-`Ggt>tp BB +AsG$2eɓ59hͣ\\Wo {csLIkx*sisf9cC#uh.;z_P}oވ_}?'6U
-iɇWan5 !h|/vU̟jARvǐ)J*3ewPJ;l +Tu=W܉udž.|a.;㘈fŴ[| Cx4Ѳ8#WјsFq:8-PH " fG2%<Iu:hU~IUq]W+v]xD5i<(@O8~یf8I1hbs F ґU~%aΈs 'u-{UY8v[a0uۑ5hs6{&o <l٬v6yk?ܤx?uu7l@a^­:)abs&? "7]mv/B!=qS^<&y.NUIxj-BjZ/?εлZK,O)5
-2E'8c`#&CoRzM+e|,XwIexRtCuz"Nw,v)9k_] |襗rxT|cd\#u\\ ~w)yڰE?(aZJMC]佧s7"oL%oJyUnېQif2G:?ZIXp/r߂ | quDV6$(3ɳE-W(Z.,f[u(i5X@9Rdl/\Sܬezą`9ixVu\E)G~0G~8aZ0 \,; Uendstream
+xڥXKs6W(m<I0{w-'*g@Y"To PSMt ?6+%R@06{]x(L˱?bIUr<R;zoiK^$t~7fgZgadj~l7}*N.
+}6JYr.Ñ0Y %J#g()9- 59.pzj,
+µpV9[/lfp1--Dȱ {Z0:_f[UAl–A[.O|-_H:_΍3ޔ$h
+ѡaйkzha|<i$Rjqqdǹ# BdqKB9zHUӆ*Kϒ\uѭ}BΟ 2ncZ\)Rna8:Q?Ir+cwHB@@Z<=QMk>]PmAWkq?OAciRR+kg
+ H`*I4=2c-9Q/׫ǸgH3K6U࿞]Ru+\26ڌ O(5m
+H)! C϶m5]lw]2x 8
++3̅Ǧ^( >~p+t4bBuyyv0'dp'_]7z8qo2#L6m
+s-
+>nYҽ4]m\s4ǧqėzr8a~wG™_*x(xg$)okIE\6endstream
endobj
849 0 obj <<
/Type /Page
@@ -7271,19 +7283,20 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
859 0 obj <<
-/Length 1649
+/Length 1668
/Filter /FlateDecode
>>
stream
-xڍXKs6WH4}IIuIH(ʕdƿx!QX|],
-$HF 䅀cb{E5e{7}7(hR(%gp)XaOGdSnxӌn$SennLzW??f%D+_c)I'7tGGf$+Zp%%TWu$[Q$wWOa1^Z{7+JߙDg4ou/-apo3FӹbMޞƒKMrE7rKzsm}q˴gk9J+S{gnn(wAI)
-9ǙbQ^
-5DYd ȕ^(.8lHkXO&`66^&~eQWZE+]Q:ͼm_? E\륷x4+Ա16nP1Dj"eAsR\8ߪXmc\826/5ut
-rbG>j[?y 7mo[K'tqrӯS]GzLMN)))rFhmx+d€Rr<Y-t |,?ZDsM[s2Z@)MhB\OGZvx.vWwO~LH%l,$c42Cw})]Yyhy<Q&P:|3 'Hl.,>C6 8G 5@.sA@%.PS\0e© \[r+5;.p%[.7e8)B@ISTu|@}8lދ~J5v p8se/nQz7"7`šݘq1c < (
-7.l7vH&{y5:(q
-mRUs/"`H)O^ `Il%{XmKbcLxBo-6|cNBDl2  /]#}YAav:㺶3"4y
-Nb}ZK<8Ve^11uZͮ'8uaOE[Үt"~[xi[sVsAV
-Xu(!;CjqpO&@/wȝagуh"c?/]_î},mN:X1(I…! Nv)]]*3ezwl1 WT6r+>.4]5F)L籐N"W%FfznStͨ!pJ#PyW0\W{^mMjJ6ŽTX4Su?#?@~+UwMXWendstream
+xڭXK6 WhzkoQ)iHmNz ۴,9l|zC&1
+ >D2DT~6/ra=k ?م6=kVv b8H:o64-  <2,>h%1lb;v(}~\ɞj04zq
+ 'GSU@N|`|r'