docs/DesignPatterns

view 03_observer.tex @ 25:e7ac382e4a20

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