7
|
1 % @file
|
12
|
2 % @brief Referat DesignPatterns `Composite'
|
7
|
3 % @author dimitar dimitrov
|
|
4 % @since 2007-06-18
|
|
5
|
|
6
|
|
7 \documentclass{beamer}
|
|
8
|
26
|
9 \usepackage[utf8]{inputenc}
|
7
|
10 \usepackage{ngerman}
|
|
11 \usepackage{graphicx}
|
|
12 \usepackage[automark]{scrpage2}
|
|
13 \usepackage{listings}
|
|
14 \input{Style01}
|
|
15
|
|
16
|
|
17
|
|
18 \begin{document}
|
|
19
|
|
20
|
13
|
21 \title{Composite-Pattern}
|
7
|
22 \author{Dimitar Dimitrov}
|
13
|
23 \date{}
|
7
|
24
|
|
25 %\titlegraphic{\includegraphics[width=3cm]{Pics/Maka-Logo.png}}
|
|
26
|
|
27 \frame{
|
|
28 \titlepage
|
|
29 }
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 \section[Outline]{}
|
8
|
36 \frame{ \frametitle{Outline}
|
7
|
37 \tableofcontents
|
|
38 }
|
|
39
|
|
40
|
|
41
|
|
42
|
|
43 \section{Definition}
|
|
44
|
|
45 \frame{ \frametitle{Definition}
|
|
46
|
26
|
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}
|
|
53
|
|
54 \begin{block}{Beispiel Telefonnummer}
|
|
55 0800-CAR-TALK
|
|
56
|
|
57 0800-227-8255
|
7
|
58 \end{block}
|
|
59
|
|
60 }
|
|
61
|
|
62
|
|
63 \section{Motivation}
|
|
64
|
|
65 \frame{ \frametitle{Motivation}
|
|
66
|
26
|
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}
|
|
74
|
27
|
75 \pause
|
|
76
|
26
|
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}
|
7
|
82 \end{block}
|
|
83
|
|
84 }
|
|
85
|
|
86
|
|
87 \section{Wann verwenden?}
|
|
88 \frame{ \frametitle{Wann verwenden?}
|
|
89
|
26
|
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}
|
7
|
94
|
|
95 }
|
|
96
|
|
97
|
|
98
|
|
99 \section{Struktur}
|
|
100
|
|
101 \frame{ \frametitle{UML-Diagramm des Composite-Pattern}
|
|
102 \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
|
|
103 }
|
|
104
|
26
|
105 \frame{ \frametitle{Beteiligte}
|
27
|
106 { \tiny
|
26
|
107 \begin{block}{Component}
|
27
|
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}
|
26
|
112 \end{block}
|
|
113
|
|
114 \begin{block}{Leaf}
|
27
|
115 \begin{itemize}
|
|
116 \item Repräsentiert Blätter in der Baumhierarchie
|
|
117 \item Definiert das Verhalten von atomaren Objekten
|
|
118 \end{itemize}
|
26
|
119 \end{block}
|
|
120
|
|
121 \begin{block}{Composite}
|
27
|
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}
|
26
|
127 \end{block}
|
|
128
|
|
129 \begin{block}{Client}
|
27
|
130 \begin{itemize}
|
|
131 \item manipuliert Objekte mittels Component-Schnittstelle
|
|
132 \end{itemize}
|
26
|
133 \end{block}
|
27
|
134 }
|
26
|
135 }
|
|
136
|
7
|
137
|
|
138
|
|
139
|
|
140
|
|
141 \section{Java-Beispiel}
|
8
|
142 \subsection{main, IComponent}
|
7
|
143 \frame{ \frametitle{class Main, interface IComponent}
|
|
144
|
|
145 {\tiny
|
|
146 \lstinputlisting[language=java]{code/composite-main.java}
|
|
147 \lstinputlisting[language=java]{code/composite-icomponent.java}
|
|
148 }
|
|
149
|
|
150 }
|
|
151
|
|
152
|
8
|
153 \subsection{Composite}
|
7
|
154 \frame{ \frametitle{class Composite}
|
|
155
|
|
156 {\tiny
|
|
157 \lstinputlisting[language=java]{code/composite-composite.java}
|
|
158 }
|
|
159
|
|
160 }
|
|
161
|
|
162
|
8
|
163 \subsection{Leaf}
|
7
|
164 \frame{ \frametitle{class Leaf}
|
|
165
|
|
166 {\tiny
|
|
167 \lstinputlisting[language=java]{code/composite-leaf.java}
|
|
168 }
|
|
169
|
|
170 }
|
|
171
|
|
172
|
|
173
|
|
174
|
|
175 \section{Zusammenfassung}
|
26
|
176 \frame{
|
7
|
177 \begin{block}{Zusammenfassung}
|
|
178 \begin{itemize}
|
26
|
179 \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen
|
|
180
|
|
181 \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)
|
|
182
|
|
183 \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;
|
|
184
|
27
|
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
|
7
|
186 \end{itemize}
|
|
187 \end{block}
|
|
188 }
|
|
189
|
|
190
|
|
191
|
|
192 \end{document}
|