Mercurial > docs > DesignPatterns
view 04_composite.tex @ 26:19e867456aff
added content to composite
author | meillo@marmaro.de |
---|---|
date | Wed, 27 Jun 2007 21:24:13 +0200 |
parents | eff2ffb701fe |
children | c5c50818b3d9 |
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} \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} \begin{block}{Component} Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente \end{block} \begin{block}{Leaf} Repräsentiert Blätter in der Baumhierarchie Definiert das Verhalten von atomaren Objekten \end{block} \begin{block}{Composite} Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie Definiert das Verhalten dieser Knoten Implementiert Kind-bezogene Operationen \end{block} \begin{block}{Client} manipuliert Objekte mittels Component-Schnittstelle \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}