docs/DesignPatterns

annotate 03_observer.tex @ 15:0bbbd5de5daf

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