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