Mercurial > docs > DesignPatterns
view 04_composite.tex @ 34:b2cefbd90180
some redesign; new content for summary and appendix
author | meillo@marmaro.de |
---|---|
date | Sat, 11 Aug 2007 12:49:00 +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}