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