docs/DesignPatterns
annotate 04_composite.tex @ 26:19e867456aff
added content to composite
author | meillo@marmaro.de |
---|---|
date | Wed, 27 Jun 2007 21:24:13 +0200 |
parents | eff2ffb701fe |
children | c5c50818b3d9 |
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@26 | 75 \begin{block}{Lösung} |
meillo@26 | 76 \begin{itemize} |
meillo@26 | 77 \item Eine abstrakte Oberklasse repräsentiert Primitive und Container |
meillo@26 | 78 \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert |
meillo@26 | 79 \end{itemize} |
meillo@7 | 80 \end{block} |
meillo@7 | 81 |
meillo@7 | 82 } |
meillo@7 | 83 |
meillo@7 | 84 |
meillo@7 | 85 \section{Wann verwenden?} |
meillo@7 | 86 \frame{ \frametitle{Wann verwenden?} |
meillo@7 | 87 |
meillo@26 | 88 \begin{itemize} |
meillo@26 | 89 \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind |
meillo@26 | 90 \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen |
meillo@26 | 91 \end{itemize} |
meillo@7 | 92 |
meillo@7 | 93 } |
meillo@7 | 94 |
meillo@7 | 95 |
meillo@7 | 96 |
meillo@7 | 97 \section{Struktur} |
meillo@7 | 98 |
meillo@7 | 99 \frame{ \frametitle{UML-Diagramm des Composite-Pattern} |
meillo@7 | 100 \centerline{ \includegraphics[width=20em]{pics/composite_big.png} } |
meillo@7 | 101 } |
meillo@7 | 102 |
meillo@26 | 103 \frame{ \frametitle{Beteiligte} |
meillo@26 | 104 |
meillo@26 | 105 \begin{block}{Component} |
meillo@26 | 106 Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll |
meillo@26 | 107 Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente |
meillo@26 | 108 \end{block} |
meillo@26 | 109 |
meillo@26 | 110 \begin{block}{Leaf} |
meillo@26 | 111 Repräsentiert Blätter in der Baumhierarchie |
meillo@26 | 112 Definiert das Verhalten von atomaren Objekten |
meillo@26 | 113 \end{block} |
meillo@26 | 114 |
meillo@26 | 115 \begin{block}{Composite} |
meillo@26 | 116 Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie |
meillo@26 | 117 Definiert das Verhalten dieser Knoten |
meillo@26 | 118 Implementiert Kind-bezogene Operationen |
meillo@26 | 119 \end{block} |
meillo@26 | 120 |
meillo@26 | 121 \begin{block}{Client} |
meillo@26 | 122 manipuliert Objekte mittels Component-Schnittstelle |
meillo@26 | 123 \end{block} |
meillo@26 | 124 } |
meillo@26 | 125 |
meillo@7 | 126 |
meillo@7 | 127 |
meillo@7 | 128 |
meillo@7 | 129 |
meillo@7 | 130 \section{Java-Beispiel} |
meillo@8 | 131 \subsection{main, IComponent} |
meillo@7 | 132 \frame{ \frametitle{class Main, interface IComponent} |
meillo@7 | 133 |
meillo@7 | 134 {\tiny |
meillo@7 | 135 \lstinputlisting[language=java]{code/composite-main.java} |
meillo@7 | 136 \lstinputlisting[language=java]{code/composite-icomponent.java} |
meillo@7 | 137 } |
meillo@7 | 138 |
meillo@7 | 139 } |
meillo@7 | 140 |
meillo@7 | 141 |
meillo@8 | 142 \subsection{Composite} |
meillo@7 | 143 \frame{ \frametitle{class Composite} |
meillo@7 | 144 |
meillo@7 | 145 {\tiny |
meillo@7 | 146 \lstinputlisting[language=java]{code/composite-composite.java} |
meillo@7 | 147 } |
meillo@7 | 148 |
meillo@7 | 149 } |
meillo@7 | 150 |
meillo@7 | 151 |
meillo@8 | 152 \subsection{Leaf} |
meillo@7 | 153 \frame{ \frametitle{class Leaf} |
meillo@7 | 154 |
meillo@7 | 155 {\tiny |
meillo@7 | 156 \lstinputlisting[language=java]{code/composite-leaf.java} |
meillo@7 | 157 } |
meillo@7 | 158 |
meillo@7 | 159 } |
meillo@7 | 160 |
meillo@7 | 161 |
meillo@7 | 162 |
meillo@7 | 163 |
meillo@7 | 164 \section{Zusammenfassung} |
meillo@26 | 165 \frame{ |
meillo@7 | 166 \begin{block}{Zusammenfassung} |
meillo@7 | 167 \begin{itemize} |
meillo@26 | 168 \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen |
meillo@26 | 169 |
meillo@26 | 170 \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen) |
meillo@26 | 171 |
meillo@26 | 172 \item Macht es einfach, neue Arten von Komponenten hinzuzufügen; |
meillo@26 | 173 |
meillo@26 | 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 |
meillo@7 | 175 \end{itemize} |
meillo@7 | 176 \end{block} |
meillo@7 | 177 } |
meillo@7 | 178 |
meillo@7 | 179 |
meillo@7 | 180 |
meillo@7 | 181 \end{document} |