docs/DesignPatterns

view 04_composite.tex @ 34:b2cefbd90180

some redesign; new content for summary and appendix
author meillo@marmaro.de
date Sat, 11 Aug 2007 12:49:00 +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}