docs/DesignPatterns

view 03_observer.tex @ 20:12d6f1a641c8

cleanups
author meillo@marmaro.de
date Tue, 26 Jun 2007 09:53:41 +0200
parents eff2ffb701fe
children 80c995d97cfa
line source
1 % @file
2 % @brief Referat DesignPatterns `Observer'
3 % @author markus schnalke <meillo@marmaro.de>
4 % @since 2007-05-30
7 \documentclass{beamer}
10 % \usepackage[T1]{fontenc}
11 \usepackage[utf8]{inputenc}
12 \usepackage{ngerman}
13 \usepackage{graphicx}
14 \usepackage[automark]{scrpage2}
15 \input{Style01}
19 \begin{document}
22 \title{Observer-Pattern}
23 \author{Markus Schnalke}
24 \date{}
26 %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
28 \frame{
29 \titlepage
30 }
36 \section[Outline]{}
37 \frame{
38 \tableofcontents
39 }
44 \section{Vorgehensweise}
46 \frame{ \frametitle{Von der anderen Seite}
48 \begin{block}{Gründe}
49 Design Pattern sind so etwas wie ``Best Practices'' (also bewährte
50 Vorgehensweisen), oft \textbf{nach Vorbildern in der Wirklichkeit}
51 \end{block}
52 \pause
53 \begin{block}{Meine Vorgehensweise}
54 Ich will nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass
55 das Design Pattern ``Observer'' ein absolut natürliches Vorgehen ist, das
56 bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden
57 sollte.
58 \end{block}
60 % todo: Mehr und ausführlicher; Verweis auf nach dem Vortrag
62 }
65 \section{Erarbeitung des Observers}
67 \frame{ \frametitle{Ein Beispiel}
69 \begin{block}{Die Situation}
70 \begin{itemize}
71 \item Personen die verkaufen möchten
72 \item Personen die kaufen möchten
73 \item Sie wollen/sollen sich nicht kennen
74 \item Möglichst effektives Vorgehen
75 \end{itemize}
76 \end{block}
77 \pause
78 \begin{block}{Vorschläge?}
79 \begin{itemize}
80 \item
81 \item
82 \end{itemize}
83 \end{block}
85 }
88 \subsection{Ansatz}
89 \frame{ \frametitle{Ansatz}
91 \begin{block}{Mögliche Vorgehen}
92 \begin{itemize}
93 \item Personen direkt ansprechen
94 \item Laut in die Menge rufen
95 \item Den Freunden erzählen, die es dann weitererzählen
96 \end{itemize}
97 \end{block}
99 \pause
101 \begin{block}{Probleme}
102 \begin{itemize}
103 \item Man weiß nicht wer Interesse hat
104 \item nicht mal wieviele
105 \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
106 \item ... oder sie sind taub
107 \end{itemize}
108 \end{block}
110 }
114 \subsection{Erarbeitung einer Lösung}
116 \frame{ \frametitle{Eine (gute) Lösung: Pinnwand}
118 \begin{block}{Funktionsweise}
119 \begin{itemize}
120 \item Man kann Zettel anpinnen
121 \item Hingehen und nach neuen Zetteln schauen
122 \item Zettel lesen
123 \item Zettel abnehmen
124 \item Jeder der ein paar Fähigkeiten hat kann es
125 \end{itemize}
126 \end{block}
128 \pause
130 \begin{block}{Probleme}
131 \begin{itemize}
132 \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
133 \item Man kann wichtige Zettel verpassen
134 \item Zettel sollten nicht weggenommen werden können
135 \end{itemize}
136 \end{block}
138 }
143 \frame{ \frametitle{Verbesserung: Pinnwand-Sekretärin}
145 \begin{block}{Lösung}
146 \begin{itemize}
147 \item Durch Studiengebühren wird eine Sekretärin für die Pinnwand angestellt
148 \item Pinnwand und Sekretärin sind fortan eine Einheit
149 \item Man kann bei ihr einen Zettel in Auftrag geben (auch telefonisch)
150 \item (Sie schreibt mit lesbarer Schrift)
151 \item Sie verhindert, dass Zettel abgenommen werden
152 \end{itemize}
153 \end{block}
155 \pause
157 \begin{block}{Bestehendes Problem}
158 \begin{itemize}
159 \item Man läuft immer noch oft unnötig zur Pinnwand
160 \end{itemize}
161 \end{block}
163 }
166 \frame{ \frametitle{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
168 \begin{block}{Lösung}
169 \begin{itemize}
170 \item Durch Studiengebühren wird eine längere Arbeitszeit der Sekretärin finanziert
171 \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
172 \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
173 \item Fortan ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
174 \end{itemize}
175 \end{block}
177 }
180 \subsection{Zusammenfassung}
182 % Zusammenfassung des Beispiels: Was haben wir, ist alles abgedeckt
183 % Frage: Sind die Zuhörer zufrieden? Ist die Lösung gut?
184 \frame{ \frametitle{Zusammenfassung des Beispiels}
186 \begin{block}{Pinnwand + Sekretärin + Benachrichtigung}
187 \begin{itemize}
188 \item Man kann neue Zettel anpinnen lassen
189 \item Man kann sich als Interessierter anmelden (und auch abmelden)
190 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
191 \item Sie können dann zur Pinnwand gehen und sie sich anschauen
192 \end{itemize}
193 \end{block}
195 \pause
197 \begin{block}{Eure Meinung?}
198 \begin{itemize}
199 \item Ist diese Struktur zufriedenstellend?
200 \item Erfüllt sie alle Anforderungen?
201 \item Was fehlt?
202 \end{itemize}
203 \end{block}
205 }
212 \section{Nun zum Pattern}
215 \frame{ \frametitle{Überleitung}
217 \begin{block}{Neue Namen}
218 \begin{itemize}
219 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
220 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
221 \item Interessenten $\rightarrow$ ``Observers''
222 \end{itemize}
223 \end{block}
225 \pause
227 \begin{block}{Schnittstellen}
228 Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''.
229 \end{block}
231 }
234 \frame { \frametitle{Struktur-Diagramm des Observers}
235 \centerline{ \includegraphics[width=20em]{pics/observer_big.png} }
236 }
239 \frame { \frametitle{Interaktions-Diagramm des Observers}
240 \centerline{ \includegraphics[width=26em]{pics/observer-interaction_big.png} }
241 }
244 % Daten aus der Beschreibung des Observers von GoF
245 % in welche Gruppen wird er eingeordnet
246 %\frame{ \frametitle{Beschreibung des Observers}
247 %
248 % \begin{block}{Klassifizierung}
249 % Verhaltensmuster, objektbasierend
250 % \end{block}
251 %
252 % \begin{block}{Auch bekannt als}
253 % Publish-Subscribe, Dependents
254 % \end{block}
255 %
256 % \begin{block}{Zweck}
257 % Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
258 % % todo: besser formulieren
259 % \end{block}
260 %
261 % \begin{block}{Kurzbeschreibung}
262 % Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert
263 % werden können, und um die abhängigen Objekte über Zustandsänderungen zu
264 % informieren.
265 % % todo: Formulierung überdenken
266 % \end{block}
267 %
268 %}
271 \subsection{Beispiele}
272 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
273 % nicht aber (Blog + RSS)
274 \frame{ \frametitle{Der Observer in der Praxis}
276 \begin{block}{Beispiele}
277 \begin{itemize}
278 \item Observer ist sehr verbreitet
279 \item v.a. MVC (Model = Subject; View = Observer)
280 \item Mailinglisten
281 \item Ebay Such-Abo
282 \end{itemize}
283 \end{block}
285 \pause
287 \begin{block}{Aber}
288 \begin{itemize}
289 \item nicht Blog mit RSS-Feed!
290 \end{itemize}
291 \end{block}
293 }
296 \subsection{Erweiterungen}
297 % Erweiterungen, verbleibende Probleme, Kompromisse beim Design
298 \frame{ \frametitle{Mögliche Erweiterungen}
300 \begin{block}{Ein Observer und mehrere Subjects}
301 \begin{itemize}
302 \item Der Name des Subjects muss mitgesendet werden.
303 \end{itemize}
304 \end{block}
306 \begin{block}{Nur für bestimmte Informationen anmelden}
307 \begin{itemize}
308 \item Oberservers melden sich nur für bestimmte Informationen an
309 \item Es werden weniger uninteressante Updates gesendet
310 \end{itemize}
311 \end{block}
313 \begin{block}{UpdateManager}
314 \begin{itemize}
315 \item Bei komplexen Update-Zusammenhängen empfehlenswert
316 \item vermittelt zwischen Subject und Observer
317 \item Mehr dazu in der Ausarbeitung
318 \end{itemize}
319 \end{block}
321 }
324 %\frame{ \frametitle{Wer ruft notify() auf?}
325 %
326 % \begin{block}{Das Subject}
327 % \begin{itemize}
328 % \item[+] notify() wird sicher bei jedem setState() aufgerufen
329 % \item[-] hohe Update-Kosten bei Änderungen en-block
330 % \end{itemize}
331 % \end{block}
332 %
333 % \begin{block}{Der Observer}
334 % \begin{itemize}
335 % \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
336 % \item[-] der Client darf den notify()-Aufruf nicht vergessen
337 % \end{itemize}
338 % \end{block}
339 %
340 %}
344 \subsection{Code}
345 % Kein Code!
346 \frame{ \frametitle{Code? --- Nein, kein Code!}
348 \begin{block}{Denn}
349 \begin{center}
350 \textbf{ Implementierungen sind Schall und Rauch,\\
351 Konzepte dagegen bleiben bestehen! }
352 \end{center}
353 \end{block}
355 \vspace{4ex}
356 {\scriptsize
357 \begin{block}{Aber}
358 Beispiel-Implementierung in der Ausarbeitung.
359 \end{block}
360 }
362 }
366 \section{Zusammenfassung}
367 \frame{ %\frametitle{Zusammenfassend}
368 \begin{block}{Zusammenfassung}
369 \begin{itemize}
370 \item
371 \item
372 \item
373 \end{itemize}
374 \end{block}
376 }
379 %\section{Fragen}
380 %\frame{ \frametitle{Fragen?}
381 % \vspace{5ex}
382 % \centerline{\huge ?}
383 %}
386 % Erklaerung des Vorgehens
387 % Frage: war es erfolgreich?
388 %\frame{ \frametitle{}
389 %
390 % \begin{block}{}
391 % \end{block}
392 %
393 %}
396 %\frame{ \frametitle{Abschließend}
397 % \begin{block}{Verwendete Software}
398 % \begin{itemize}
399 % \item Debian GNU/Linux
400 % \item \LaTeX-Beamer und \texttt{pdflatex}
401 % \item Vim
402 % \item qiv und ImageMagick
403 % \item Mercurial
404 % \end{itemize}
405 % \end{block}
406 %
407 % \begin{block}{}
408 % \vspace{3ex}
409 % \centerline{\textbf{Danke für eure Aufmerksamkeit}}
410 % \end{block}
411 %}
414 % Code (Beispiel-Implementierung)
421 %\input{main2.tex}
424 \end{document}
431 %\subsubsection{Fehlteilmanagement}
432 %\frame{ \frametitle{Fehlteilmanagement}
433 % %\includegraphics[width=10cm]{Pics/cc.png}
434 %}
436 % \vspace{2ex}