view 04_composite.tex @ 37:debbd3bf76ce default tip

Added tag Ausarbeitung final for changeset f03413250b39d73ca44b22ea1e4022fd3c9e825d
author meillo@marmaro.de
date Sat, 11 Aug 2007 22:43:34 +0200
parents c5c50818b3d9
children
line wrap: on
line source

% @file
% @brief   Referat DesignPatterns `Composite'
% @author  dimitar dimitrov
% @since   2007-06-18


\documentclass{beamer}

  \usepackage[utf8]{inputenc}
  \usepackage{ngerman}
  \usepackage{graphicx}
  \usepackage[automark]{scrpage2}
  \usepackage{listings}
  \input{Style01}



\begin{document}


\title{Composite-Pattern}
\author{Dimitar Dimitrov}
\date{}

%\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}

\frame{
  \titlepage
}





\section[Outline]{}
\frame{ \frametitle{Outline}
  \tableofcontents
}




\section{Definition}

\frame{ \frametitle{Definition}

  \begin{block}{Definition}
    \begin{itemize}
      \item Organisiert Objekte in Baumstrukturen für die Repräsentation von Teil-Ganzes-Beziehungen
      \item Erlaubt den gleichförmigen Zugriff auf atomare Einzelobjekte wie auf zusammengesetzte Objekte
    \end{itemize}
  \end{block}

  \begin{block}{Beispiel Telefonnummer}
    0800-CAR-TALK

    0800-227-8255
  \end{block}

}


\section{Motivation}

\frame{ \frametitle{Motivation}

  \begin{block}{Beispiel Grafikprogramm}
    \begin{itemize}
      \item Einfache Objekte (Primitive) wie Linien und Texte sollen gruppierbar sein; der Benutzer möchte Gruppen genau wie Einzelobjekte behandeln
      \item Implementierungsidee: Klassen für Primitive + Klassen für Container
      \item Diese Unterscheidung macht den Programmcode sehr komplex
    \end{itemize}
  \end{block}

  \pause

  \begin{block}{Lösung}
    \begin{itemize}
      \item Eine abstrakte Oberklasse repräsentiert Primitive und Container
      \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert
    \end{itemize}
  \end{block}

}


\section{Wann verwenden?}
\frame{ \frametitle{Wann verwenden?}

  \begin{itemize}
    \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind
    \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen
  \end{itemize}

}



\section{Struktur}

\frame{ \frametitle{UML-Diagramm des Composite-Pattern}
  \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
}

\frame{ \frametitle{Beteiligte}
  { \tiny
  \begin{block}{Component}
  \begin{itemize}
    \item Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll
    \item Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente
  \end{itemize}
  \end{block}

  \begin{block}{Leaf}
  \begin{itemize}
    \item Repräsentiert Blätter in der Baumhierarchie
    \item Definiert das Verhalten von atomaren Objekten
  \end{itemize}
  \end{block}

  \begin{block}{Composite}
  \begin{itemize}
    \item Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie
    \item Definiert das Verhalten dieser Knoten
    \item Implementiert Kind-bezogene Operationen
  \end{itemize}
  \end{block}

  \begin{block}{Client}
  \begin{itemize}
    \item manipuliert Objekte mittels Component-Schnittstelle
  \end{itemize}
  \end{block}
  }
}





\section{Java-Beispiel}
\subsection{main, IComponent}
\frame{ \frametitle{class Main, interface IComponent}

  {\tiny
    \lstinputlisting[language=java]{code/composite-main.java}
    \lstinputlisting[language=java]{code/composite-icomponent.java}
  }

}


\subsection{Composite}
\frame{ \frametitle{class Composite}

  {\tiny
    \lstinputlisting[language=java]{code/composite-composite.java}
  }

}


\subsection{Leaf}
\frame{ \frametitle{class Leaf}

  {\tiny
    \lstinputlisting[language=java]{code/composite-leaf.java}
  }

}




\section{Zusammenfassung}
\frame{
  \begin{block}{Zusammenfassung}
  \begin{itemize}
    \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen

    \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)

    \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;

    \item Anwendungsklassen funktionieren ohne Änderung. Macht das Design vielleicht ``allgemeiner'' als gewünscht; falls nur bestimmte Klassen in ein bestimmtes Composite aufgenommen werden sollen, sind dafür Laufzeitüberprüfungen notwendig
  \end{itemize}
  \end{block}
}



\end{document}