docs/DesignPatterns

changeset 28:ddd8378a539e

did lot of working on detailed-observer
author meillo@marmaro.de
date Thu, 05 Jul 2007 07:53:15 +0200
parents c5c50818b3d9
children f3b4061ec3b4
files detailed-observer.tex pics/composite.png pics/observer.png
diffstat 3 files changed, 283 insertions(+), 178 deletions(-) [+]
line diff
     1.1 --- a/detailed-observer.tex	Wed Jun 27 21:42:36 2007 +0200
     1.2 +++ b/detailed-observer.tex	Thu Jul 05 07:53:15 2007 +0200
     1.3 @@ -1,122 +1,158 @@
     1.4  % @file
     1.5 -% @brief   Referat DesignPattern `Observer'
     1.6 +% @brief   Referat DesignPatterns `Observer'
     1.7  % @author  markus schnalke <meillo@marmaro.de>
     1.8  % @since   2007-05-30
     1.9  
    1.10  
    1.11 -\documentclass{beamer}
    1.12 +\documentclass[a4paper]{scrartcl}
    1.13  
    1.14 -
    1.15 -  \usepackage[T1]{fontenc}
    1.16 -  \usepackage[latin1]{inputenc}
    1.17 +  \usepackage[utf8]{inputenc}
    1.18    \usepackage{ngerman}
    1.19    \usepackage{graphicx}
    1.20    \usepackage[automark]{scrpage2}
    1.21 -  \input{Style01}
    1.22  
    1.23 -
    1.24 +  \setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
    1.25 +  \setlength{\parindent}{0em}
    1.26 +  \setlength{\parskip}{1.0ex plus 1.0ex minus 0.5ex}
    1.27 +  \pagestyle{scrheadings}
    1.28 +  \setcounter{tocdepth}{2}
    1.29  
    1.30  \begin{document}
    1.31  
    1.32  
    1.33 -\title{Design Pattern ``Observer''}
    1.34 -\date{\today}
    1.35  
    1.36 -\author{Markus Schnalke}
    1.37  
    1.38 -%\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
    1.39  
    1.40 -\frame{
    1.41 -  \titlepage
    1.42 -}
    1.43 +%%%%  Titlepage  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1.44 +\begin{titlepage}
    1.45 +  \title{Observer-Pattern}
    1.46 +  \author{Markus Schnalke}
    1.47 +  \date{2007-07-04}
    1.48  
    1.49  
    1.50 +  \thispagestyle{empty}
    1.51  
    1.52  
    1.53 +  \begin{flushright}
    1.54  
    1.55 -\section[Outline]{}
    1.56 -\frame{
    1.57 -  \tableofcontents
    1.58 -}
    1.59 +  \rule[8cm]{0cm}{0cm}
    1.60 +  {\Huge Design Pattern\\ \textbf{Observer}}
    1.61  
    1.62 +  \rule[2cm]{0cm}{0cm}
    1.63 +  \textsc{Markus Schnalke\\MatNr: 039131}
    1.64  
    1.65 +  \end{flushright}
    1.66  
    1.67  
    1.68 -\section{Vorgehensweise}
    1.69  
    1.70 -\frame{ \frametitle{Von der anderen Seite}
    1.71 +  \rule[7cm]{0cm}{0cm}
    1.72  
    1.73 -  \begin{block}{Gründe}
    1.74 -    Design Pattern sind so etwas wie ``Best Practices'' (also bewährte
    1.75 -    Vorgehensweisen), oft \textbf{nach Vorbildern in der Wirklichkeit}
    1.76 -  \end{block}
    1.77 -  \pause
    1.78 -  \begin{block}{Meine Vorgehensweise}
    1.79 -    Ich will nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass
    1.80 -    das Design Pattern ``Observer'' ein absolut natürliches Vorgehen ist, das
    1.81 -    bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden
    1.82 -    sollte.
    1.83 -  \end{block}
    1.84 +  \textit{Dies ist meine Ausarbeitung zum Design Pattern ``Observer'' im Rahmen der Vorlesung Softwaretechnik im Studiengang Wirtschaftsinformatik an der Hochschule Ulm.}
    1.85  
    1.86 -  % todo: Mehr und ausführlicher; Verweis auf nach dem Vortrag
    1.87 +  {\tiny Dieses Dokument darf gerne zitiert, kopiert und weitergegeben werden. Ich bitte nur darum meinen Namen und einen Verweis auf meine Website (http://marmaro.de) zu erwähnen --- danke! }
    1.88  
    1.89 -}
    1.90  
    1.91 +\end{titlepage}
    1.92  
    1.93 -\section{Erarbeitung des Observers}
    1.94  
    1.95 -\frame{ \frametitle{Ein Beispiel}
    1.96  
    1.97 -  \begin{block}{Die Situation}
    1.98 +
    1.99 +\tableofcontents
   1.100 +
   1.101 +
   1.102 +
   1.103 +
   1.104 +
   1.105 +
   1.106 +
   1.107 +
   1.108 +
   1.109 +
   1.110 +
   1.111 +
   1.112 +
   1.113 +
   1.114 +%%%%  Einleitung  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1.115 +\newpage
   1.116 +\section{Einleitung}
   1.117 +
   1.118 +Ich möchte im Folgenden einen Ansatz zum Verstehen von Design Patterns aufzeigen. Dazu nehme ich das Design Pattern ``Observer'', das ich Stück für Stück aus einer Situation der realen Welt herleiten werde. Es geht mir dabei nicht primär darum euch dieses Pattern zu erklären, vielmehr soll das Erfassen des Zusammenhangs zwischen Realität und Design Patterns gefördert werden.
   1.119 +
   1.120 +Mein Ziel ist es die \textit{Natürlichkeit} von Design Patterns darzustellen --- weil sie dem Vorgehen in der Realität entsprechen!
   1.121 +
   1.122 +
   1.123 +
   1.124 +
   1.125 +\section{Meine Vorgehensweise}
   1.126 +
   1.127 +  \begin{quote}
   1.128 +    Design Pattern sind ``Best Practices'' (= Erfolgsrezepte), meist \textbf{nach Vorbildern in der Realität}.
   1.129 +  \end{quote}
   1.130 +  
   1.131 +  Aus diesem Grund möchte ich nun anhand eines Beispiels aus dem täglichen Leben zeigen, dass das Design Pattern \textbf{Observer} ein absolut natürliches Vorgehen ist, das bei ähnlichen Situationen in Programmen deshalb ebenso verwendet werden sollte. Dass ich hier gerade das Pattern \textbf{Observer} verwende, hat keinen besonderen Grund; es kann wohl (fast) jedes Pattern auf diese Weise verständlich und logisch gemacht werden.
   1.132 +  
   1.133 +
   1.134 +
   1.135 +
   1.136 +
   1.137 +
   1.138 +
   1.139 +
   1.140 +
   1.141 +
   1.142 +
   1.143 +
   1.144 +
   1.145 +
   1.146 +
   1.147 +\newpage
   1.148 +\section{Erarbeitung des Patterns}
   1.149 +  
   1.150 +\subsection{Ausgangssituation}
   1.151 +  Meine Ausgangssituation von der ich mich zu einer möglichst optimalen Lösung vorarbeiten möchte ist Folgende:
   1.152 +
   1.153      \begin{itemize}
   1.154 -      \item Personen die verkaufen möchten
   1.155 -      \item Personen die kaufen möchten
   1.156 +      \item Es gibt Personen die Etwas verkaufen möchten
   1.157 +      \item Es gibt Personen die Etwas kaufen möchten
   1.158        \item Sie wollen/sollen sich nicht kennen
   1.159 -      \item Möglichst effektives Vorgehen
   1.160      \end{itemize}
   1.161 -  \end{block}
   1.162 -  \pause
   1.163 -  \begin{block}{Vorschläge?}
   1.164 -    \begin{itemize}
   1.165 -      \item 
   1.166 -      \item 
   1.167 -    \end{itemize}
   1.168 -  \end{block}
   1.169  
   1.170 -}
   1.171 +  Gesucht ist natürlich ein möglichst effektives Vorgehen. Eben das ist der Grund, weshalb wir Patterns verwenden möchten: Wir suchen eine effektive Standardlösung für  regelmäßig auftretende Problemstellungen.
   1.172 +  
   1.173  
   1.174  
   1.175 -\subsection{Ansatz}
   1.176 -\frame{ \frametitle{Ansatz}
   1.177  
   1.178 -  \begin{block}{Mögliche Vorgehen}
   1.179 +\subsection{Mögliche Ansätze}
   1.180 +
   1.181 +  Um systematisch vorzugehen, überlegen wir uns zunächst, welche primitiven Lösungen für unser Problem in Frage kommen. Dies wären zum Beispiel:
   1.182    \begin{itemize}
   1.183      \item Personen direkt ansprechen
   1.184      \item Laut in die Menge rufen
   1.185      \item Den Freunden erzählen, die es dann weitererzählen
   1.186    \end{itemize}
   1.187 -  \end{block}
   1.188  
   1.189 -  \pause
   1.190 -
   1.191 -  \begin{block}{Probleme}
   1.192 +  Vermutlich wäre der Eine oder Andere (unbewusst) gleich höher eingestiegen, dennoch zeigen auch (oder gerade) diese simplen Vorgehensweisen Probleme auf, die sonst kaum explizit wahrgenommen werden.
   1.193 +  
   1.194 +  Dies sind unter anderem:
   1.195 +  
   1.196      \begin{itemize}
   1.197        \item Man weiß nicht wer Interesse hat
   1.198        \item nicht mal wieviele
   1.199        \item Manche Interessenten sind vielleicht nur zu bestimmten Zeiten da
   1.200 -      \item ... oder sie sind taub
   1.201 +      \item (... oder sie sind taub)
   1.202      \end{itemize}
   1.203 -  \end{block}
   1.204  
   1.205 -}
   1.206 +
   1.207  
   1.208  
   1.209  
   1.210  \subsection{Erarbeitung einer Lösung}
   1.211  
   1.212 -\frame{ \frametitle{Eine (gute) Lösung: Pinnwand}
   1.213 +\subsubsection{Eine (gute) Lösung: Pinnwand}
   1.214  
   1.215 -  \begin{block}{Funktionsweise}
   1.216 +
   1.217 +
   1.218 +  \paragraph{Funktionsweise}
   1.219    \begin{itemize}
   1.220      \item Man kann Zettel anpinnen
   1.221      \item Hingehen und nach neuen Zetteln schauen
   1.222 @@ -124,26 +160,25 @@
   1.223      \item Zettel abnehmen
   1.224      \item Jeder der ein paar Fähigkeiten hat kann es
   1.225    \end{itemize}
   1.226 -  \end{block}
   1.227 +  
   1.228  
   1.229 -  \pause
   1.230 +  
   1.231  
   1.232 -  \begin{block}{Probleme}
   1.233 +  \paragraph{Probleme}
   1.234      \begin{itemize}
   1.235        \item Man muss hingehen, nur um festzustellen, dass nichts Neues dabei ist
   1.236        \item Man kann wichtige Zettel verpassen
   1.237        \item Zettel sollten nicht weggenommen werden können
   1.238      \end{itemize}
   1.239 -  \end{block}
   1.240 +  
   1.241  
   1.242 -}
   1.243  
   1.244  
   1.245  
   1.246  
   1.247 -\frame{ \frametitle{Verbesserung: Pinnwand-Sekretärin}
   1.248 +\subsubsection{Verbesserung: Pinnwand-Sekretärin}
   1.249  
   1.250 -  \begin{block}{Lösung}
   1.251 +  \paragraph{Lösung}
   1.252    \begin{itemize}
   1.253      \item Durch Studiengebühren wird eine Sekretärin für die Pinnwand angestellt
   1.254      \item Pinnwand und Sekretärin sind fortan eine Einheit
   1.255 @@ -151,196 +186,256 @@
   1.256      \item (Sie schreibt mit lesbarer Schrift)
   1.257      \item Sie verhindert, dass Zettel abgenommen werden
   1.258    \end{itemize}
   1.259 -  \end{block}
   1.260 +  
   1.261  
   1.262 -  \pause
   1.263 +  
   1.264  
   1.265 -  \begin{block}{Bestehendes Problem}
   1.266 +  \paragraph{Bestehendes Problem}
   1.267      \begin{itemize}
   1.268        \item Man läuft immer noch oft unnötig zur Pinnwand
   1.269      \end{itemize}
   1.270 -  \end{block}
   1.271 +  
   1.272  
   1.273 -}
   1.274  
   1.275  
   1.276 -\frame{ \frametitle{2. Verbesserung: Pinnup-Sekretärin mit Benachrichtigung}
   1.277 +\subsubsection{2. Verbesserung: Pinnwand-Sekretärin mit Benachrichtigung}
   1.278  
   1.279 -  \begin{block}{Lösung}
   1.280 +  \paragraph{Lösung}
   1.281    \begin{itemize}
   1.282      \item Durch Studiengebühren wird eine längere Arbeitszeit der Sekretärin finanziert
   1.283      \item Man kann sich bei der Sekretärin nun als ``Interessierter'' registrieren
   1.284      \item Die Sekretärin trägt die Telefonnummer in eine Liste ein
   1.285 -    \item Fortan ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
   1.286 +    \item Zukünftig ruft sie alle Personen der Liste an, wenn sie einen neuen Zettel anpinnt
   1.287    \end{itemize}
   1.288 -  \end{block}
   1.289 +  
   1.290  
   1.291 -}
   1.292  
   1.293  
   1.294 -\subsection{Zusammenfassung}
   1.295 +\subsection{Zusammenfassung des Beispiels}
   1.296  
   1.297 -% Zusammenfassung des Beispiels: Was haben wir, ist alles abgedeckt
   1.298 -% Frage: Sind die Zuhörer zufrieden? Ist die Lösung gut?
   1.299 -\frame{ \frametitle{Zusammenfassung des Beispiels}
   1.300 -
   1.301 -  \begin{block}{Pinnwand + Sekretärin + Benachrichtigung}
   1.302 +  \paragraph{Pinnwand + Sekretärin + Benachrichtigung}
   1.303      \begin{itemize}
   1.304        \item Man kann neue Zettel anpinnen lassen
   1.305        \item Man kann sich als Interessierter anmelden (und auch abmelden)
   1.306        \item Interessierte werden bei Änderungen der Pinnwand benachrichtigt
   1.307        \item Sie können dann zur Pinnwand gehen und sie sich anschauen
   1.308      \end{itemize}
   1.309 -  \end{block}
   1.310 +  
   1.311  
   1.312 -  \pause
   1.313 +  
   1.314  
   1.315 -  \begin{block}{Eure Meinung?}
   1.316 +  \paragraph{Eure Meinung?}
   1.317      \begin{itemize}
   1.318        \item Ist diese Struktur zufriedenstellend?
   1.319        \item Erfüllt sie alle Anforderungen?
   1.320        \item Was fehlt?
   1.321      \end{itemize}
   1.322 -  \end{block}
   1.323 +  
   1.324  
   1.325 -}
   1.326  
   1.327  
   1.328  
   1.329  
   1.330  
   1.331  
   1.332 -\section{Nun zum Pattern}
   1.333  
   1.334  
   1.335 -\frame{ \frametitle{Überleitung}
   1.336  
   1.337 -  \begin{block}{Neue Namen}
   1.338 +
   1.339 +
   1.340 +
   1.341 +
   1.342 +
   1.343 +
   1.344 +
   1.345 +
   1.346 +
   1.347 +
   1.348 +
   1.349 +
   1.350 +\newpage
   1.351 +\section{Das Pattern}
   1.352 +
   1.353 +
   1.354 +\subsection{Überleitung}
   1.355 +
   1.356 +  \paragraph{Neue Namen}
   1.357      \begin{itemize}
   1.358 -      \item Pinnwand-Sekretärin-Einheit -> ``Subject''
   1.359 -      \item Die Zettel auf der Pinnwand -> ``subjectState''
   1.360 -      \item Interessenten -> ``Observers''
   1.361 +      \item Pinnwand-Sekretärin-Einheit $\rightarrow$ ``Subject''
   1.362 +      \item Die Zettel auf der Pinnwand $\rightarrow$ ``subjectState''
   1.363 +      \item Interessenten $\rightarrow$ ``Observers''
   1.364      \end{itemize}
   1.365 -  \end{block}
   1.366  
   1.367 -  \pause
   1.368 +  \paragraph{Schnittstellen}
   1.369 +    Die Fähigkeiten der Pinnwand/Sekretärin und Interessenten sind ihre ``Interfaces''.
   1.370  
   1.371 -  \begin{block}{Schnittstellen}
   1.372 -    Die Fähigkeiten die Pinnwand/Sekretärin und Interessenten haben müssen um in diesem Schema korrekt zu funktionieren sind ihre ``Interfaces''.
   1.373 -  \end{block}
   1.374 +    (vgl: taub, minimale Fähigkeiten, leserliche Schrift, ...)
   1.375 +  
   1.376  
   1.377 -}
   1.378  
   1.379  
   1.380 -\frame { \frametitle{UML-Diagramm des Observers}
   1.381 -  \centerline{ \includegraphics[width=20em]{pics/observer_big.png} }
   1.382 -}
   1.383 +\subsection{UML-Diagramme}
   1.384 + \subsubsection{Struktur-Diagramm des Observers}
   1.385 +
   1.386 +  \begin{figure}[hbt]
   1.387 +    \centering
   1.388 +    \includegraphics[width=12cm]{pics/observer_big.png}
   1.389 +    \caption{Struktur-Diagramm des Observers}
   1.390 +  \end{figure}
   1.391 +
   1.392 +
   1.393 +
   1.394 + \subsubsection{Interaktions-Diagramm des Observers}
   1.395 +  \begin{figure}[hbt]
   1.396 +    \centering
   1.397 +    \includegraphics[width=12cm]{pics/observer-interaction_big.png}
   1.398 +    \caption{Interaktions-Diagramm des Observers}
   1.399 +  \end{figure}
   1.400 +
   1.401 +
   1.402  
   1.403  
   1.404  % Daten aus der Beschreibung des Observers von GoF
   1.405  % in welche Gruppen wird er eingeordnet
   1.406 -\frame{ \frametitle{Beschreibung des Observers}
   1.407 + \subsubsection{Klassifizierung nach GoF}
   1.408  
   1.409 -  \begin{block}{Klassifizierung}
   1.410 +  \paragraph{Klassifizierung}
   1.411      Verhaltensmuster, objektbasierend
   1.412 -  \end{block}
   1.413 +  
   1.414  
   1.415 -  \begin{block}{Auch bekannt als}
   1.416 +  \paragraph{Auch bekannt als}
   1.417      Publish-Subscribe, Dependents
   1.418 -  \end{block}
   1.419 +  
   1.420  
   1.421 -  \begin{block}{Zweck}
   1.422 +  \paragraph{Zweck}
   1.423      Abhängigkeiten zwischen Objekten zu erstellen, sodass sich abhängige Objekte ändern, wenn sich das Objekt selbst ändert.
   1.424      % todo: besser formulieren
   1.425 -  \end{block}
   1.426 +  
   1.427  
   1.428 -  \begin{block}{Kurzbeschreibung}
   1.429 +  \paragraph{Kurzbeschreibung}
   1.430      Schnittstellen anlegen, um Abhängigkeiten zwischen Objekten registriert
   1.431      werden können, und um die abhängigen Objekte über Zustandsänderungen zu
   1.432      informieren.
   1.433      % todo: Formulierung überdenken
   1.434 -  \end{block}
   1.435 +  
   1.436  
   1.437 -}
   1.438  
   1.439  
   1.440 -\subsection{Beispiele}
   1.441 +
   1.442 +\subsection{Beispiele für den Observer in der Praxis}
   1.443  % Einsatzgebiete (MVC) und RL (Mailingslisten, Ebay-Suchabo)
   1.444  % nicht aber (Blog + RSS)
   1.445 -\frame{ \frametitle{Der Observer in der Praxis}
   1.446  
   1.447 -  \begin{block}{Beispiele}
   1.448 +  \paragraph{Beispiele}
   1.449      \begin{itemize}
   1.450        \item Observer ist sehr verbreitet
   1.451        \item v.a. MVC (Model = Subject; View = Observer)
   1.452        \item Mailinglisten
   1.453        \item Ebay Such-Abo
   1.454      \end{itemize}
   1.455 -  \end{block}
   1.456 +  
   1.457  
   1.458 -  \pause
   1.459 -
   1.460 -  \begin{block}{Aber}
   1.461 +  \paragraph{Aber}
   1.462      \begin{itemize}
   1.463        \item nicht Blog mit RSS-Feed!
   1.464      \end{itemize}
   1.465 -  \end{block}
   1.466 +  
   1.467  
   1.468 -}
   1.469  
   1.470  
   1.471 -\subsection{Erweiterungen}
   1.472 -% Erweiterungen, verbleibende Probleme, Kompromisse beim Design
   1.473 -\frame{ \frametitle{}
   1.474  
   1.475 -  \begin{block}{}
   1.476 -  \end{block}
   1.477  
   1.478 -}
   1.479  
   1.480 +%\subsection{Erweiterungen}
   1.481 +%% Erweiterungen, verbleibende Probleme, Kompromisse beim Design
   1.482 +\subsection{Mögliche Erweiterungen des Patterns}
   1.483  
   1.484 +  \paragraph{Ein Observer und mehrere Subjects}
   1.485 +    \begin{itemize}
   1.486 +      \item Der Name des Subjects muss mitgesendet werden.
   1.487 +    \end{itemize}
   1.488 +  
   1.489  
   1.490 +  \paragraph{Nur für bestimmte Informationen anmelden}
   1.491 +    \begin{itemize}
   1.492 +      \item Oberservers melden sich nur für bestimmte Informationen an
   1.493 +      \item Es werden weniger uninteressante Updates gesendet
   1.494 +    \end{itemize}
   1.495 +  
   1.496 +
   1.497 +  \paragraph{UpdateManager}
   1.498 +    \begin{itemize}
   1.499 +      \item Bei komplexen Update-Zusammenhängen empfehlenswert
   1.500 +      \item vermittelt zwischen Subject und Observer
   1.501 +      \item (Mehr dazu in der Ausarbeitung)
   1.502 +    \end{itemize}
   1.503 +  
   1.504 +
   1.505 +
   1.506 +
   1.507 +  \paragraph{Wer ruft notify() auf?}
   1.508 +
   1.509 +  \subparagraph{Das Subject}
   1.510 +    \begin{itemize}
   1.511 +      \item[+] notify() wird sicher bei jedem setState() aufgerufen
   1.512 +      \item[-] hohe Update-Kosten bei Änderungen en-block
   1.513 +    \end{itemize}
   1.514 +  
   1.515 +
   1.516 +  \subparagraph{Der Observer}
   1.517 +    \begin{itemize}
   1.518 +      \item[+] intelligenter Zeitpunkt des notify()-Aufrufs möglich
   1.519 +      \item[-] der Client darf den notify()-Aufruf nicht vergessen
   1.520 +    \end{itemize}
   1.521 +  
   1.522 +
   1.523 +
   1.524 +
   1.525 +
   1.526 +
   1.527 +
   1.528 +
   1.529 +
   1.530 +
   1.531 +
   1.532 +
   1.533 +
   1.534 +
   1.535 +
   1.536 +
   1.537 +
   1.538 +
   1.539 +
   1.540 +
   1.541 +
   1.542 +
   1.543 +
   1.544 +
   1.545 +\newpage
   1.546  \section{Zusammenfassung}
   1.547 -\frame{ %\frametitle{Zusammenfassend}
   1.548 -  \begin{block}{Zusammenfassung}
   1.549 -  \begin{itemize}
   1.550 -    \item 
   1.551 -    \item 
   1.552 -    \item 
   1.553 -  \end{itemize}
   1.554 -  \end{block}
   1.555 + %\textbf{Zusammenfassend}
   1.556 +  \paragraph{Zusammenfassung}
   1.557 +    \begin{itemize}
   1.558 +      \item Menschen denken basierend auf der Realität
   1.559 +      \item deshalb Design Patterns auf Realität zurückführen
   1.560 +      \item Patterns anwenden weil man es in der Realität auch so machen würde
   1.561 +    \end{itemize}
   1.562 +  
   1.563  
   1.564 -  \pause
   1.565  
   1.566 -  \begin{block}{Fazit}
   1.567 -    \begin{itemize}
   1.568 -      \item 
   1.569 -      \item 
   1.570 -      \item 
   1.571 -    \end{itemize}
   1.572 -  \end{block}
   1.573 -}
   1.574  
   1.575  
   1.576 -\section{Fragen}
   1.577 -\frame{ \frametitle{Fragen?}
   1.578 -  \vspace{5ex}
   1.579 -  \centerline{\huge ?}
   1.580 -}
   1.581 + Erklaerung des Vorgehens
   1.582 + Frage: war es erfolgreich?
   1.583 + \textbf{}
   1.584  
   1.585 +  \paragraph{}
   1.586 +  
   1.587  
   1.588 -% Erklaerung des Vorgehens
   1.589 -% Frage: war es erfolgreich?
   1.590 -\frame{ \frametitle{}
   1.591  
   1.592 -  \begin{block}{}
   1.593 -  \end{block}
   1.594  
   1.595 -}
   1.596 -
   1.597 -
   1.598 -\frame{ \frametitle{Abschließend}
   1.599 -  \begin{block}{Verwendete Software}
   1.600 +\section{Abschließend}
   1.601 +  \paragraph{Verwendete Software}
   1.602    \begin{itemize}
   1.603      \item Debian GNU/Linux
   1.604      \item \LaTeX-Beamer und \texttt{pdflatex}
   1.605 @@ -348,35 +443,45 @@
   1.606      \item qiv und ImageMagick
   1.607      \item Mercurial
   1.608    \end{itemize}
   1.609 -  \end{block}
   1.610 +  
   1.611  
   1.612 -  \begin{block}{}
   1.613 +  \paragraph{}
   1.614      \vspace{3ex}
   1.615      \centerline{\textbf{Danke für eure Aufmerksamkeit}}
   1.616 -  \end{block}
   1.617 -}
   1.618 +  
   1.619  
   1.620  
   1.621 -% Code (Beispiel-Implementierung)
   1.622  
   1.623  
   1.624  
   1.625  
   1.626  
   1.627 +\appendix
   1.628  
   1.629 -%\input{main2.tex}
   1.630 +\section{Code}
   1.631 + \textbf{Code? --- Nein, kein Code!}
   1.632 +  \paragraph{Denn}
   1.633 +    \begin{center}
   1.634 +    \textbf{ Implementierungen sind Schall und Rauch,\\
   1.635 +    Konzepte dagegen bleiben bestehen!  }
   1.636 +    \end{center}
   1.637 +  
   1.638 +
   1.639 +  \vspace{4ex}
   1.640 +  {\scriptsize 
   1.641 +  \paragraph{}
   1.642 +    \textit{ Beispiel-Implementierung in der Ausarbeitung. }
   1.643 +  
   1.644 +  }
   1.645 +
   1.646 +
   1.647 +
   1.648 +
   1.649 +
   1.650 +
   1.651 +
   1.652 +
   1.653 +
   1.654  
   1.655  
   1.656  \end{document}
   1.657 -
   1.658 -
   1.659 -
   1.660 -
   1.661 -
   1.662 -
   1.663 -%\subsubsection{Fehlteilmanagement}
   1.664 -%\frame{ \frametitle{Fehlteilmanagement}
   1.665 -%  %\includegraphics[width=10cm]{Pics/cc.png}
   1.666 -%}
   1.667 -
   1.668 -% \vspace{2ex}
     2.1 Binary file pics/composite.png has changed
     3.1 Binary file pics/observer.png has changed