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}