
meillo@7: % @file
meillo@12: % @brief   Referat DesignPatterns `Composite'
meillo@7: % @author  dimitar dimitrov
meillo@7: % @since   2007-06-18
meillo@7: 
meillo@7: 
meillo@7: \documentclass{beamer}
meillo@7: 
meillo@26:   \usepackage[utf8]{inputenc}
meillo@7:   \usepackage{ngerman}
meillo@7:   \usepackage{graphicx}
meillo@7:   \usepackage[automark]{scrpage2}
meillo@7:   \usepackage{listings}
meillo@7:   \input{Style01}
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \begin{document}
meillo@7: 
meillo@7: 
meillo@13: \title{Composite-Pattern}
meillo@7: \author{Dimitar Dimitrov}
meillo@13: \date{}
meillo@7: 
meillo@7: %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
meillo@7: 
meillo@7: \frame{
meillo@7:   \titlepage
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \section[Outline]{}
meillo@8: \frame{ \frametitle{Outline}
meillo@7:   \tableofcontents
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \section{Definition}
meillo@7: 
meillo@7: \frame{ \frametitle{Definition}
meillo@7: 
meillo@26:   \begin{block}{Definition}
meillo@26:     \begin{itemize}
meillo@26:       \item Organisiert Objekte in Baumstrukturen für die Repräsentation von Teil-Ganzes-Beziehungen
meillo@26:       \item Erlaubt den gleichförmigen Zugriff auf atomare Einzelobjekte wie auf zusammengesetzte Objekte
meillo@26:     \end{itemize}
meillo@26:   \end{block}
meillo@26: 
meillo@26:   \begin{block}{Beispiel Telefonnummer}
meillo@26:     0800-CAR-TALK
meillo@26: 
meillo@26:     0800-227-8255
meillo@7:   \end{block}
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: \section{Motivation}
meillo@7: 
meillo@7: \frame{ \frametitle{Motivation}
meillo@7: 
meillo@26:   \begin{block}{Beispiel Grafikprogramm}
meillo@26:     \begin{itemize}
meillo@26:       \item Einfache Objekte (Primitive) wie Linien und Texte sollen gruppierbar sein; der Benutzer möchte Gruppen genau wie Einzelobjekte behandeln
meillo@26:       \item Implementierungsidee: Klassen für Primitive + Klassen für Container
meillo@26:       \item Diese Unterscheidung macht den Programmcode sehr komplex
meillo@26:     \end{itemize}
meillo@26:   \end{block}
meillo@26: 
meillo@27:   \pause
meillo@27: 
meillo@26:   \begin{block}{Lösung}
meillo@26:     \begin{itemize}
meillo@26:       \item Eine abstrakte Oberklasse repräsentiert Primitive und Container
meillo@26:       \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert
meillo@26:     \end{itemize}
meillo@7:   \end{block}
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: \section{Wann verwenden?}
meillo@7: \frame{ \frametitle{Wann verwenden?}
meillo@7: 
meillo@26:   \begin{itemize}
meillo@26:     \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind
meillo@26:     \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen
meillo@26:   \end{itemize}
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \section{Struktur}
meillo@7: 
meillo@7: \frame{ \frametitle{UML-Diagramm des Composite-Pattern}
meillo@7:   \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
meillo@7: }
meillo@7: 
meillo@26: \frame{ \frametitle{Beteiligte}
meillo@27:   { \tiny
meillo@26:   \begin{block}{Component}
meillo@27:   \begin{itemize}
meillo@27:     \item Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll
meillo@27:     \item Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente
meillo@27:   \end{itemize}
meillo@26:   \end{block}
meillo@26: 
meillo@26:   \begin{block}{Leaf}
meillo@27:   \begin{itemize}
meillo@27:     \item Repräsentiert Blätter in der Baumhierarchie
meillo@27:     \item Definiert das Verhalten von atomaren Objekten
meillo@27:   \end{itemize}
meillo@26:   \end{block}
meillo@26: 
meillo@26:   \begin{block}{Composite}
meillo@27:   \begin{itemize}
meillo@27:     \item Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie
meillo@27:     \item Definiert das Verhalten dieser Knoten
meillo@27:     \item Implementiert Kind-bezogene Operationen
meillo@27:   \end{itemize}
meillo@26:   \end{block}
meillo@26: 
meillo@26:   \begin{block}{Client}
meillo@27:   \begin{itemize}
meillo@27:     \item manipuliert Objekte mittels Component-Schnittstelle
meillo@27:   \end{itemize}
meillo@26:   \end{block}
meillo@27:   }
meillo@26: }
meillo@26: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \section{Java-Beispiel}
meillo@8: \subsection{main, IComponent}
meillo@7: \frame{ \frametitle{class Main, interface IComponent}
meillo@7: 
meillo@7:   {\tiny
meillo@7:     \lstinputlisting[language=java]{code/composite-main.java}
meillo@7:     \lstinputlisting[language=java]{code/composite-icomponent.java}
meillo@7:   }
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@8: \subsection{Composite}
meillo@7: \frame{ \frametitle{class Composite}
meillo@7: 
meillo@7:   {\tiny
meillo@7:     \lstinputlisting[language=java]{code/composite-composite.java}
meillo@7:   }
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@8: \subsection{Leaf}
meillo@7: \frame{ \frametitle{class Leaf}
meillo@7: 
meillo@7:   {\tiny
meillo@7:     \lstinputlisting[language=java]{code/composite-leaf.java}
meillo@7:   }
meillo@7: 
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \section{Zusammenfassung}
meillo@26: \frame{
meillo@7:   \begin{block}{Zusammenfassung}
meillo@7:   \begin{itemize}
meillo@26:     \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen
meillo@26: 
meillo@26:     \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)
meillo@26: 
meillo@26:     \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;
meillo@26: 
meillo@27:     \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
meillo@7:   \end{itemize}
meillo@7:   \end{block}
meillo@7: }
meillo@7: 
meillo@7: 
meillo@7: 
meillo@7: \end{document}




