
meillo@0: % @file
meillo@12: % @brief   Referat DesignPatterns `Observer'
meillo@0: % @author  markus schnalke <meillo@marmaro.de>
meillo@0: % @since   2007-05-30
meillo@0: 
meillo@0: 
meillo@0: \documentclass{beamer}
meillo@0: 
meillo@0: 
meillo@10: %  \usepackage[T1]{fontenc}
meillo@10:   \usepackage[utf8]{inputenc}
meillo@0:   \usepackage{ngerman}
meillo@0:   \usepackage{graphicx}
meillo@0:   \usepackage[automark]{scrpage2}
meillo@0:   \input{Style01}
meillo@0: 
meillo@0: 
meillo@0: 
meillo@0: \begin{document}
meillo@0: 
meillo@0: 
meillo@12: \title{Design Patterns ``Observer''}
meillo@12: \date{}
meillo@0: 
meillo@0: \author{Markus Schnalke}
meillo@0: 
meillo@0: %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
meillo@0: 
meillo@0: \frame{
meillo@0:   \titlepage
meillo@0: }
meillo@0: 
meillo@0: 
meillo@0: 
meillo@0: 
meillo@0: 
meillo@0: \section[Outline]{}
meillo@0: \frame{
meillo@0:   \tableofcontents
meillo@0: }
meillo@0: 
meillo@0: 
meillo@0: 
meillo@0: 
meillo@3: \section{Vorgehensweise}
meillo@0: 
meillo@3: \frame{ \frametitle{Von der anderen Seite}
meillo@0: 
meillo@9:   \begin{block}{Gründe}
meillo@9:     Design Pattern sind so etwas wie ``Best Practices'' (also bewährte
meillo@3:     Vorgehensweisen), oft \textbf{nach Vorbildern in der Wirklichkeit}
meillo@3:   \end{block}
meillo@3:   \pause
meillo@3:   \begin{block}{Meine Vorgehensweise}
meillo@9:     Ich will nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass
meillo@9:     das Design Pattern ``Observer'' ein absolut natürliches Vorgehen ist, das
meillo@9:     bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden
meillo@3:     sollte.
meillo@3:   \end{block}
meillo@3: 
meillo@9:   % todo: Mehr und ausführlicher; Verweis auf nach dem Vortrag
meillo@3: 
meillo@3: }
meillo@3: 
meillo@3: 
meillo@3: \section{Erarbeitung des Observers}
meillo@3: 
meillo@3: \frame{ \frametitle{Ein Beispiel}
meillo@3: 
meillo@3:   \begin{block}{Die Situation}
meillo@0:     \begin{itemize}
meillo@9:       \item Personen die verkaufen möchten
meillo@9:       \item Personen die kaufen möchten
meillo@3:       \item Sie wollen/sollen sich nicht kennen
meillo@9:       \item Möglichst effektives Vorgehen
meillo@0:     \end{itemize}
meillo@0:   \end{block}
meillo@0:   \pause
meillo@9:   \begin{block}{Vorschläge?}
meillo@0:     \begin{itemize}
meillo@0:       \item 
meillo@0:       \item 
meillo@0:     \end{itemize}
meillo@0:   \end{block}
meillo@0: 
meillo@0: }
meillo@0: 
meillo@0: 
meillo@5: \subsection{Ansatz}
meillo@3: \frame{ \frametitle{Ansatz}
meillo@0: 
meillo@9:   \begin{block}{Mögliche Vorgehen}
meillo@3:   \begin{itemize}
meillo@3:     \item Personen direkt ansprechen
meillo@3:     \item Laut in die Menge rufen
meillo@9:     \item Den Freunden erzählen, die es dann weitererzählen
meillo@3:   \end{itemize}
meillo@3:   \end{block}
meillo@0: 
meillo@3:   \pause
meillo@0: 
meillo@3:   \begin{block}{Probleme}
meillo@3:     \begin{itemize}
meillo@9:       \item Man weiß nicht wer Interesse hat
meillo@3:       \item nicht mal wieviele
meillo@3:       \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
meillo@3:       \item ... oder sie sind taub
meillo@3:     \end{itemize}
meillo@3:   \end{block}
meillo@0: 
meillo@0: }
meillo@0: 
meillo@0: 
meillo@4: 
meillo@9: \subsection{Erarbeitung einer Lösung}
meillo@4: 
meillo@9: \frame{ \frametitle{Eine (gute) Lösung: Pinnwand}
meillo@0: 
meillo@3:   \begin{block}{Funktionsweise}
meillo@3:   \begin{itemize}
meillo@3:     \item Man kann Zettel anpinnen
meillo@3:     \item Hingehen und nach neuen Zetteln schauen
meillo@3:     \item Zettel lesen
meillo@3:     \item Zettel abnehmen
meillo@9:     \item Jeder der ein paar Fähigkeiten hat kann es
meillo@3:   \end{itemize}
meillo@3:   \end{block}
meillo@0: 
meillo@3:   \pause
meillo@3: 
meillo@3:   \begin{block}{Probleme}
meillo@3:     \begin{itemize}
meillo@3:       \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
meillo@3:       \item Man kann wichtige Zettel verpassen
meillo@9:       \item Zettel sollten nicht weggenommen werden können
meillo@3:     \end{itemize}
meillo@3:   \end{block}
meillo@3: 
meillo@0: }
meillo@0: 
meillo@0: 
meillo@0: 
meillo@3: 
meillo@9: \frame{ \frametitle{Verbesserung: Pinnwand-Sekretärin}
meillo@3: 
meillo@9:   \begin{block}{Lösung}
meillo@3:   \begin{itemize}
meillo@9:     \item Durch Studiengebühren wird eine Sekretärin für die Pinnwand angestellt
meillo@9:     \item Pinnwand und Sekretärin sind fortan eine Einheit
meillo@3:     \item Man kann bei ihr einen Zettel in Auftrag geben (auch telefonisch)
meillo@3:     \item (Sie schreibt mit lesbarer Schrift)
meillo@3:     \item Sie verhindert, dass Zettel abgenommen werden
meillo@3:   \end{itemize}
meillo@3:   \end{block}
meillo@3: 
meillo@3:   \pause
meillo@3: 
meillo@3:   \begin{block}{Bestehendes Problem}
meillo@3:     \begin{itemize}
meillo@9:       \item Man läuft immer noch oft unnötig zur Pinnwand
meillo@3:     \end{itemize}
meillo@3:   \end{block}
meillo@3: 
meillo@3: }
meillo@3: 
meillo@3: 
meillo@10: \frame{ \frametitle{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
meillo@3: 
meillo@9:   \begin{block}{Lösung}
meillo@3:   \begin{itemize}
meillo@9:     \item Durch Studiengebühren wird eine längere Arbeitszeit der Sekretärin finanziert
meillo@9:     \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
meillo@9:     \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
meillo@3:     \item Fortan ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
meillo@3:   \end{itemize}
meillo@3:   \end{block}
meillo@3: 
meillo@3: }
meillo@3: 
meillo@3: 
meillo@4: \subsection{Zusammenfassung}
meillo@4: 
meillo@3: % Zusammenfassung des Beispiels: Was haben wir, ist alles abgedeckt
meillo@9: % Frage: Sind die Zuhörer zufrieden? Ist die Lösung gut?
meillo@4: \frame{ \frametitle{Zusammenfassung des Beispiels}
meillo@4: 
meillo@9:   \begin{block}{Pinnwand + Sekretärin + Benachrichtigung}
meillo@4:     \begin{itemize}
meillo@4:       \item Man kann neue Zettel anpinnen lassen
meillo@4:       \item Man kann sich als Interessierter anmelden (und auch abmelden)
meillo@9:       \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
meillo@9:       \item Sie können dann zur Pinnwand gehen und sie sich anschauen
meillo@4:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@4:   \pause
meillo@4: 
meillo@4:   \begin{block}{Eure Meinung?}
meillo@4:     \begin{itemize}
meillo@4:       \item Ist diese Struktur zufriedenstellend?
meillo@9:       \item Erfüllt sie alle Anforderungen?
meillo@4:       \item Was fehlt?
meillo@4:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@4: }
meillo@4: 
meillo@4: 
meillo@4: 
meillo@4: 
meillo@3: 
meillo@3: 
meillo@3: \section{Nun zum Pattern}
meillo@3: 
meillo@4: 
meillo@9: \frame{ \frametitle{Überleitung}
meillo@4: 
meillo@4:   \begin{block}{Neue Namen}
meillo@4:     \begin{itemize}
meillo@10:       \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
meillo@10:       \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
meillo@10:       \item Interessenten $\rightarrow$ ``Observers''
meillo@4:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@4:   \pause
meillo@4: 
meillo@4:   \begin{block}{Schnittstellen}
meillo@10:     Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''.
meillo@4:   \end{block}
meillo@4: 
meillo@4: }
meillo@4: 
meillo@4: 
meillo@10: \frame { \frametitle{Struktur-Diagramm des Observers}
meillo@6:   \centerline{ \includegraphics[width=20em]{pics/observer_big.png} }
meillo@3: }
meillo@3: 
meillo@3: 
meillo@10: \frame { \frametitle{Interaktions-Diagramm des Observers}
meillo@10:   \centerline{ \includegraphics[width=26em]{pics/observer-interaction_big.png} }
meillo@10: }
meillo@10: 
meillo@10: 
meillo@3: % Daten aus der Beschreibung des Observers von GoF
meillo@3: % in welche Gruppen wird er eingeordnet
meillo@10: %\frame{ \frametitle{Beschreibung des Observers}
meillo@10: %
meillo@10: %  \begin{block}{Klassifizierung}
meillo@10: %    Verhaltensmuster, objektbasierend
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %  \begin{block}{Auch bekannt als}
meillo@10: %    Publish-Subscribe, Dependents
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %  \begin{block}{Zweck}
meillo@10: %    Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
meillo@10: %    % todo: besser formulieren
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %  \begin{block}{Kurzbeschreibung}
meillo@10: %    Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert
meillo@10: %    werden können, und um die abhängigen Objekte über Zustandsänderungen zu
meillo@10: %    informieren.
meillo@10: %    % todo: Formulierung überdenken
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %}
meillo@3: 
meillo@3: 
meillo@5: \subsection{Beispiele}
meillo@3: % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
meillo@3: % nicht aber (Blog + RSS)
meillo@5: \frame{ \frametitle{Der Observer in der Praxis}
meillo@4: 
meillo@5:   \begin{block}{Beispiele}
meillo@5:     \begin{itemize}
meillo@5:       \item Observer ist sehr verbreitet
meillo@5:       \item v.a. MVC (Model = Subject; View = Observer)
meillo@5:       \item Mailinglisten
meillo@5:       \item Ebay Such-Abo
meillo@5:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@4:   \pause
meillo@4: 
meillo@5:   \begin{block}{Aber}
meillo@5:     \begin{itemize}
meillo@6:       \item nicht Blog mit RSS-Feed!
meillo@5:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@4: }
meillo@3: 
meillo@3: 
meillo@5: \subsection{Erweiterungen}
meillo@3: % Erweiterungen, verbleibende Probleme, Kompromisse beim Design
meillo@10: \frame{ \frametitle{Mögliche Erweiterungen}
meillo@4: 
meillo@10:   \begin{block}{Ein Observer und mehrere Subjects}
meillo@10:     \begin{itemize}
meillo@10:       \item Der Name des Subjects muss mitgesendet werden.
meillo@10:     \end{itemize}
meillo@4:   \end{block}
meillo@4: 
meillo@10:   \begin{block}{Nur für bestimmte Informationen anmelden}
meillo@10:     \begin{itemize}
meillo@10:       \item Oberservers melden sich nur für bestimmte Informationen an
meillo@10:       \item Es werden weniger uninteressante Updates gesendet
meillo@10:     \end{itemize}
meillo@10:   \end{block}
meillo@10: 
meillo@10:   \begin{block}{UpdateManager}
meillo@10:     \begin{itemize}
meillo@10:       \item Bei komplexen Update-Zusammenhängen empfehlenswert
meillo@10:       \item vermittelt zwischen Subject und Observer
meillo@10:       \item Mehr dazu in der Ausarbeitung
meillo@10:     \end{itemize}
meillo@10:   \end{block}
meillo@10: 
meillo@10: }
meillo@10: 
meillo@10: 
meillo@10: %\frame{ \frametitle{Wer ruft notify() auf?}
meillo@10: %
meillo@10: %  \begin{block}{Das Subject}
meillo@10: %    \begin{itemize}
meillo@10: %      \item[+] notify() wird sicher bei jedem setState() aufgerufen
meillo@10: %      \item[-] hohe Update-Kosten bei Änderungen en-block
meillo@10: %    \end{itemize}
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %  \begin{block}{Der Observer}
meillo@10: %    \begin{itemize}
meillo@10: %      \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
meillo@10: %      \item[-] der Client darf den notify()-Aufruf nicht vergessen
meillo@10: %    \end{itemize}
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %}
meillo@10: 
meillo@10: 
meillo@10: 
meillo@10: \subsection{Code}
meillo@10: % Kein Code!
meillo@10: \frame{ \frametitle{Code? --- Nein, kein Code!}
meillo@10: 
meillo@10:   \begin{block}{Denn}
meillo@10:     \begin{center}
meillo@10:     \textbf{ Implementierungen sind Schall und Rauch,\\
meillo@10:     Konzepte dagegen bleiben bestehen!  }
meillo@10:     \end{center}
meillo@10:   \end{block}
meillo@10: 
meillo@10:   \vspace{4ex}
meillo@10:   {\scriptsize 
meillo@10:   \begin{block}{Aber}
meillo@10:     Beispiel-Implementierung in der Ausarbeitung.
meillo@10:   \end{block}
meillo@10:   }
meillo@10: 
meillo@4: }
meillo@3: 
meillo@3: 
meillo@3: 
meillo@3: \section{Zusammenfassung}
meillo@5: \frame{ %\frametitle{Zusammenfassend}
meillo@3:   \begin{block}{Zusammenfassung}
meillo@0:   \begin{itemize}
meillo@0:     \item 
meillo@0:     \item 
meillo@0:     \item 
meillo@0:   \end{itemize}
meillo@0:   \end{block}
meillo@0: 
meillo@0:   \pause
meillo@0: 
meillo@3:   \begin{block}{Fazit}
meillo@3:     \begin{itemize}
meillo@3:       \item 
meillo@3:       \item 
meillo@3:       \item 
meillo@3:     \end{itemize}
meillo@0:   \end{block}
meillo@0: }
meillo@0: 
meillo@0: 
meillo@10: %\section{Fragen}
meillo@10: %\frame{ \frametitle{Fragen?}
meillo@10: %  \vspace{5ex}
meillo@10: %  \centerline{\huge ?}
meillo@10: %}
meillo@0: 
meillo@0: 
meillo@5: % Erklaerung des Vorgehens
meillo@5: % Frage: war es erfolgreich?
meillo@10: %\frame{ \frametitle{}
meillo@10: %
meillo@10: %  \begin{block}{}
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %}
meillo@5: 
meillo@5: 
meillo@10: %\frame{ \frametitle{Abschließend}
meillo@10: %  \begin{block}{Verwendete Software}
meillo@10: %  \begin{itemize}
meillo@10: %    \item Debian GNU/Linux
meillo@10: %    \item \LaTeX-Beamer und \texttt{pdflatex}
meillo@10: %    \item Vim
meillo@10: %    \item qiv und ImageMagick
meillo@10: %    \item Mercurial
meillo@10: %  \end{itemize}
meillo@10: %  \end{block}
meillo@10: %
meillo@10: %  \begin{block}{}
meillo@10: %    \vspace{3ex}
meillo@10: %    \centerline{\textbf{Danke für eure Aufmerksamkeit}}
meillo@10: %  \end{block}
meillo@10: %}
meillo@0: 
meillo@0: 
meillo@3: % Code (Beispiel-Implementierung)
meillo@3: 
meillo@3: 
meillo@0: 
meillo@6: 
meillo@6: 
meillo@6: 
meillo@6: %\input{main2.tex}
meillo@6: 
meillo@6: 
meillo@0: \end{document}
meillo@3: 
meillo@3: 
meillo@3: 
meillo@3: 
meillo@3: 
meillo@3: 
meillo@3: %\subsubsection{Fehlteilmanagement}
meillo@3: %\frame{ \frametitle{Fehlteilmanagement}
meillo@3: %  %\includegraphics[width=10cm]{Pics/cc.png}
meillo@3: %}
meillo@3: 
meillo@3: % \vspace{2ex}




