docs/DesignPatterns

annotate 03_observer.tex @ 30:8bdd4e54885e

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