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
|
|
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}
|
7
|
80 \end{block}
|
|
81
|
|
82 }
|
|
83
|
|
84
|
|
85 \section{Wann verwenden?}
|
|
86 \frame{ \frametitle{Wann verwenden?}
|
|
87
|
26
|
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}
|
7
|
92
|
|
93 }
|
|
94
|
|
95
|
|
96
|
|
97 \section{Struktur}
|
|
98
|
|
99 \frame{ \frametitle{UML-Diagramm des Composite-Pattern}
|
|
100 \centerline{ \includegraphics[width=20em]{pics/composite_big.png} }
|
|
101 }
|
|
102
|
26
|
103 \frame{ \frametitle{Beteiligte}
|
|
104
|
|
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}
|
|
109
|
|
110 \begin{block}{Leaf}
|
|
111 Repräsentiert Blätter in der Baumhierarchie
|
|
112 Definiert das Verhalten von atomaren Objekten
|
|
113 \end{block}
|
|
114
|
|
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}
|
|
120
|
|
121 \begin{block}{Client}
|
|
122 manipuliert Objekte mittels Component-Schnittstelle
|
|
123 \end{block}
|
|
124 }
|
|
125
|
7
|
126
|
|
127
|
|
128
|
|
129
|
|
130 \section{Java-Beispiel}
|
8
|
131 \subsection{main, IComponent}
|
7
|
132 \frame{ \frametitle{class Main, interface IComponent}
|
|
133
|
|
134 {\tiny
|
|
135 \lstinputlisting[language=java]{code/composite-main.java}
|
|
136 \lstinputlisting[language=java]{code/composite-icomponent.java}
|
|
137 }
|
|
138
|
|
139 }
|
|
140
|
|
141
|
8
|
142 \subsection{Composite}
|
7
|
143 \frame{ \frametitle{class Composite}
|
|
144
|
|
145 {\tiny
|
|
146 \lstinputlisting[language=java]{code/composite-composite.java}
|
|
147 }
|
|
148
|
|
149 }
|
|
150
|
|
151
|
8
|
152 \subsection{Leaf}
|
7
|
153 \frame{ \frametitle{class Leaf}
|
|
154
|
|
155 {\tiny
|
|
156 \lstinputlisting[language=java]{code/composite-leaf.java}
|
|
157 }
|
|
158
|
|
159 }
|
|
160
|
|
161
|
|
162
|
|
163
|
|
164 \section{Zusammenfassung}
|
26
|
165 \frame{
|
7
|
166 \begin{block}{Zusammenfassung}
|
|
167 \begin{itemize}
|
26
|
168 \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen
|
|
169
|
|
170 \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen)
|
|
171
|
|
172 \item Macht es einfach, neue Arten von Komponenten hinzuzufügen;
|
|
173
|
|
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
|
7
|
175 \end{itemize}
|
|
176 \end{block}
|
|
177 }
|
|
178
|
|
179
|
|
180
|
|
181 \end{document}
|