docs/DesignPatterns

view detailed-observer.tex @ 28:ddd8378a539e

did lot of working on detailed-observer
author meillo@marmaro.de
date Thu, 05 Jul 2007 07:53:15 +0200
parents a7ab86cddfad
children f3b4061ec3b4
line source
1 % @file
2 % @brief Referat DesignPatterns `Observer'
3 % @author markus schnalke <meillo@marmaro.de>
4 % @since 2007-05-30
7 \documentclass[a4paper]{scrartcl}
9 \usepackage[utf8]{inputenc}
10 \usepackage{ngerman}
11 \usepackage{graphicx}
12 \usepackage[automark]{scrpage2}
14 \setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
15 \setlength{\parindent}{0em}
16 \setlength{\parskip}{1.0ex plus 1.0ex minus 0.5ex}
17 \pagestyle{scrheadings}
18 \setcounter{tocdepth}{2}
20 \begin{document}
26 %%%% Titlepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27 \begin{titlepage}
28 \title{Observer-Pattern}
29 \author{Markus Schnalke}
30 \date{2007-07-04}
33 \thispagestyle{empty}
36 \begin{flushright}
38 \rule[8cm]{0cm}{0cm}
39 {\Huge Design Pattern\\ \textbf{Observer}}
41 \rule[2cm]{0cm}{0cm}
42 \textsc{Markus Schnalke\\MatNr: 039131}
44 \end{flushright}
48 \rule[7cm]{0cm}{0cm}
50 \textit{Dies ist meine Ausarbeitung zum Design Pattern ``Observer'' im Rahmen der Vorlesung Softwaretechnik im Studiengang Wirtschaftsinformatik an der Hochschule Ulm.}
52 {\tiny Dieses Dokument darf gerne zitiert, kopiert und weitergegeben werden. Ich bitte nur darum meinen Namen und einen Verweis auf meine Website (http://marmaro.de) zu erwähnen --- danke! }
55 \end{titlepage}
60 \tableofcontents
75 %%%% Einleitung %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76 \newpage
77 \section{Einleitung}
79 Ich möchte im Folgenden einen Ansatz zum Verstehen von Design Patterns aufzeigen. Dazu nehme ich das Design Pattern ``Observer'', das ich Stück für Stück aus einer Situation der realen Welt herleiten werde. Es geht mir dabei nicht primär darum euch dieses Pattern zu erklären, vielmehr soll das Erfassen des Zusammenhangs zwischen Realität und Design Patterns gefördert werden.
81 Mein Ziel ist es die \textit{Natürlichkeit} von Design Patterns darzustellen --- weil sie dem Vorgehen in der Realität entsprechen!
86 \section{Meine Vorgehensweise}
88 \begin{quote}
89 Design Pattern sind ``Best Practices'' (= Erfolgsrezepte), meist \textbf{nach Vorbildern in der Realität}.
90 \end{quote}
92 Aus diesem Grund möchte ich nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass das Design Pattern \textbf{Observer} ein absolut natürliches Vorgehen ist, das bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden sollte. Dass ich hier gerade das Pattern \textbf{Observer} verwende, hat keinen besonderen Grund; es kann wohl (fast) jedes Pattern auf diese Weise verständlich und logisch gemacht werden.
108 \newpage
109 \section{Erarbeitung des Patterns}
111 \subsection{Ausgangssituation}
112 Meine Ausgangssituation von der ich mich zu einer möglichst optimalen Lösung vorarbeiten möchte ist Folgende:
114 \begin{itemize}
115 \item Es gibt Personen die Etwas verkaufen möchten
116 \item Es gibt Personen die Etwas kaufen möchten
117 \item Sie wollen/sollen sich nicht kennen
118 \end{itemize}
120 Gesucht ist natürlich ein möglichst effektives Vorgehen. Eben das ist der Grund, weshalb wir Patterns verwenden möchten: Wir suchen eine effektive Standardlösung für regelmäßig auftretende Problemstellungen.
125 \subsection{Mögliche Ansätze}
127 Um systematisch vorzugehen, überlegen wir uns zunächst, welche primitiven Lösungen für unser Problem in Frage kommen. Dies wären zum Beispiel:
128 \begin{itemize}
129 \item Personen direkt ansprechen
130 \item Laut in die Menge rufen
131 \item Den Freunden erzählen, die es dann weitererzählen
132 \end{itemize}
134 Vermutlich wäre der Eine oder Andere (unbewusst) gleich höher eingestiegen, dennoch zeigen auch (oder gerade) diese simplen Vorgehensweisen Probleme auf, die sonst kaum explizit wahrgenommen werden.
136 Dies sind unter anderem:
138 \begin{itemize}
139 \item Man weiß nicht wer Interesse hat
140 \item nicht mal wieviele
141 \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
142 \item (... oder sie sind taub)
143 \end{itemize}
149 \subsection{Erarbeitung einer Lösung}
151 \subsubsection{Eine (gute) Lösung: Pinnwand}
155 \paragraph{Funktionsweise}
156 \begin{itemize}
157 \item Man kann Zettel anpinnen
158 \item Hingehen und nach neuen Zetteln schauen
159 \item Zettel lesen
160 \item Zettel abnehmen
161 \item Jeder der ein paar Fähigkeiten hat kann es
162 \end{itemize}
167 \paragraph{Probleme}
168 \begin{itemize}
169 \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
170 \item Man kann wichtige Zettel verpassen
171 \item Zettel sollten nicht weggenommen werden können
172 \end{itemize}
179 \subsubsection{Verbesserung: Pinnwand-Sekretärin}
181 \paragraph{Lösung}
182 \begin{itemize}
183 \item Durch Studiengebühren wird eine Sekretärin für die Pinnwand angestellt
184 \item Pinnwand und Sekretärin sind fortan eine Einheit
185 \item Man kann bei ihr einen Zettel in Auftrag geben (auch telefonisch)
186 \item (Sie schreibt mit lesbarer Schrift)
187 \item Sie verhindert, dass Zettel abgenommen werden
188 \end{itemize}
193 \paragraph{Bestehendes Problem}
194 \begin{itemize}
195 \item Man läuft immer noch oft unnötig zur Pinnwand
196 \end{itemize}
201 \subsubsection{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
203 \paragraph{Lösung}
204 \begin{itemize}
205 \item Durch Studiengebühren wird eine längere Arbeitszeit der Sekretärin finanziert
206 \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
207 \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
208 \item Zukünftig ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
209 \end{itemize}
214 \subsection{Zusammenfassung des Beispiels}
216 \paragraph{Pinnwand + Sekretärin + Benachrichtigung}
217 \begin{itemize}
218 \item Man kann neue Zettel anpinnen lassen
219 \item Man kann sich als Interessierter anmelden (und auch abmelden)
220 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
221 \item Sie können dann zur Pinnwand gehen und sie sich anschauen
222 \end{itemize}
227 \paragraph{Eure Meinung?}
228 \begin{itemize}
229 \item Ist diese Struktur zufriedenstellend?
230 \item Erfüllt sie alle Anforderungen?
231 \item Was fehlt?
232 \end{itemize}
256 \newpage
257 \section{Das Pattern}
260 \subsection{Überleitung}
262 \paragraph{Neue Namen}
263 \begin{itemize}
264 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
265 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
266 \item Interessenten $\rightarrow$ ``Observers''
267 \end{itemize}
269 \paragraph{Schnittstellen}
270 Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''.
272 (vgl: taub, minimale Fähigkeiten, leserliche Schrift, ...)
277 \subsection{UML-Diagramme}
278 \subsubsection{Struktur-Diagramm des Observers}
280 \begin{figure}[hbt]
281 \centering
282 \includegraphics[width=12cm]{pics/observer_big.png}
283 \caption{Struktur-Diagramm des Observers}
284 \end{figure}
288 \subsubsection{Interaktions-Diagramm des Observers}
289 \begin{figure}[hbt]
290 \centering
291 \includegraphics[width=12cm]{pics/observer-interaction_big.png}
292 \caption{Interaktions-Diagramm des Observers}
293 \end{figure}
298 % Daten aus der Beschreibung des Observers von GoF
299 % in welche Gruppen wird er eingeordnet
300 \subsubsection{Klassifizierung nach GoF}
302 \paragraph{Klassifizierung}
303 Verhaltensmuster, objektbasierend
306 \paragraph{Auch bekannt als}
307 Publish-Subscribe, Dependents
310 \paragraph{Zweck}
311 Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
312 % todo: besser formulieren
315 \paragraph{Kurzbeschreibung}
316 Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert
317 werden können, und um die abhängigen Objekte über Zustandsänderungen zu
318 informieren.
319 % todo: Formulierung überdenken
325 \subsection{Beispiele für den Observer in der Praxis}
326 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
327 % nicht aber (Blog + RSS)
329 \paragraph{Beispiele}
330 \begin{itemize}
331 \item Observer ist sehr verbreitet
332 \item v.a. MVC (Model = Subject; View = Observer)
333 \item Mailinglisten
334 \item Ebay Such-Abo
335 \end{itemize}
338 \paragraph{Aber}
339 \begin{itemize}
340 \item nicht Blog mit RSS-Feed!
341 \end{itemize}
349 %\subsection{Erweiterungen}
350 %% Erweiterungen, verbleibende Probleme, Kompromisse beim Design
351 \subsection{Mögliche Erweiterungen des Patterns}
353 \paragraph{Ein Observer und mehrere Subjects}
354 \begin{itemize}
355 \item Der Name des Subjects muss mitgesendet werden.
356 \end{itemize}
359 \paragraph{Nur für bestimmte Informationen anmelden}
360 \begin{itemize}
361 \item Oberservers melden sich nur für bestimmte Informationen an
362 \item Es werden weniger uninteressante Updates gesendet
363 \end{itemize}
366 \paragraph{UpdateManager}
367 \begin{itemize}
368 \item Bei komplexen Update-Zusammenhängen empfehlenswert
369 \item vermittelt zwischen Subject und Observer
370 \item (Mehr dazu in der Ausarbeitung)
371 \end{itemize}
376 \paragraph{Wer ruft notify() auf?}
378 \subparagraph{Das Subject}
379 \begin{itemize}
380 \item[+] notify() wird sicher bei jedem setState() aufgerufen
381 \item[-] hohe Update-Kosten bei Änderungen en-block
382 \end{itemize}
385 \subparagraph{Der Observer}
386 \begin{itemize}
387 \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
388 \item[-] der Client darf den notify()-Aufruf nicht vergessen
389 \end{itemize}
414 \newpage
415 \section{Zusammenfassung}
416 %\textbf{Zusammenfassend}
417 \paragraph{Zusammenfassung}
418 \begin{itemize}
419 \item Menschen denken basierend auf der Realität
420 \item deshalb Design Patterns auf Realität zurückführen
421 \item Patterns anwenden weil man es in der Realität auch so machen würde
422 \end{itemize}
428 Erklaerung des Vorgehens
429 Frage: war es erfolgreich?
430 \textbf{}
432 \paragraph{}
437 \section{Abschließend}
438 \paragraph{Verwendete Software}
439 \begin{itemize}
440 \item Debian GNU/Linux
441 \item \LaTeX-Beamer und \texttt{pdflatex}
442 \item Vim
443 \item qiv und ImageMagick
444 \item Mercurial
445 \end{itemize}
448 \paragraph{}
449 \vspace{3ex}
450 \centerline{\textbf{Danke für eure Aufmerksamkeit}}
459 \appendix
461 \section{Code}
462 \textbf{Code? --- Nein, kein Code!}
463 \paragraph{Denn}
464 \begin{center}
465 \textbf{ Implementierungen sind Schall und Rauch,\\
466 Konzepte dagegen bleiben bestehen! }
467 \end{center}
470 \vspace{4ex}
471 {\scriptsize
472 \paragraph{}
473 \textit{ Beispiel-Implementierung in der Ausarbeitung. }
475 }
487 \end{document}