docs/DesignPatterns

view main.tex @ 5:00d57081e389

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