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 source
1 % @file
2 % @brief Referat DesignPatterns `Composite'
3 % @author dimitar dimitrov
4 % @since 2007-06-18
7 \documentclass{beamer}
9 \usepackage[utf8]{inputenc}
10 \usepackage{ngerman}
11 \usepackage{graphicx}
12 \usepackage[automark]{scrpage2}
13 \usepackage{listings}
14 \input{Style01}
18 \begin{document}
21 \title{Composite-Pattern}
22 \author{Dimitar Dimitrov}
23 \date{}
25 %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
27 \frame{
28 \titlepage
29 }
35 \section[Outline]{}
36 \frame{ \frametitle{Outline}
37 \tableofcontents
38 }
43 \section{Definition}
45 \frame{ \frametitle{Definition}
47 \begin{block}{Definition}
48 \begin{itemize}
49 \item Organisiert Objekte in Baumstrukturen für die Repräsentation von Teil-Ganzes-Beziehungen
50 \item Erlaubt den gleichförmigen Zugriff auf atomare Einzelobjekte wie auf zusammengesetzte Objekte
51 \end{itemize}
52 \end{block}
54 \begin{block}{Beispiel Telefonnummer}
55 0800-CAR-TALK
57 0800-227-8255
58 \end{block}
60 }
63 \section{Motivation}
65 \frame{ \frametitle{Motivation}
67 \begin{block}{Beispiel Grafikprogramm}
68 \begin{itemize}
69 \item Einfache Objekte (Primitive) wie Linien und Texte sollen gruppierbar sein; der Benutzer möchte Gruppen genau wie Einzelobjekte behandeln
70 \item Implementierungsidee: Klassen für Primitive + Klassen für Container
71 \item Diese Unterscheidung macht den Programmcode sehr komplex
72 \end{itemize}
73 \end{block}
75 \begin{block}{Lösung}
76 \begin{itemize}
77 \item Eine abstrakte Oberklasse repräsentiert Primitive und Container
78 \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert
79 \end{itemize}
80 \end{block}
82 }
85 \section{Wann verwenden?}
86 \frame{ \frametitle{Wann verwenden?}
88 \begin{itemize}
89 \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind
90 \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen
91 \end{itemize}
93 }
97 \section{Struktur}
99 \frame{ \frametitle{UML-Diagramm des Composite-Pattern}
100 \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
101 }
103 \frame{ \frametitle{Beteiligte}
105 \begin{block}{Component}
106 Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll
107 Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente
108 \end{block}
110 \begin{block}{Leaf}
111 Repräsentiert Blätter in der Baumhierarchie
112 Definiert das Verhalten von atomaren Objekten
113 \end{block}
115 \begin{block}{Composite}
116 Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie
117 Definiert das Verhalten dieser Knoten
118 Implementiert Kind-bezogene Operationen
119 \end{block}
121 \begin{block}{Client}
122 manipuliert Objekte mittels Component-Schnittstelle
123 \end{block}
124 }
130 \section{Java-Beispiel}
131 \subsection{main, IComponent}
132 \frame{ \frametitle{class Main, interface IComponent}
134 {\tiny
135 \lstinputlisting[language=java]{code/composite-main.java}
136 \lstinputlisting[language=java]{code/composite-icomponent.java}
137 }
139 }
142 \subsection{Composite}
143 \frame{ \frametitle{class Composite}
145 {\tiny
146 \lstinputlisting[language=java]{code/composite-composite.java}
147 }
149 }
152 \subsection{Leaf}
153 \frame{ \frametitle{class Leaf}
155 {\tiny
156 \lstinputlisting[language=java]{code/composite-leaf.java}
157 }
159 }
164 \section{Zusammenfassung}
165 \frame{
166 \begin{block}{Zusammenfassung}
167 \begin{itemize}
168 \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen
170 \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)
172 \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;
174 \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
175 \end{itemize}
176 \end{block}
177 }
181 \end{document}