docs/DesignPatterns

annotate detailed-observer.tex @ 19:356aeb2f53f3

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