docs/DesignPatterns

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