docs/DesignPatterns
view 03_observer.tex @ 22:7a1c45c0b778
updated observer
author | meillo@marmaro.de |
---|---|
date | Tue, 26 Jun 2007 14:44:31 +0200 |
parents | 80c995d97cfa |
children | 6592083da58a |
line source
1 % @file
2 % @brief Referat DesignPatterns `Observer'
3 % @author markus schnalke <meillo@marmaro.de>
4 % @since 2007-05-30
7 \documentclass{beamer}
10 % \usepackage[T1]{fontenc}
11 \usepackage[utf8]{inputenc}
12 \usepackage{ngerman}
13 \usepackage{graphicx}
14 \usepackage[automark]{scrpage2}
15 \input{Style01}
19 \begin{document}
22 \title{Observer-Pattern}
23 \author{Markus Schnalke}
24 \date{}
26 %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
28 \frame{
29 \titlepage
30 }
36 \section[Outline]{}
37 \frame{
38 \tableofcontents
39 }
44 \section{Vorgehensweise}
46 \frame{ \frametitle{Von der anderen Seite}
48 \begin{block}{Gründe}
49 Design Pattern sind so etwas wie ``Best Practices'' (also bewährte
50 Vorgehensweisen), meist \textbf{nach Vorbildern in der Wirklichkeit}
51 \end{block}
52 \pause
53 \begin{block}{Meine Vorgehensweise}
54 Ich will nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass
55 das Design Pattern ``Observer'' ein absolut natürliches Vorgehen ist, das
56 bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden
57 sollte.
58 \end{block}
60 }
63 \section{Erarbeitung des Patterns}
65 \frame{ \frametitle{Ein Beispiel}
67 \begin{block}{Die Situation}
68 \begin{itemize}
69 \item Personen die verkaufen möchten
70 \item Personen die kaufen möchten
71 \item Sie wollen/sollen sich nicht kennen
72 \item Möglichst effektives Vorgehen
73 \end{itemize}
74 \end{block}
75 \pause
76 \begin{block}{Vorschläge?}
77 \begin{itemize}
78 \item
79 \item
80 \end{itemize}
81 \end{block}
83 }
86 \subsection{Ansatz}
87 \frame{ \frametitle{Ansatz}
89 \begin{block}{Mögliche Vorgehen}
90 \begin{itemize}
91 \item Personen direkt ansprechen
92 \item Laut in die Menge rufen
93 \item Den Freunden erzählen, die es dann weitererzählen
94 \end{itemize}
95 \end{block}
97 \pause
99 \begin{block}{Probleme}
100 \begin{itemize}
101 \item Man weiß nicht wer Interesse hat
102 \item nicht mal wieviele
103 \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
104 \item ... oder sie sind taub
105 \end{itemize}
106 \end{block}
108 }
112 \subsection{Erarbeitung einer Lösung}
114 \frame{ \frametitle{Eine (gute) Lösung: Pinnwand}
116 \begin{block}{Funktionsweise}
117 \begin{itemize}
118 \item Man kann Zettel anpinnen
119 \item Hingehen und nach neuen Zetteln schauen
120 \item Zettel lesen
121 \item Zettel abnehmen
122 \item Jeder der ein paar Fähigkeiten hat kann es
123 \end{itemize}
124 \end{block}
126 \pause
128 \begin{block}{Probleme}
129 \begin{itemize}
130 \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
131 \item Man kann wichtige Zettel verpassen
132 \item Zettel sollten nicht weggenommen werden können
133 \end{itemize}
134 \end{block}
136 }
141 \frame{ \frametitle{Verbesserung: Pinnwand-Sekretärin}
143 \begin{block}{Lösung}
144 \begin{itemize}
145 \item Durch Studiengebühren wird eine Sekretärin für die Pinnwand angestellt
146 \item Pinnwand und Sekretärin sind fortan eine Einheit
147 \item Man kann bei ihr einen Zettel in Auftrag geben (auch telefonisch)
148 \item (Sie schreibt mit lesbarer Schrift)
149 \item Sie verhindert, dass Zettel abgenommen werden
150 \end{itemize}
151 \end{block}
153 \pause
155 \begin{block}{Bestehendes Problem}
156 \begin{itemize}
157 \item Man läuft immer noch oft unnötig zur Pinnwand
158 \end{itemize}
159 \end{block}
161 }
164 \frame{ \frametitle{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
166 \begin{block}{Lösung}
167 \begin{itemize}
168 \item Durch Studiengebühren wird eine längere Arbeitszeit der Sekretärin finanziert
169 \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
170 \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
171 \item Zukünftig ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
172 \end{itemize}
173 \end{block}
175 }
178 \subsection{Zusammenfassung}
180 % Zusammenfassung des Beispiels: Was haben wir, ist alles abgedeckt
181 % Frage: Sind die Zuhörer zufrieden? Ist die Lösung gut?
182 \frame{ \frametitle{Zusammenfassung des Beispiels}
184 \begin{block}{Pinnwand + Sekretärin + Benachrichtigung}
185 \begin{itemize}
186 \item Man kann neue Zettel anpinnen lassen
187 \item Man kann sich als Interessierter anmelden (und auch abmelden)
188 \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
189 \item Sie können dann zur Pinnwand gehen und sie sich anschauen
190 \end{itemize}
191 \end{block}
193 \pause
195 \begin{block}{Eure Meinung?}
196 \begin{itemize}
197 \item Ist diese Struktur zufriedenstellend?
198 \item Erfüllt sie alle Anforderungen?
199 \item Was fehlt?
200 \end{itemize}
201 \end{block}
203 }
210 \section{Das Pattern}
213 \frame{ \frametitle{Überleitung}
215 \begin{block}{Neue Namen}
216 \begin{itemize}
217 \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
218 \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
219 \item Interessenten $\rightarrow$ ``Observers''
220 \end{itemize}
221 \end{block}
223 \pause
225 \begin{block}{Schnittstellen}
226 Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''.
228 (rem: taub, minimale Fähigkeiten, leserliche Schrift, ...)
229 \end{block}
231 }
234 \subsection{UML-Diagramme}
235 \frame { \frametitle{Struktur-Diagramm des Observers}
236 \centerline{ \includegraphics[width=20em]{pics/observer_big.png} }
237 }
240 \frame { \frametitle{Interaktions-Diagramm des Observers}
241 \centerline{ \includegraphics[width=26em]{pics/observer-interaction_big.png} }
242 }
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 %}
272 \subsection{Beispiele}
273 % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
274 % nicht aber (Blog + RSS)
275 \frame{ \frametitle{Der Observer in der Praxis}
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}
286 \pause
288 \begin{block}{Aber}
289 \begin{itemize}
290 \item nicht Blog mit RSS-Feed!
291 \end{itemize}
292 \end{block}
294 }
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 %}
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 %}
345 \subsection{Code}
346 % Kein Code!
347 \frame{ \frametitle{Code? --- Nein, kein Code!}
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}
356 \vspace{4ex}
357 {\scriptsize
358 \begin{block}{}
359 \textit{ Beispiel-Implementierung in der Ausarbeitung. }
360 \end{block}
361 }
363 }
367 \section{Zusammenfassung}
368 \frame{ %\frametitle{Zusammenfassend}
369 \begin{block}{Zusammenfassung}
370 \begin{itemize}
371 \item Menschen denken basierend auf der Realität
372 \item deshalb Design Patterns auf Realität zurückführen
373 \item Patterns anwenden weil man es in der Realität auch so machen würde
374 \end{itemize}
375 \end{block}
377 }
380 %\section{Fragen}
381 %\frame{ \frametitle{Fragen?}
382 % \vspace{5ex}
383 % \centerline{\huge ?}
384 %}
387 % Erklaerung des Vorgehens
388 % Frage: war es erfolgreich?
389 %\frame{ \frametitle{}
390 %
391 % \begin{block}{}
392 % \end{block}
393 %
394 %}
397 %\frame{ \frametitle{Abschließend}
398 % \begin{block}{Verwendete Software}
399 % \begin{itemize}
400 % \item Debian GNU/Linux
401 % \item \LaTeX-Beamer und \texttt{pdflatex}
402 % \item Vim
403 % \item qiv und ImageMagick
404 % \item Mercurial
405 % \end{itemize}
406 % \end{block}
407 %
408 % \begin{block}{}
409 % \vspace{3ex}
410 % \centerline{\textbf{Danke für eure Aufmerksamkeit}}
411 % \end{block}
412 %}
415 % Code (Beispiel-Implementierung)
422 %\input{main2.tex}
425 \end{document}
432 %\subsubsection{Fehlteilmanagement}
433 %\frame{ \frametitle{Fehlteilmanagement}
434 % %\includegraphics[width=10cm]{Pics/cc.png}
435 %}
437 % \vspace{2ex}