<chapter id="uml-basics"><title>UML Grundlagen</title><sect1 id="about-uml"><title>Über UML</title><para> Dieses Kapitel gibt einen kurzen Überblick über die UML Grundlagen. Man sollte sich aber bewusst sein, dass es keine vollständige Anleitung ist. Wenn man mehr über die Unified Modelling Language, oder allgemein über Software Analyse und Design, lernen will, dann sollte man eines der vielen zu diesem Thema publizierten Bücher lesen. Man kann natürlich die vielen Einführungen im Internet zum Thema als Ausgangspunkt wählen. </para><para> Die Unified Modelling Language (UML) ist eine Diagrammnotation zum spezifizieren, visualisieren und dokumentieren von Modellen objektorientierter Softwaresysteme. UML ist kein Vorgehensmodell, d.h. es sagt nichts über die einzelnen Schritte aus, die nötig sind, um ein System zu gestalten. Aber UML hilft ihnen ihr Design zu visualisieren und mit anderen zu kommunizieren. Der UML Standard wird von der Object Management Group (OMG) gepflegt und ist der Industriestandard zur Beschreibung von Softwaremodellen. </para><para> UML wurde für das objektorientierte Softwaredesign entwickelt und ist daher nur von begrenztem Nutzen bei anderen Programmierparadigmen. </para><para> UML setzt sich zusammen aus vielen Modellelementen, die für sich einen bestimmten Sachverhalt des Softwaresystems repräsentieren. Diese Elemente werden zu Diagrammen kombiniert, die einen Ausschnitt oder einen bestimmten Blickpunkt des Systems darstellen. Folgende Diagrammtypen werden von Umbrello unterstützt: </para><!-- FIXME, is it possible to link from these to the next pages? --><itemizedlist> <listitem><para><emphasis><link linkend="class-diagram">Klassendiagramm</link></emphasis>, stellt Klassen und ihre Beziehungen untereinander dar</para> </listitem> <listitem><para><emphasis><link linkend="use-case-diagram">Anwendungsfalldiagramm</link> </emphasis>, stellt Akteure (Menschen oder andere Nutzer des Systems), Anwendungsfälle (Szenario, wie die Akteure das System nutzen) und die Beziehungen dazwischen dar</para> </listitem> <listitem><para><emphasis><link linkend="sequence-diagram"> Sequenzdiagramm</link></emphasis>, stellt Objekte und ihre Beziehungen dar, wobei der Schwerpunkt auf dem chronologischen Nachrichtenaustausch zwischen den Objekten liegt</para> </listitem> <listitem><para><emphasis><link linkend="collaboration-diagram">Kollaborationsdiagramm </link></emphasis>, stellt Objekte und ihre Beziehungen dar, wobei der Schwerpunkt auf Objekten liegt, die am Nachrichtenaustausch beteiligt sind</para> </listitem> <listitem><para><emphasis><link linkend="state-diagram">Zustandsdiagramm</link> </emphasis>, stellt Zustände, Zustandsänderungen und Ereignisse in einem Objekt oder Teilsystem dar</para> </listitem> <listitem><para><emphasis><link linkend="activity-diagram">Aktivitätsdiagram</link> </emphasis>, stellt die Aktivitäten, Zustände und Zustandsänderungen von Objekten und die Ereignisse in Teilsystemen dar</para></listitem> </itemizedlist></sect1>   <!-- about-uml --><sect1 id="uml-elements">   <!--FIXME diagram-types ????  -->     <title>UML Elemente</title><sect2 id="use-case-diagram"><title>Anwendungsfalldiagramm</title><para>Anwendungsfalldiagramme beschreiben die Beziehungen und Abhängigkeiten zwischen einer Gruppe von <emphasis>Anwendungsfällen</emphasis> und den teilnehmenden Akteuren in einem Prozess.</para><para>Dabei ist zu beachten, dass ein Anwendungsfalldiagramm nicht das Systemdesign wiederspiegelt und damit keine Aussage über die Systeminterna trifft. Anwendungsfalldiagramme werden zur Vereinfachung der Kommunikation zwischen Entwickler und zukünftigen Nutzer bzw. Kunde erstellt. Sie sind vorallem bei der Festlegung der benötigten Kriterien des zukünftigen Systems hilfreich. Somit treffen Anwendungsfalldiagramme eine Aussage, <emphasis>was</emphasis> zu tun ist, aber nicht <emphasis>wie</emphasis> wie das erreicht wird.</para><para> <screenshot> <screeninfo>ein beispielhaftes Anwendungsfalldiagramm.</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/use-case-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellunge eines Anwendungfalldiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellunge eines Anwendungfalldiagrammes </para> </caption> </mediaobject> </screenshot> </para><sect3 id="use-case"><title>Anwendungsfall</title><para>Ein <emphasis>Anwendungsfall</emphasis> beschreibt, aus der Sicht des Akteur, eine Reihe von Aktivitäten im System, die ein konkret fassbares Ergebnis liefern.</para><para> Anwendungsfälle dienen als Beschreibung von typischen Interaktionen zwischen Nutzer und dem System. Sie stellen die externe Schnittstelle dar und spezifizieren damit die Anforderungen, was das System zu tun hat (nur das was, aber nicht das wie!). </para><para>Bei der Arbeit mit Anwendungsfällen, sollte man folgende einfache Regeln beachten: <itemizedlist> <listitem><para>jeder Anwendungsfall ist mindestens mit einem Akteur verbunden</para></listitem> <listitem><para>jeder Anwendungsfall hat einen Auslöser (z.B. einen Akteur)</para></listitem> <listitem><para>jeder Anwendungsfall führt zu einem relevanten Ergebnis (messbar und wirtschaftlich relevant)</para> </listitem> </itemizedlist> </para><para> Anwendungsfälle können untereinander in Verbindung stehen. Die 3 gebräuchlichsten Beziehungen zwischen Anwendungsfällen sind:</para><itemizedlist> <listitem><para><emphasis>&lt;&lt;include&gt;&gt;</emphasis>, wodurch ausgesagt wird, dass ein Anwendungsfall <emphasis>in</emphasis> einem anderen Anwendungsfall stattfindet.</para></listitem> <listitem><para><emphasis>&lt;&lt;extends&gt;&gt;</emphasis>, wodurch ausgesagt wird, dass in einer bestimmten Situation (oder einem bestimmten Erweiterungspunkt) der Anwendungsfall durch einen anderen erweitert wird.</para></listitem> <listitem><para><emphasis>Verallgemeinerung</emphasis>, wodurch ausgesagt wird, dass ein Anwendungsfall die Eigenschaften eines <quote>Super</quote>anwendungsfall (übergeordneten) erbt und diese überschreiben oder erweitern kann, ganz ähnlich wie bei der Vererbung zwischen Klassen. </para> </listitem> </itemizedlist></sect3><sect3 id="actor"><title>Akteur</title><para> Ein Akteur ist ein externes Objekt (außerhalb des Systems), welches mit dem System durch die Teilnahme und Auslösung von Anwendungsfällen in Kontakt tritt. Akteure können echte Menschen (z.B. der Nutzer des Systems), Computersysteme oder externe Ereignisse sein. </para><para> Akteure stellen somit nicht die <emphasis>physische</emphasis> Person oder System dar, sondern vielmehr die <emphasis>Rollen</emphasis> dieser Objekte. Steht eine physische Person auf verschiedenen Wegen (z.B. durch verschiedene Rollen) mit dem System in Kontakt, dann wird sie durch verschiedene Akteure dargestellt. So würde eine Person, die im Kundensupport genauso wie in der Auftragsannahme tätig ist, einmal als Akteur <quote>Supportmitarbeiter</quote> und einmal als Akteur <quote>Vertriebsmitarbeiter</quote> dargestellt werden. </para></sect3><sect3 id="use-case-description"><title>Anwendungsfallbeschreibung</title><para> Eine Anwendungsfallbeschreibung legt in Textform den Anwendungsfall dar. Normalerweise werden dazu Notizen oder sonstwie mit dem Anwendungsfall verlinkte Dokumente dargestellt und beschreiben die Prozesse oder Aktivitäten, die im Anwendungfall stattfinden. </para></sect3></sect2> <!-- use-case-diagram --><sect2 id="class-diagram"><title>Klassendiagramm</title><para> Klassendiagramme zeigen die verschiedenen Klassen, aus denen das System besteht, und wie diese untereinander in Abhängigkeit stehen. Die Klassendiagramme werden als <quote>statisch</quote> bezeichnet, da sie lediglich die Klassen mit ihren Methoden und Attributen sowie die statischen Verbindungen zwischen ihnen darstellen. Dabei wird gezeigt, welche Klassen von anderen Klassen <quote>etwas wissen</quote> und welche Klassen <quote>ein Teil</quote> von anderen Klassen sind. Es wird aber nicht der Nachrichtenaustausch (Methodenaufrufe) zwischen den Klassen dargestellt. </para><para> <screenshot> <screeninfo>ein beispielhaftes Klassendiagramm</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/class-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellung eines Klassendiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellung eines Klassendiagrammes </para> </caption> </mediaobject> </screenshot> </para><sect3 id="class"><title>Klasse</title><para> Eine Klasse definiert die Attribute und Methoden einer Menge von Objekten. Alle Objekte dieser Klasse (die Instanzen) haben das gleiche Verhalten und die selben Attribute (aber mit unterschiedlichen Werten). Der Begriff <quote>Typ</quote> wird manchmal synonym für Klasse verwendet, aber es muss beachtet werden, dass Typ allgemeiner ist und daher die beiden Begriffe nicht identisch in ihrer Bedeutung sind. </para><para> In der UML werden Klassen als Rechtecke mit dem Klassennamen dargestellt. Sie können die Attribute und Operationen der Klasse in 2 extra <quote>abgetrennten Bereichen</quote> innerhalb des Rechteck enthalten. </para><para> <screenshot> <screeninfo>eine Klasse in der UML</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/class.png" format="PNG"/> </imageobject> <textobject> <phrase>visuelle Darstellung einer Klasse in der UML</phrase> </textobject> <caption> <para>visuelle Darstellung einer Klasse in der UML </para> </caption> </mediaobject> </screenshot> </para><sect4 id="attribute"><title>Attribut</title><para> In der UML werden Attribute mindestens mit ihrem Namen dargestellt, es können aber noch der Typ, der Anfangswert und weitere Eigenschaften mit angezeigt werden. So kann man durchaus die Sichtbarkeit von Attributen mit darstellen: </para><itemizedlist> <listitem><para>+, steht für <emphasis>public</emphasis> Attribute</para></listitem> <listitem><para>#, steht für <emphasis>protected</emphasis> Attribute</para></listitem> <listitem><para>-, steht für <emphasis>private</emphasis> Attribute</para></listitem> </itemizedlist></sect4><sect4 id="operation"><title>Operation</title><para> Operationen (Methoden) müssen ebenfalls mindestens mit ihrem Namen dargestellt werden und können weiterhin die Parameter und die Rückgabewerte in der Darstellung enthalten. Wie bei Attributen, ist die Sichtbarkeit ebenfalls darstellbar: <itemizedlist> <listitem><para>+, steht für <emphasis>public</emphasis> Operationen</para></listitem> <listitem><para>#, steht für <emphasis>protected</emphasis> Operationen</para></listitem> <listitem><para>-, steht für <emphasis>private</emphasis> Operationen</para></listitem> </itemizedlist> </para></sect4></sect3><sect3 id="class-associations"><title>Klassenassoziation</title><para>Klassen können sich auf unterschiedlichen Wegen aufeinander beziehen (assoziieren):</para><sect4 id="generalization"><title>Verallgemeinerung</title><para>Die Vererbung ist ein Basiskonzept der objektorientierten Programmierung. Ein Klasse <quote>erhält</quote> dabei alle Attribute und Operationen der Klasse, von der sie abgeleitet wird. Die Klasse kann diese Operationen/Attribute überschreiben und ändern, sowie neue hinzufügen.</para><para> In der UML wird durch die Assoziation <emphasis>Verallgemeinerung</emphasis>  zwischen 2 Klassen eine Hierarchie aufgebaut, die das Konzept von abgeleiteter Klasse und Basisklasse verkörpert. Die Verallgemeinerung zwischen 2 Klassen wird in der UML durch eine Linie zwischen den 2 Klassen dargestellt, wobei sich ein Pfeil auf der Seite der Basisklasse befindet. <screenshot> <screeninfo>Verallgemeinerung</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/generalization.png" format="PNG"/> </imageobject> <textobject> <phrase>visuelle Darstellung der Verallgemeinerung in UML</phrase> </textobject> <caption> <para>visuelle Darstellung der Verallgemeinerung in UML </para> </caption> </mediaobject> </screenshot> </para></sect4><sect4 id="uml-associations"><title>Assoziation</title><para>Eine Assoziation stellt den Zusammenhang zwischen Klassen dar und beschreibt damit die allgemeine Bedeutung und Struktur verschiedenster Typen von <quote>Verbindungen</quote> zwischen Objekten.</para><para>Assoziationen sind der Mechanismus, der es den Objekten erlaubt untereinander zu kommunizieren. Sie beschreiben die Verbindungen zwischen verschiedenen Klassen (die Verbindung zwischen den eigentlichen Objekten werden als Objektverbindungen oder als <emphasis>Link</emphasis> bezeichnet). </para><para> Assoziationen können Rollen haben, die den Zweck der Verbindung beschreiben und entweder uni- oder bidirektional sind (ob die Verbindung zwischen den Objekten ein- oder zweiseitig ist). Beide Enden einer Assoziation verfügen über einen Multiplizitätswert, der angibt, wieviele Objekte auf der einen Seite mit wieviel Objekten auf der anderen Seite verbunden sein können. </para><para> In der UML wird die Assoziation durch eine Linie zwischen den in der Beziehung teilnehmenden Klassen dargestellt. Dabei kann die Rolle und die Multiplizität ebenfalls angezeigt werden. Multiplizität wird als Bereich [min..max] von nicht negativen Werten dargestellt, wobei der Stern (*) auf der Maximumseite einen unendlichen Wert repräsentiert. <screenshot> <screeninfo>UML Assoziationen</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/association.png" format="PNG"/> </imageobject> <textobject> <phrase>visuelle Darstellung einer UML Assoziation</phrase> </textobject> <caption> <para>visuelle Darstellung einer UML Assoziation </para> </caption> </mediaobject> </screenshot> </para></sect4><sect4 id="aggregation"><title>Aggregation</title><para>Aggregationen sind eine Spezialart von Assoziationen. Dabei haben die verbundenen Klassen nicht den gleichen Status, sondern es wird eine <quote>Teil eines Ganzes</quote> Beziehung dargestellt. Ein Aggregation beschreibt, wie die Klasse, die die Rolle des Ganzen vertritt, sich aus anderen Klassen, die die Rollen des Teil innehaben, zusammensetzt. Bei Aggregationen hat die Klasse mit der Rolle des Ganzen immer eine Multiplizität von 1. </para><para> In der UML werden Aggregationen durch Assoziationen dargestellt, wobei auf der Seite des Ganzen ein Rhombus ist. <screenshot> <screeninfo>Aggregation</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/aggregation.png" format="PNG"/> </imageobject> <textobject> <phrase>visuelle Darstellung einer Aggregationsbeziehung in der UML</phrase> </textobject> <caption> <para>visuelle Darstellung einer Aggregationsbeziehung in der UML </para> </caption> </mediaobject> </screenshot> </para></sect4><sect4 id="composition"><title>Komposition</title><para>Kompositionen sind Assoziationen, die eine <emphasis>sehr starke</emphasis> Aggregation darstellen. Das bedeutet, dass Kompositionen ebenfalls eine Teil eines Ganzen Beziehung darstellen, wobei die Beziehung aber so stark ist, dass die Teile nicht allein existieren können. Sie bestehen nur innerhalb des Ganzen und werden zerstört, wenn das Ganze zerstört wird.</para><para>In der UML werden Kompositionen durch ein ausgefülltes Rhombus auf der Seite des Ganzen dargestellt. </para><para><screenshot> <screeninfo>Komposition</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/composition.png" format="PNG"/> </imageobject> <textobject> <phrase>visuelle Darstellung einer Kompositionsbeziehung in der UML</phrase> </textobject> </mediaobject> </screenshot></para></sect4></sect3> <!--class-associations--></sect2> <!-- class diagram --><sect2 id="activity-diagram"><title>Aktivitätsdiagramm</title><para>Aktivitätsdiagramme beschreiben die Abfolge von Aktivitäten in einem System. Sie sind dabei eine spezielle Form der Zustandsdiagramme, indem sie fast ausschließlich Aktivitäten beinhalten. </para><para> <screenshot> <screeninfo>ein beispielhaftes Aktivitätsdiagramm</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/activity-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellung eines Aktivitätdiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellung eines Aktivitätdiagrammes </para> </caption> </mediaobject> </screenshot> </para><para>Aktivitätsdiagramme sind den prozeduralen Flussdiagrammen sehr ähnlich. Der Unterschied ist, dass Aktivitäten klar an Objekte gekoppelt sind.</para><para>Aktivitätsdiagramme gehören immer eindeutig zu <emphasis>Klassen</emphasis>, <emphasis>Operationen</emphasis> oder <emphasis>Anwendungsfällen</emphasis>.</para><para>In Aktivitätsdiagrammen können sowohl sequenzielle wie auch parallele Aktivitäten dargestellt werden. Parallele Bearbeitung wird mittels der Fork/Wait Symbole umgesetzt. Für parallel laufende Aktivitäten ist es dabei unerheblich, in welcher Reihenfolge sie ablaufen. Sie können zum gleichen Zeitpunkt aber auch nacheinander ausgeführt werden.</para><sect3 id="activity"><title>Aktivität</title><para>Eine Aktivität ist ein einzelner Schritt in einem Prozess. Somit ist eine Aktivität ein Zustand des Systems mit einer internen Aktivität und mindestens einem Übergang. Es sind allerdings mehrere Übergänge möglich, wenn die Aktivität unterschiedliche Bedingungen enthält. </para> <para>Aktivitäten können eine Hierarchie bilden, indem man eine Aktivität aus anderen zusammensetzen kann. Dabei müssen die eingehenden und ausgehenden Übergänge mit den entsprechenden Übergängen in der Verfeinerung übereinstimmen. </para></sect3></sect2> <!-- activity diagram --><sect2 id="sequence-diagram"><title>Sequenzdiagramm</title><para> Sequenzdiagramme zeigen den Nachrichtenaustausch (z.B. Methodenaufruf) zwischen Objekten in einem spezifischen Zeitrahmen. Dabei wird besondere Betonung auf die Reihenfolge und die Zeiten gelegt, in denen die Nachrichten an die Objekte gesendet werden.</para><para> Im Sequenzdiagramm wird das Objekt durch eine vertikal verlaufende gestrichelte Linie gekennzeichnet. Der Objektname befindet sich am oberen Ende. Die Zeitachse verläuft ebenfalls vertikal, wobei sie sich nach unten hin erhöht. Nachrichten zwischen den Objekten werden als Pfeile mit den Operationen- und Parameternamen gekennzeichnet. </para><para> <screenshot> <screeninfo>Sequenzdiagramm</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/sequence-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellung eines Sequenzdiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellung eines Sequenzdiagrammes </para> </caption> </mediaobject> </screenshot> </para></sect2><sect2 id="collaboration-diagram"><title>Kollaborationsdiagramm</title><para>Kollaborationsdiagramme zeigen die Interaktionen zwischen Objekten, die an einer spezifischen Situation teilnehmen. Dies entspricht im Wesentlichen den Informationen aus dem Sequenzdiagramm, wobei bei diesen der Schwerpunkt auf dem zeitlichen Auftreten liegt. Bei Kollaborationsdiagramm wird hingegen vordergründig die Verbindung zwischen Objekten und ihrer Topologie gelegt.</para><para>Die Nachrichten zwischen den Objekten werden in Kollaborationsdiagrammen durch Pfeile dargestellt, an denen Name, Parameter und die Nachrichtensequenz steht. Die Kollaborationsdiagramme sind hervorragend dafür geeignet eine spezielle Programmabfolge oder Situation zu zeigen. Man kann damit sehr leicht und schnell einen Teil der Programmlogik demonstrieren und erklären. </para><para> <screenshot> <screeninfo>Kollaboration</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/collaboration-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellung einnes Kollaborationdiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellung einnes Kollaborationdiagrammes </para> </caption> </mediaobject> </screenshot> </para></sect2><sect2 id="state-diagram"><title>Zustandsdiagramm</title><para>Zustandsdiagramme zeigen Objekte in ihren verschiedenen Zuständen während ihres Lebens und sie zeigen die Einflüsse, die die Objekte in einen anderen Zustand bringen. </para>                              <para>Zustandsdiagramme betrachten Objekte als <emphasis>Zustandsmaschinen </emphasis> oder endliche Automaten, die in einer endlichen Anzahl von Zuständen sein können und die ihren Zustand durch eine endliche Anzahl von Einflüssen verändern. So kann sich zum Beispiel das Objekt <emphasis>NetServer</emphasis> während seines Lebens in folgenden Zuständen befinden: </para><itemizedlist> <listitem><para>bereit</para></listitem> <listitem><para>wartend</para></listitem> <listitem><para>arbeitend</para></listitem> <listitem><para>angehalten</para></listitem> </itemizedlist><para>und die Ereignisse, die eine Zustandsänderung des Objektes auslösen, könnten sein:</para><itemizedlist> <listitem><para>Objekt ist angelegt</para></listitem> <listitem><para>Objekt erhält Nachricht zu warten</para></listitem> <listitem><para>ein Client fordert eine Verbindung über ein Netzwerk an</para></listitem> <listitem><para>ein Client beendet eine Anforderung</para></listitem> <listitem><para>eine Anforderung wird bearbeitet und beendet</para></listitem> <listitem><para>Objekt empfängt Nachricht anhalten</para></listitem> <listitem><para>usw.</para></listitem> </itemizedlist><para> <screenshot> <screeninfo>Zustandsdiagramm</screeninfo> <mediaobject> <imageobject> <imagedata fileref="pics/state-diagram.png" format="PNG"/> </imageobject> <textobject> <phrase>Umbrello bei der Darstellung eines Zustanddiagrammes</phrase> </textobject> <caption> <para>Umbrello bei der Darstellung eines Zustanddiagrammes </para> </caption> </mediaobject> </screenshot> </para><sect3 id="state"><title>Zustand</title><para>Zustände sind die Bausteine des Zustandsdiagrammes. Ein Zustand gehört zu genau einer Klasse und steht für eine bestimmte Konstellation der Attributwerte dieser Klasse. Somit beschreibt ein Zustand in der UML den internen Zustand eines Objektes einer bestimmten Klasse. </para>                       <para>Wichtig ist dabei, dass nicht jede Attributveränderung im Objekt zu einem neuen Zustand führen soll, sondern lediglich Attributwerte mit spürbaren Auswirkungen als Zustand des Objektes zu vermerken sind.</para><para> 2 besondere Zustände sind Start und Ende. So kann es kein Ereignis geben, dass ein Objekt in seinen Startzustand zurückversetzt und kein Ereignis kann ein Objekt in einen anderen Zustand versetzen, wenn dieses bereits seinen Endzustand erreicht hat. </para></sect3></sect2><sect2 id="helper-elements"><title>Hilfselemente</title><para>In der UML sind 3 Elemente, die keine semantische Bedeutung für das Modell haben, aber Diagramme verständlicher machen. Die Elemente sind: </para><itemizedlist> <listitem><para>Textzeile</para></listitem> <listitem><para>Textnotiz</para></listitem> <listitem><para>Verbindung</para></listitem> </itemizedlist>   <para> Mit der Textzeile kann eine Kurzinformation in das Diagramm eingefügt werden. Der Text ist freistehend und hat keine Bedeutung für das Modell. </para>           <para> Mittels der Textnotiz können detailierte Informationen über ein Objekt oder eine Situation eingefügt werden. Der große Vorteil der Textnotiz ist, dass sie mit einem UML Element verbunden werden kann und somit die Notiz zu diesem speziellen Objekt oder der speziellen Situation <quote>gehört</quote>. </para>    <para>Verbindungen haben ebenfalls keine inhaltliche Bedeutung, aber sie sind nützlich um 2 Elemente miteinander zu verbinden. So kann man zum Beispiel Textnotizen mit einem bestimmten Objekt in einem Diagramm verbinden. </para><!-- FIXME, screenshot --></sect2></sect1> <!-- uml-elements -> diagram types ??? --></chapter>
