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