diff options
| -rw-r--r-- | LaTeX/argouml.zargo | bin | 51666 -> 51736 bytes | |||
| -rw-r--r-- | LaTeX/bib/references.bib | 33 | ||||
| -rw-r--r-- | LaTeX/chapters/implementierung.tex | 40 | ||||
| -rw-r--r-- | LaTeX/diplomarbeit.pdf | 6895 | ||||
| -rw-r--r-- | LaTeX/images/core.eps | 248 | ||||
| -rw-r--r-- | LaTeX/images/events.eps | 94 | ||||
| -rw-r--r-- | LaTeX/images/exceptions.eps | 22 | ||||
| -rw-r--r-- | LaTeX/images/prefs-editors.eps | 24 | ||||
| -rw-r--r-- | LaTeX/images/prefs.eps | 24 | ||||
| -rw-r--r-- | LaTeX/images/protocols.eps | 22 | ||||
| -rw-r--r-- | LaTeX/images/serialize.eps | 287 | ||||
| -rw-r--r-- | LaTeX/images/simulator.eps | 78 | ||||
| -rw-r--r-- | LaTeX/images/utils.eps | 232 |
13 files changed, 4055 insertions, 3944 deletions
diff --git a/LaTeX/argouml.zargo b/LaTeX/argouml.zargo Binary files differindex d64b591..b33e86f 100644 --- a/LaTeX/argouml.zargo +++ b/LaTeX/argouml.zargo diff --git a/LaTeX/bib/references.bib b/LaTeX/bib/references.bib index 6639067..d40758d 100644 --- a/LaTeX/bib/references.bib +++ b/LaTeX/bib/references.bib @@ -1,29 +1,6 @@ -@misc{Tanenbaum,
- author={Andrew Tanenbaum},
- title={Verteilte Systeme - Grundlagen und Paradigmen},
- year={2003},
- howpublished={Buch},
- note={2. Autor Marten van Steen; ISBN: 3-8273-7057-4}
-}
-@misc{Vorlesung,
- author={Martin Omann},
- title={Vorlesung ``Verteilte Systeme'' an der FH Aachen},
- year={2007},
- howpublished={Vorlesung},
- note={}
-}
-@misc{OOS,
- author={Heinrich Fassbender},
- title={``Objektorientierte Softwareentwicklung'' an der FH Aachen},
- year={2006},
- howpublished={Vorlesung},
- note={}
-}
-@misc{Games,
- author={David Brackeen},
- title={Developing Games in Java},
- year={2003},
- howpublished={Buch},
- note={ISBN-13: 978-1592730056}
-}
+@misc{Games, author={David Brackeen}, title={Developing Games in Java}, year={2003}, howpublished={Buch}, note={ISBN-13: 978-1592730056} }
+@misc{OOS, author={Heinrich Fassbender}, title={``Objektorientierte Softwareentwicklung'' an der FH Aachen}, year={2006}, howpublished={Vorlesung}, note={} }
+@misc{Richtlinien, author={Heinrich Fassbender}, title={Programmierrichtlinien ``Objektorientierte Softwareentwicklung'' an der FH Aachen}, year={2008}, howpublished={Internet}, note={http://www.fassbender.fh-aachen.de/Downloads/OOS/Programmierrichtlinien.pdf} }
+@misc{Tanenbaum, author={Andrew Tanenbaum}, title={Verteilte Systeme - Grundlagen und Paradigmen}, year={2003}, howpublished={Buch}, note={2. Autor Marten van Steen; ISBN: 3-8273-7057-4} }
+@misc{Vorlesung, author={Martin Omann}, title={Vorlesung ``Verteilte Systeme'' an der FH Aachen}, year={2007}, howpublished={Vorlesung}, note={Mitschrift: ftp://ftp.buetow.org/pub/studium/FHAC\_VS-SS07/Mitschrift/verteilte-systeme.pdf} }
diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex index 8a8f508..9b4379e 100644 --- a/LaTeX/chapters/implementierung.tex +++ b/LaTeX/chapters/implementierung.tex @@ -115,7 +115,7 @@ Die Klasse \textit{VSSimulatorEditor} dient f\"{u}r das Editieren der globalen S \subsection{Funktionsweise von Ereignissen}
-F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf\"{u}hrenden Aktionen implementiert. Eine Instanz davon wird, f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung, in einem \textit{VSTask}-Objekt verpackt dem Task-Manager \"{u}bergeben. Auf den Task-Manager wird sp\"{a}ter noch genauer eingegangen.
+F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf\"{u}hrenden Aktionen implementiert. Eine Instanz davon wird f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung dem Task-Manager \"{u}bergeben. Auf den Task-Manager wird sp\"{a}ter noch genauer eingegangen.
\begin{figure}[h]
\centering
\includegraphics[width=13.5cm]{images/events}
@@ -168,6 +168,8 @@ Jede Ereiginsklasse hat auerdem Zugriff auf folgende Attribute, die von \textit \item \textit{protected VSAbstractProcess process}: Eine Referenz auf das Prozessobjekt des jeweiligen Prozesses, auf welches das Ereignis angewendet wird.
\end{itemize}
+Da \textit{VSAbstractEvent} die Klasse \textit{VSSerializablePrefs} erweitert, k\"{o}nnen alle Ereignisse mit allen ihren Variablen serialisiert werden. Hierauf wird sp\"{a}ter nochmal eingegangen.
+
\subsection{Beispielimplementierung eines Ereignisses}
Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugeh\"{o}rige Klasse keine Attribute besitzt, verbleibt hier auch die \textit{initCopy}-Methode mit leerem Rumpf. Jede Ereignisklasse muss in \textit{onInit()} mit \textit{setClassname} den eigenen Klassennamen mitteilen. In \textit{onStart()} wird das eigentliche Ereignis ausgef\"{u}hrt. Hier wird obligatorisch \"{u}berpr\"{u}ft, ob der Prozess bereits abgest\"{u}rzt (hier eigentlich nicht Notwendig, verbessert aber die Lesbarkeit der Logik) ist und gegebenenfalls wird der Prozess dann zum Absturz bewegt.
@@ -535,7 +537,7 @@ Das Paket \textit{simulator} (vereinfacht auf Abbildung \ref{fig:PackageProtocol Beim Starten des Simulators wird auf die Main-Methode, welche sich in \textit{VSMain} befindet, aufgerufen. Sie instanziiert ein \textit{VSDefaultPrefs}-Objekt, wo alle Standardeinstellungen des Simulators abgelegt sind. Anschlieend wird ein \textit{VSSimulatorFrame} erzeugt, welches ein Simulatorfenster (wie bereits schon auf Abbildung \ref{fig:NeuesFenster} zu sehen war) implementiert. Das Simulatorfenster erstellt f\"{u}r jede neue Simulation jeweils ein Objekt von \textit{VSSimulator}. Jede Simulation hat im Simulationsfenster einen eigenen Tab. Auf Abbildung \ref{fig:NeuErstellteSimulation} wurde bereits eine neue Simulation erstellt, wo auch unten links der dazugeh\"{o}rige Tab mit der Beschriftung ``Simulator 1'' zu sehen ist. Jede Simulation besitzt dabei eine eigene Simulationsnummer, die bei jeder neuen Simulation um eins inkrementiert wird. Jedes \textit{VSSimulator}-Objekt greift auf \textit{VSSimulatorVisualization} zur\"{u}ck, was die Simulationsvisualisierung (Abbildung \ref{fig:Visualisierung}) implementiert.
-\textit{VSSimulatorVisualization} greift auf Java's Grafikbibliothek Java2D zur\"{u}ck und ist aus Performancegr\"{u}nden mit dem Simulationsverlauf stark verzahnt. Klassenattribute, dessen Wert sich nie \"{a}ndert, wurden stets als \textit{final} deklariert. Attribute, die von Konfigurationen oder Einstellungen abh\"{a}ngig sind, die sich nur nach Konfigurations\"{a}nderung oder Vergr\"{o}ern beziehungsweise Verkleinern des Simulationsfensters \"{a}ndern (Werte, die f\"{u}r die Berechnung des Sekunden-Gatters notwendig sind), werden nur wenn es n\"{o}tig ist neu berechnet.
+\textit{VSSimulatorVisualization} greift auf Java's Grafikbibliothek Java2D zur\"{u}ck und ist aus Performancegr\"{u}nden mit dem Simulationsverlauf stark verzahnt \cite{Games}. Klassenattribute, dessen Wert sich nie \"{a}ndert, wurden stets als \textit{final} deklariert. Attribute, die von Konfigurationen oder Einstellungen abh\"{a}ngig sind, die sich nur nach Konfigurations\"{a}nderung oder Vergr\"{o}ern beziehungsweise Verkleinern des Simulationsfensters \"{a}ndern (Werte, die f\"{u}r die Berechnung des Sekunden-Gatters notwendig sind), werden nur wenn es n\"{o}tig ist neu berechnet.
\begin{figure}[h]
\centering
@@ -584,6 +586,8 @@ Jede Simulation besitzt somit seinen eigenen Simulationsthread. Bei mehreren par \section{Serialisierung und Deserialisierung von Simulationen}
+\subsection{Funktionsweise}
+
Der Anwender kann eine erstellte Simulation im Datei-Men\"{u} speichern und/oder eine bereits abgespeicherte Simulation laden. Hierbei wird von den aus Java angebotenen M\"{o}glichkeit Objekte zu Serialisieren gebrauch gemacht. Im Paket \textit{serialize} (Abbildung \ref{fig:PackageSerialize}) befinden sich Helfer, die bei einer Serialisierung und einer Deserialisierung einer Simulation unter die Arme greifen.
Der Simulator serialisiert nur notwendige Daten, und nicht jedes existierende Objekt. Alle Serialisierbaren Klassen implementieren das Interface \textit{VSSerializable} mit folgenden zwei Methoden:
@@ -593,9 +597,7 @@ Der Simulator serialisiert nur notwendige Daten, und nicht jedes existierende Ob \item \textit{public void deserialize(VSSerialize serialize, ObjectInputStream ois)}: Diese Methode wird bei jedem Deserialisierungsvorgang aufgerufen (beim Laden einer Simulation).
\end{itemize}
-Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Dateistream auch ein \textit{VSSerialize}-Objekt. F\"{u}r jeden (De)serialisierungsvorgang wird ein \textit{VSSerialize}-Objekt erzeugt, welches dabei Hilft die ben\"{o}tigten Aktionen durchzuf\"{u}hren. Eine zu serialisierende Simulation besteht aus vielen voneinander abh\"{a}ngigen Objekten. Jedes Objekt kann dabei Referenzen auf andere Objekte besitzen. W\"{u}rde jedes Objekt komplett serialisiert werden, so w\"{u}rden Objekte, auf denen mehrere Referenzen existieren, in mehrfacher Ausf\"{u}hrung behandelt (in eine Datei abgespeichert) werden. Bei Kreissverweisen (Objekt A hat eine Referenz auf Objekt B und Objekt B hat eine Referenz auf Objekt A als Attribut gespeichert) w\"{u}rde die Serialisierung sogar in einer Endlosschleife enden.
-
-\textit{VSSerialize} hilft hierbei dies zu vermeiden und merkt sich Informationen von allen bereits serialisierten Objekten, sodass jedes Objekt nur genau einmal serialisiert wird. Bei der Deserialisierung werden alle Objekte wieder automatisch mit den richtigen Referenzen ausgestattet, wobei kein Objekt doppelt deserialisiert wird.
+Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Dateistream auch ein \textit{VSSerialize}-Objekt. F\"{u}r jeden (De)serialisierungsvorgang wird ein \textit{VSSerialize}-Objekt erzeugt, welches dabei Hilft die ben\"{o}tigten Aktionen durchzuf\"{u}hren. Eine zu serialisierende Simulation besteht aus vielen voneinander abh\"{a}ngigen Objekten. Jedes Objekt kann dabei Referenzen auf andere Objekte besitzen. W\"{u}rde jedes Objekt komplett serialisiert werden, so w\"{u}rden Objekte, auf denen mehrere Referenzen existieren, in mehrfacher Ausf\"{u}hrung behandelt (in eine Datei abgespeichert) werden. Bei Kreissverweisen (Objekt A hat eine Referenz auf Objekt B und Objekt B hat eine Referenz auf Objekt A als Attribut gespeichert) w\"{u}rde die Serialisierung sogar in einer Endlosschleife enden. \textit{VSSerialize} hilft hierbei dies zu vermeiden und merkt sich Informationen von allen bereits serialisierten Objekten, sodass jedes Objekt nur genau einmal serialisiert wird. Bei der Deserialisierung werden alle Objekte wieder automatisch mit den richtigen Referenzen ausgestattet, wobei kein Objekt doppelt deserialisiert wird.
\begin{figure}[h]
\centering
@@ -604,8 +606,12 @@ Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Da \label{fig:PackageSerialize}
\end{figure}
+Alle Klassen, die \textit{VSSerializePrefs} erweitern, k\"{o}nnen automatisch s\"{a}mtliche Einstellungen komfortabel serialisieren und deserialiseren. Beispielsweise speichert ein Simulator (\textit{VSSimulator}) alle seine globalen Simulationseinstellungen bei einer Serialisierung automatisch ab. Bei den Prozessen und den Ereignissen (und somit auch Protokollen) gilt selbiges analog.
+
Abgespeicherte Simulationen sollen auch mit zuk\"{u}nftigen Versionen des Simulators kompatibel bleiben. Deshalb werden alle Objekte derjenigen Klassen, die \textit{VSSerializable} implementieren, nicht komplett serialisiert. Bei der Serialisierung werden nur relevante Klassenattriute, die der Simulationsprogrammierung- und nicht bispielsweise GUI-komponenten angeh\"{o}ren, serialisiert.
+\subsection{Beispielimplementierung einer \textit{serialize}-Methode}
+
Der folgende Quelltext-Ausschnitt zeigt eine Beispielimplementierung von \textit{serialize}:
\begin{code}
@@ -628,20 +634,9 @@ Das zu serialisierende Objekt besitzt hier lediglich zwei Attribute, die seriali Wenn der Anwender \textit{Datei $\rightarrow$ Simulation speichern} w\"{a}hlt, dann wird zun\"{a}chst ein \textit{VSSerialize}-Objekt erstellt. Ausgehend davon wird \textit{serialize} auf \textit{VSSimulator} ausgef\"{u}hrt (siehe Serialisierungssequenz auf Abbildung \ref{fig:SequenceSerialize}). Das Simulator-Objekt f\"{u}hrt \textit{serialize} wiederum auf das \textit{VSSimulatorVisualization}-Objekt aus. Dort wird jeder Prozess inklusive alle Protokollobjekte serialisiert. Anschliessend folgt der Task-Manager inklusive allen programmierten Ereignissen.
-\begin{figure}
- \centering
- \rotatebox{90}{%
- \includegraphics[width=22cm]{images/sequence-serialize}
- }
- \caption{Serialisierungssequenz}
- \label{fig:SequenceSerialize}
-\end{figure}
-
\section{Helferklassen und Klassen f\"{u}r Ausnahmebehandlungen}
-Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:PackageUtils}) sowie \textit{exceptions} (Abbildung \ref{fig:PackageExceptions}) vorgestellt. \textit{utils} fasst lediglich einige Helferklassen zusammen, die vom restlichen Quelltext verwendet werden.
-
\begin{figure}[h]
\centering
\includegraphics[width=11cm]{images/utils}
@@ -649,6 +644,8 @@ Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:P \label{fig:PackageUtils}
\end{figure}
+Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:PackageUtils}) sowie \textit{exceptions} (Abbildung \ref{fig:PackageExceptions}) vorgestellt. \textit{utils} fasst lediglich einige Helferklassen zusammen, die vom restlichen Quelltext verwendet werden.
+
\begin{itemize}
\item \textit{VSFrame}: Alle Objekte, die ein eigenes Swing-Fenster besitzen, erben von der Klasse \textit{VSFrame}. Sie stellt sicher, dass neue Fenster an der richtigen Position der Bildf\"{a}che platziert werden und dass Unterfenster (Fenster, die aus einem anderen Fenster aus ge\"{o}ffnet wurden) automatisch mitgeschlossen werden, sobald ihre ``Erzeugerfenster'' geschlossen werden.
\item \textit{VSAboutFrame}: Dieses Fenster implementiert die ``About-Anzeige'' die im Simulator \"{u}ber das Datei-Men\"{u} aufgerufen werden kann.
@@ -669,9 +666,18 @@ Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:P Im Paket \textit{exceptions} befinden sich lediglich einige Objekte die f\"{u}r Ausnahmebehandlungen verwendet werden. \textit{VSNotCopyableException} wird w\"{a}hrend einem Kopierversuch eines nicht-kopierbaren Ereignis geworfen. \textit{VSNegatieNumberException} wird geworfen, wenn intern negative Zahlen dort auftreten wo sie es nicht sollten. Wenn ein Editorobjekt die Benutzereingabe einer Integer-Vektor-Variable nicht parsen kann, so greifen es auf \textit{VSParseIntegerVectorException} zur\"{u}ck.
+\begin{figure}
+ \centering
+ \rotatebox{90}{%
+ \includegraphics[width=22cm]{images/sequence-serialize}
+ }
+ \caption{Serialisierungssequenz}
+ \label{fig:SequenceSerialize}
+\end{figure}
+
\section{Programmierrichtlinien}
-Die Programmierrichtlinien entsprechen in den meisten F\"{a}llen denen aus der Vorlesung \cite{OOS}. Die Main-Methode befindet sich in der Klasse \textit{simulator.VSMain}.
+Die Programmierrichtlinien \cite{Richtlinien} entsprechen in den meisten F\"{a}llen denen aus der Vorlesung \cite{OOS}. Die Main-Methode befindet sich in der Klasse \textit{simulator.VSMain}.
\begin{itemize}
\item Alle Klassen- und Interfacenamen beginnen mit groen Buchstaben, w\"{a}hrend alle Variablen-, Methoden- und Attributnamen mit kleinen Buchstaben beginnen. Namen finaler Variablen und Attribute sind komplett in Grobuchstaben gehalten.
diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf index 6458511..185bedf 100644 --- a/LaTeX/diplomarbeit.pdf +++ b/LaTeX/diplomarbeit.pdf @@ -264,45 +264,57 @@ endobj (\376\377\0003\000.\0006\000\040\000S\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000u\000n\000d\000\040\000D\000e\000s\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000e\000n) endobj 181 0 obj -<< /S /GoTo /D (section.3.7) >> +<< /S /GoTo /D (subsection.3.6.1) >> endobj 184 0 obj -(\376\377\0003\000.\0007\000\040\000H\000e\000l\000f\000e\000r\000k\000l\000a\000s\000s\000e\000n\000\040\000u\000n\000d\000\040\000K\000l\000a\000s\000s\000e\000n\000\040\000f\000\374\000r\000\040\000A\000u\000s\000n\000a\000h\000m\000e\000b\000e\000h\000a\000n\000d\000l\000u\000n\000g\000e\000n) +(\376\377\0003\000.\0006\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e) endobj 185 0 obj -<< /S /GoTo /D (section.3.8) >> +<< /S /GoTo /D (subsection.3.6.2) >> endobj 188 0 obj -(\376\377\0003\000.\0008\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000i\000e\000r\000r\000i\000c\000h\000t\000l\000i\000n\000i\000e\000n) +(\376\377\0003\000.\0006\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000r\000\040\000s\000e\000r\000i\000a\000l\000i\000z\000e\000-\000M\000e\000t\000h\000o\000d\000e) endobj 189 0 obj -<< /S /GoTo /D (section.3.9) >> +<< /S /GoTo /D (section.3.7) >> endobj 192 0 obj -(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g) +(\376\377\0003\000.\0007\000\040\000H\000e\000l\000f\000e\000r\000k\000l\000a\000s\000s\000e\000n\000\040\000u\000n\000d\000\040\000K\000l\000a\000s\000s\000e\000n\000\040\000f\000\374\000r\000\040\000A\000u\000s\000n\000a\000h\000m\000e\000b\000e\000h\000a\000n\000d\000l\000u\000n\000g\000e\000n) endobj 193 0 obj -<< /S /GoTo /D (chapter.4) >> +<< /S /GoTo /D (section.3.8) >> endobj 196 0 obj -(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k) +(\376\377\0003\000.\0008\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000i\000e\000r\000r\000i\000c\000h\000t\000l\000i\000n\000i\000e\000n) endobj 197 0 obj -<< /S /GoTo /D (appendix.A) >> +<< /S /GoTo /D (section.3.9) >> endobj 200 0 obj -(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000e) +(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g) endobj 201 0 obj -<< /S /GoTo /D (appendix.B) >> +<< /S /GoTo /D (chapter.4) >> endobj 204 0 obj -(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s) +(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k) endobj 205 0 obj -<< /S /GoTo /D [206 0 R /Fit ] >> +<< /S /GoTo /D (appendix.A) >> +endobj +208 0 obj +(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000e) +endobj +209 0 obj +<< /S /GoTo /D (appendix.B) >> endobj -209 0 obj << +212 0 obj +(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s) +endobj +213 0 obj +<< /S /GoTo /D [214 0 R /Fit ] >> +endobj +217 0 obj << /Length 827 /Filter /FlateDecode >> @@ -311,14 +323,14 @@ xڍUMs6W(͔ͮWvҦZD#.d% ι>wyW 7Ve{'}
n4~' , ŨF&qeXd˩ʝgZN
p.ͩ2):os>0]e{JK|hF"{gj,wy*fxIϫ608J|-_`_K_!sPӱbk{>>3(~Zuh엗qDh\P@4w1ωuȷgH%Աf`.O{F,s>`ϮbtEEiOԡӀpFu<|9ҊPypΎ|L^KS rt!8c'4(ܳendstream endobj -206 0 obj << +214 0 obj << /Type /Page -/Contents 209 0 R -/Resources 208 0 R +/Contents 217 0 R +/Resources 216 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -207 0 obj << +215 0 obj << /Type /XObject /Subtype /Image /Width 500 @@ -479,38 +491,38 @@ j'F{E, 5M%jKqizlO<ԕ#C~%(4p<]gʟ~c]'?Ӹ)E- sOyGKrm{ endobj -210 0 obj << -/D [206 0 R /XYZ 74.4095 769.8898 null] +218 0 obj << +/D [214 0 R /XYZ 74.4095 769.8898 null] >> endobj -211 0 obj << -/D [206 0 R /XYZ 74.4095 769.8898 null] +219 0 obj << +/D [214 0 R /XYZ 74.4095 769.8898 null] >> endobj -208 0 obj << -/Font << /F26 214 0 R /F28 217 0 R >> -/XObject << /Im1 207 0 R >> +216 0 obj << +/Font << /F26 222 0 R /F28 225 0 R >> +/XObject << /Im1 215 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -221 0 obj << +229 0 obj << /Length 69 /Filter /FlateDecode >> stream x3T0 endobj -220 0 obj << +228 0 obj << /Type /Page -/Contents 221 0 R -/Resources 219 0 R +/Contents 229 0 R +/Resources 227 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -222 0 obj << -/D [220 0 R /XYZ 74.4095 793.4011 null] +230 0 obj << +/D [228 0 R /XYZ 74.4095 793.4011 null] >> endobj -219 0 obj << +227 0 obj << /ProcSet [ /PDF ] >> endobj -225 0 obj << +233 0 obj << /Length 892 /Filter /FlateDecode >> @@ -523,41 +535,41 @@ qhb`=eYIf5$mNhŵxGO[n
sqi#oj
>q4BR&ަ 5&l,P>n-|ZS+Uy(6Ѫ%)>r3[Ib/џmi˸巄 Y{C1
D\q{oJ6H/
tV+9<E Y
Z=ZNL~P#Qm`WɁbZ18 endobj -224 0 obj << +232 0 obj << /Type /Page -/Contents 225 0 R -/Resources 223 0 R +/Contents 233 0 R +/Resources 231 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -226 0 obj << -/D [224 0 R /XYZ 74.4095 793.4011 null] +234 0 obj << +/D [232 0 R /XYZ 74.4095 793.4011 null] >> endobj -223 0 obj << -/Font << /F26 214 0 R /F28 217 0 R >> +231 0 obj << +/Font << /F26 222 0 R /F28 225 0 R >> /ProcSet [ /PDF /Text ] >> endobj -229 0 obj << +237 0 obj << /Length 69 /Filter /FlateDecode >> stream x3T0 endobj -228 0 obj << +236 0 obj << /Type /Page -/Contents 229 0 R -/Resources 227 0 R +/Contents 237 0 R +/Resources 235 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -230 0 obj << -/D [228 0 R /XYZ 74.4095 793.4011 null] +238 0 obj << +/D [236 0 R /XYZ 74.4095 793.4011 null] >> endobj -227 0 obj << +235 0 obj << /ProcSet [ /PDF ] >> endobj -233 0 obj << +241 0 obj << /Length 791 /Filter /FlateDecode >> @@ -566,41 +578,41 @@ xڕVMs0Wp"$[>d2$3A)_ I C֫}ڷV0(8ED9zE[ P(Ϫ('DP^Mzͪ=L`<@٬CǬyYoE[@wo[QUb'Ԕ C's'G endobj -232 0 obj << +240 0 obj << /Type /Page -/Contents 233 0 R -/Resources 231 0 R +/Contents 241 0 R +/Resources 239 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -234 0 obj << -/D [232 0 R /XYZ 74.4095 793.4011 null] +242 0 obj << +/D [240 0 R /XYZ 74.4095 793.4011 null] >> endobj -231 0 obj << -/Font << /F26 214 0 R /F28 217 0 R /F35 237 0 R >> +239 0 obj << +/Font << /F26 222 0 R /F28 225 0 R /F35 245 0 R >> /ProcSet [ /PDF /Text ] >> endobj -240 0 obj << +248 0 obj << /Length 69 /Filter /FlateDecode >> stream x3T0 endobj -239 0 obj << +247 0 obj << /Type /Page -/Contents 240 0 R -/Resources 238 0 R +/Contents 248 0 R +/Resources 246 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 218 0 R +/Parent 226 0 R >> endobj -241 0 obj << -/D [239 0 R /XYZ 74.4095 793.4011 null] +249 0 obj << +/D [247 0 R /XYZ 74.4095 793.4011 null] >> endobj -238 0 obj << +246 0 obj << /ProcSet [ /PDF ] >> endobj -244 0 obj << +252 0 obj << /Length 2474 /Filter /FlateDecode >> @@ -614,408 +626,421 @@ Flԙ02M&yEþmz>:usBd4&ԫNsANuN"(@Ql b5Qgb1Z^1u}AC1!e)xW#,W%b{,ؾb:( @/ endobj -243 0 obj << +251 0 obj << /Type /Page -/Contents 244 0 R -/Resources 242 0 R +/Contents 252 0 R +/Resources 250 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 276 0 R -/Annots [ 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R ] +/Parent 284 0 R +/Annots [ 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R ] >> endobj -247 0 obj << +255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 607.8694 132.1982 618.3978] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj -248 0 obj << +256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 591.2455 150.1131 599.7295] /Subtype /Link /A << /S /GoTo /D (section.1.1) >> >> endobj -249 0 obj << +257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 570.8377 156.4611 581.42] /Subtype /Link /A << /S /GoTo /D (section.1.2) >> >> endobj -250 0 obj << +258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 544.8461 147.4677 553.4916] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj -251 0 obj << +259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 524.555 252.1763 535.0296] /Subtype /Link /A << /S /GoTo /D (section.2.1) >> >> endobj -252 0 obj << +260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 506.0392 172.6274 516.3075] /Subtype /Link /A << /S /GoTo /D (section.2.2) >> >> endobj -253 0 obj << +261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 487.4157 151.3326 497.7917] /Subtype /Link /A << /S /GoTo /D (section.2.3) >> >> endobj -254 0 obj << +262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 468.8999 163.3025 479.2759] /Subtype /Link /A << /S /GoTo /D (section.2.4) >> >> endobj -255 0 obj << +263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 450.4917 219.7364 460.7601] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.1) >> >> endobj -256 0 obj << +264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 431.8683 237.2476 442.4505] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.2) >> >> endobj -257 0 obj << +265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 413.3525 280.8776 423.7285] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.3) >> >> endobj -258 0 obj << +266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 394.8367 269.5888 405.2127] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.4) >> >> endobj -259 0 obj << +267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 378.1321 149.1627 386.6968] /Subtype /Link /A << /S /GoTo /D (section.2.5) >> >> endobj -260 0 obj << +268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 357.9127 245.963 368.3873] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.1) >> >> endobj -261 0 obj << +269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 339.2892 371.1808 349.6652] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.2) >> >> endobj -265 0 obj << +273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 321.0462 291.7104 331.1494] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.3) >> >> endobj -266 0 obj << +274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 302.2576 480.6634 312.8399] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.4) >> >> endobj -267 0 obj << +275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 283.7418 413.8211 294.324] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.5) >> >> endobj -268 0 obj << +276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 265.226 413.0998 275.8082] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.6) >> >> endobj -269 0 obj << +277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 246.983 362.8821 257.2924] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.7) >> >> endobj -270 0 obj << +278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 228.4672 367.7659 238.7766] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.8) >> >> endobj -271 0 obj << +279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 209.6785 353.8335 220.2608] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.9) >> >> endobj -272 0 obj << +280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 191.1627 366.1259 201.745] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.10) >> >> endobj -273 0 obj << +281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 172.7546 178.9666 183.0229] /Subtype /Link /A << /S /GoTo /D (section.2.6) >> >> endobj -274 0 obj << +282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 154.2388 325.7265 164.7134] /Subtype /Link /A << /S /GoTo /D (subsection.2.6.1) >> >> endobj -275 0 obj << +283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 135.6153 362.035 146.1976] /Subtype /Link /A << /S /GoTo /D (subsection.2.6.2) >> >> endobj -245 0 obj << -/D [243 0 R /XYZ 74.4095 793.4011 null] +253 0 obj << +/D [251 0 R /XYZ 74.4095 793.4011 null] >> endobj -246 0 obj << -/D [243 0 R /XYZ 74.4095 638.5029 null] +254 0 obj << +/D [251 0 R /XYZ 74.4095 638.5029 null] >> endobj -242 0 obj << -/Font << /F26 214 0 R /F28 217 0 R /F63 264 0 R >> +250 0 obj << +/Font << /F26 222 0 R /F28 225 0 R /F63 272 0 R >> /ProcSet [ /PDF /Text ] >> endobj -279 0 obj << -/Length 2092 +287 0 obj << +/Length 2233 /Filter /FlateDecode >> stream -x[6+ti53M۴>ǫյP%J8(M@Ǐ@K,2#Ve -xX?7k+/^g7OZ,'VkݼθVxQm͒Eq{WViwOtv$ך?))l46Tw*+Ip6]4Me1&6yۥ ˕zUY,W?wžeqTw2Rd{JD*3IuCLŔQS -A+AbjZI2&yYnq*&|y<h+7ӠqΈ-}Mh}_Z;iШWۓ#XnB$99s>r/fN<56<^QܟEX1>5cJH,hlRXbV`wB~J2&`։qI(D -ZˋWWc|2DXLxǫyL1}pL}EyNZ[oǢ6ө(ztz*MЩ\60;G0IZM%z]Ն&Y"zg/<TKFaz9=~=ڎ=U$ZdEð{©9(" -H1y% -8&^ApgY`\B\&(41&,t(kJ-Uʎ~
G@x7;f-$`܍7ܿw R~
&ECsJ{כmCdٞ :8[,rd.֧ {fJ$^ -ex -m>G>;HDwvn<+SD(+R<<*mN4<]W%TsShS9* -=/ ΨC>jmf*rEf[_^sѷZ, zUb#B0"-փ|\ 2 `
@@ìwBSP5}5/˽ݺ.oe+OaW]Ie^s-VoXbDVcL5RFy4'4^S~A -{U.8CTxzStXV߿`DHƄ*Jg)QЅ -! f]<^
8w>98fn<dF@%\flxA& -Nag-UI3۽562endstream +xK6<JUѮ8Yn\%,#HTJO$H +5OMՌFh aC2Fd0lsx[_hW^ +կn^;2<QIFvl^)wqI"?$OٕyͿ^i)XleHLnUĎĭ~ n3)eӤ2f:rdhR.-*xsmRky;+Q YڊK>I2ڹҔ[0pZ!- :ubi$uȈEyS^Ỗmq9ӃPde(|R6$4բPCZ~[jGOχ;"2T݇H58)ojV<Fl]E"*Rc3Pl$ƣ&"y0Z'i AC+qz3ƾLߗw)x +S>)d+Rkf`NoD>֖yNcvl9JWBZ)Ϥ#L*$yTNWy}Z]cy^2$v/ƯzcSvǵH +vQlx'$@pEc8LP0<>߿V"h,v\"0/<1팲Сh*7UfS`8pģUi 27ZpEdM)/.zw%%cR{כ]Md]|#>:'-r$/r}kiL[+oxz*Ɍ}ltg<\i!3>">/4&r4ILiJJxE1w`}ҢrT(`RBV*,T<]u~a[ +Q%\gX"'$zPTģUi 3ѣ)h +=/1agP!:0/jfW7mn~EWuzU0F7Mq890 +ZpE$U.2/ov|=]st,ӎEh`ciT wۖ߭eC0*bPL3Yą@p +VT'!f>gPۊMHdq1U1j#GmWӛZ8<qGx^
Zf2w7*OCSwgܐKm<z}F(BQJ +Az +t<:gI0{˧b:m;dc>cE\c{! o +udG&vP&AQ\9|PUI&Mv~}pR{U.?Ou2(K|ɐ:RrSxiC*0^;UJCl22mxݨt}1r2 Ÿiy`8vp2*7WM8S\ru/>۫8fpl7~%\kͨ:b&vՇDF|;
5n
yUUMLXCGendstream endobj -278 0 obj << +286 0 obj << /Type /Page -/Contents 279 0 R -/Resources 277 0 R +/Contents 287 0 R +/Resources 285 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 276 0 R -/Annots [ 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R ] +/Parent 284 0 R +/Annots [ 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R ] >> endobj -281 0 obj << +289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 756.786 177.5405 767.3144] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj -282 0 obj << +290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 738.8587 216.6336 749.2347] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj -283 0 obj << +291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 720.9315 215.4148 731.3075] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj -284 0 obj << +292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 703.1119 190.4974 713.3802] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj -285 0 obj << +293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 685.077 151.3326 695.453] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj -286 0 obj << +294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 667.1498 265.653 677.5258] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.1) >> >> endobj -287 0 obj << +295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 649.2225 308.7178 659.5985] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.2) >> >> endobj -288 0 obj << +296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 631.2953 334.173 641.8776] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj -289 0 obj << +297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 615.1793 199.5985 623.7441] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.1) >> >> endobj -290 0 obj << +298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 595.4408 336.6387 606.0231] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.2) >> >> endobj -291 0 obj << +299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 579.3248 149.1627 587.8896] /Subtype /Link /A << /S /GoTo /D (section.3.4) >> >> endobj -292 0 obj << +300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 561.3976 275.6593 569.9624] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj -293 0 obj << +301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 541.6591 301.5626 552.0351] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.2) >> >> endobj -294 0 obj << +302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 523.7319 327.3494 534.3141] /Subtype /Link /A << /S /GoT |
