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@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@26: meillo@26: \begin{block}{Component} meillo@26: Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll meillo@26: Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente meillo@26: \end{block} meillo@26: meillo@26: \begin{block}{Leaf} meillo@26: Repräsentiert Blätter in der Baumhierarchie meillo@26: Definiert das Verhalten von atomaren Objekten meillo@26: \end{block} meillo@26: meillo@26: \begin{block}{Composite} meillo@26: Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie meillo@26: Definiert das Verhalten dieser Knoten meillo@26: Implementiert Kind-bezogene Operationen meillo@26: \end{block} meillo@26: meillo@26: \begin{block}{Client} meillo@26: manipuliert Objekte mittels Component-Schnittstelle meillo@26: \end{block} 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@26: \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}