Mercurial > docs > DesignPatterns
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} |