comparison 03_observer.tex @ 12:a7bdc1211d3a

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