docs/DesignPatterns
view 04_composite.tex @ 37:debbd3bf76ce
Added tag Ausarbeitung final for changeset f03413250b39d73ca44b22ea1e4022fd3c9e825d
author | meillo@marmaro.de |
---|---|
date | Sat, 11 Aug 2007 22:43:34 +0200 |
parents | 19e867456aff |
children |
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 \pause
77 \begin{block}{Lösung}
78 \begin{itemize}
79 \item Eine abstrakte Oberklasse repräsentiert Primitive und Container
80 \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert
81 \end{itemize}
82 \end{block}
84 }
87 \section{Wann verwenden?}
88 \frame{ \frametitle{Wann verwenden?}
90 \begin{itemize}
91 \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind
92 \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen
93 \end{itemize}
95 }
99 \section{Struktur}
101 \frame{ \frametitle{UML-Diagramm des Composite-Pattern}
102 \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
103 }
105 \frame{ \frametitle{Beteiligte}
106 { \tiny
107 \begin{block}{Component}
108 \begin{itemize}
109 \item Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll
110 \item Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente
111 \end{itemize}
112 \end{block}
114 \begin{block}{Leaf}
115 \begin{itemize}
116 \item Repräsentiert Blätter in der Baumhierarchie
117 \item Definiert das Verhalten von atomaren Objekten
118 \end{itemize}
119 \end{block}
121 \begin{block}{Composite}
122 \begin{itemize}
123 \item Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie
124 \item Definiert das Verhalten dieser Knoten
125 \item Implementiert Kind-bezogene Operationen
126 \end{itemize}
127 \end{block}
129 \begin{block}{Client}
130 \begin{itemize}
131 \item manipuliert Objekte mittels Component-Schnittstelle
132 \end{itemize}
133 \end{block}
134 }
135 }
141 \section{Java-Beispiel}
142 \subsection{main, IComponent}
143 \frame{ \frametitle{class Main, interface IComponent}
145 {\tiny
146 \lstinputlisting[language=java]{code/composite-main.java}
147 \lstinputlisting[language=java]{code/composite-icomponent.java}
148 }
150 }
153 \subsection{Composite}
154 \frame{ \frametitle{class Composite}
156 {\tiny
157 \lstinputlisting[language=java]{code/composite-composite.java}
158 }
160 }
163 \subsection{Leaf}
164 \frame{ \frametitle{class Leaf}
166 {\tiny
167 \lstinputlisting[language=java]{code/composite-leaf.java}
168 }
170 }
175 \section{Zusammenfassung}
176 \frame{
177 \begin{block}{Zusammenfassung}
178 \begin{itemize}
179 \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen
181 \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)
183 \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;
185 \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
186 \end{itemize}
187 \end{block}
188 }
192 \end{document}