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} |