# HG changeset patch # User meillo@marmaro.de # Date 1182972253 -7200 # Node ID 19e867456aff27b62ed4c2126316a33791bc43ec # Parent e7ac382e4a209404a022ae5c73a8c7ae553d85b8 added content to composite diff -r e7ac382e4a20 -r 19e867456aff 04_composite.tex --- a/04_composite.tex Wed Jun 27 11:16:43 2007 +0200 +++ b/04_composite.tex Wed Jun 27 21:24:13 2007 +0200 @@ -6,9 +6,7 @@ \documentclass{beamer} - - \usepackage[T1]{fontenc} - \usepackage[latin1]{inputenc} + \usepackage[utf8]{inputenc} \usepackage{ngerman} \usepackage{graphicx} \usepackage[automark]{scrpage2} @@ -46,7 +44,17 @@ \frame{ \frametitle{Definition} - \begin{block}{} + \begin{block}{Definition} + \begin{itemize} + \item Organisiert Objekte in Baumstrukturen für die Repräsentation von Teil-Ganzes-Beziehungen + \item Erlaubt den gleichförmigen Zugriff auf atomare Einzelobjekte wie auf zusammengesetzte Objekte + \end{itemize} + \end{block} + + \begin{block}{Beispiel Telefonnummer} + 0800-CAR-TALK + + 0800-227-8255 \end{block} } @@ -56,7 +64,19 @@ \frame{ \frametitle{Motivation} - \begin{block}{} + \begin{block}{Beispiel Grafikprogramm} + \begin{itemize} + \item Einfache Objekte (Primitive) wie Linien und Texte sollen gruppierbar sein; der Benutzer möchte Gruppen genau wie Einzelobjekte behandeln + \item Implementierungsidee: Klassen für Primitive + Klassen für Container + \item Diese Unterscheidung macht den Programmcode sehr komplex + \end{itemize} + \end{block} + + \begin{block}{Lösung} + \begin{itemize} + \item Eine abstrakte Oberklasse repräsentiert Primitive und Container + \item Operationen von Primitiven werden von Containerobjekten an die enthaltenen Objekte delegiert + \end{itemize} \end{block} } @@ -65,8 +85,10 @@ \section{Wann verwenden?} \frame{ \frametitle{Wann verwenden?} - \begin{block}{} - \end{block} + \begin{itemize} + \item Wenn Teil-/Ganzes-Hierarchien von Objekten zu repräsentieren sind + \item Wenn Anwendungsklassen den Unterschied zwischen atomaren und zusammengesetzten Objekten ignorieren sollen + \end{itemize} } @@ -78,6 +100,29 @@ \centerline{ \includegraphics[width=20em]{pics/composite_big.png} } } +\frame{ \frametitle{Beteiligte} + + \begin{block}{Component} + Definiert die gemeinsame Schnittstelle aller Objekte im Baum Implementiert Default-Verhalten, wo möglich und sinnvoll + Definiert eine Schnittstelle für den Zugriff auf Kinder einer Komponente + \end{block} + + \begin{block}{Leaf} + Repräsentiert Blätter in der Baumhierarchie + Definiert das Verhalten von atomaren Objekten + \end{block} + + \begin{block}{Composite} + Repräsentiert Wurzel- und innere Knoten in der Baumhierarchie + Definiert das Verhalten dieser Knoten + Implementiert Kind-bezogene Operationen + \end{block} + + \begin{block}{Client} + manipuliert Objekte mittels Component-Schnittstelle + \end{block} +} + @@ -117,12 +162,16 @@ \section{Zusammenfassung} -\frame{ %\frametitle{Zusammenfassend} +\frame{ \begin{block}{Zusammenfassung} \begin{itemize} - \item - \item - \item + \item Definiert Klassenhierarchien bestehend aus atomaren Objekten (Primitiven) und zusammengesetzten Objekten Verbirgt den Unterschied zwischen diesen Objekten vor Anwendungsklassen + + \item Vereinfacht Anwendungsklassen (viele Fallunterscheidungen entfallen) + + \item Macht es einfach, neue Arten von Komponenten hinzuzufügen; + + \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 \end{itemize} \end{block} }