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