Klassendiagramm

Darstellung von Entity, Boundary und Controller Variante 1

Bei dem ersten Anlegen einer Entity, Boundary oder Controllerklasse zeigt Magicdraw nur das Symbol an. Es wird nicht das Klassensymbol angezeigt. So stellt man die Anzeige um:

Man erzeugt die erste Klasse und w├Ąhlt dann im Kontextmenu der Klasse Symbol Properties.

 

 Hier stellt man die Eigenschaft "Show Stereotyps" auf "Icon" und klickt dann die Checkbox unten links "Make Default" an.

 

Jetzt findet man den Stereotyp unter Options/Project/Symbols properties style/Stereotypes und kann die Darstellung des Stereotyps bearbeiten.

 

 

 

Darstellung von Entity, Boundary und Controller Variante 2

Man w├Ąhlt das Menu Options/Project und klickt Stereotypes an. Dann klickt man den Button Add/Remove Stereotype.

 

Im folgenden Fenster w├Ąhlt man den Stereotyp aus, den man konfigurieren m├Âchte.

 

Danach kann die Darstellung des Stereotypen, wie oben beschrieben ├╝ber Options/Project/Symbols properties style/Stereotypes konfiguriert werden. ├ťber den Button "Extend by Diagram" kann die Darstellung eines Stereotypen in verschiedenen Diagrammen unterschiedlich konfiguriert werden.

 

Elemente von Klassen ein- und ausblenden

Man kann Elemente (Attribute oder Operationen) von Klassen ein- und ausblenden. Dies geschieht mit der Funktion "Edit Compartment" im Kontext-Menu. Ein Compartment (Abteilung) einer Klasse, die nicht vollst├Ąndig dargestellt wird, hat im unteren Bereich drei Punkte.

Konstruktoren und Destruktoren

Man legt eine gew├Âhnliche Operation f├╝r eine Klasse an, und weist einem Konstruktor den Stereotyp <<constructor>> oder <<C++Construktor>> zu. Einem Destruktor weist man den Stereotyp <<C++Destructor>> oder <<destructor>> zu. Die Stereotypen <<C++Constructor>> und <<C++Destructor>> sind in dem Profil C++ANSI_Profile definiert und stehen nur zur Verf├╝gung, wenn dieses Profil geladen ist.

Getter/Setter

Getter/Setter f├╝r den Zugriff auf Attribute einer Klasse erzeugt man, indem man eine Klasse im Klassendiagramm selektiert und aus dem Kontextmenu die Funktion Tools/CreateGetterSetter startet. Im folgenden Dialog w├Ąhlt man die Attribute, auf die man zugreifen m├Âchte und gibt ├╝ber die Checkboxen an welche Zugriffsmethoden erzeugt werden sollen.

Diese Funktion ist nur in den Perspektiven Software Architect, Full Featured oder Quick Start eingeschaltet.

 

Virtuelle Methoden

Um eine Methode als virtuell zu deklarieren stellt man die Eigenschaft Virtual auf true.

Assoziationsklasse

Um eine Assoziationsklasse zu erzeugen, m├╝ssen die beiden Klassen, die an der Assoziation beteiligt sind im Diagramm existieren. Die Assoziation darf NICHT existieren. Man w├Ąhlt Association/AssociationClass und klickt danach beide Klassen an, die durch die Assoziation verbunden werden sollen.

Realisierung einer 1 zu * Assoziation in C++

Bei 1 zu * Assoziationen erzeugt MagicDraw die gegenseitigen Referenzierungen, unabh├Ąhig von der Multiplizit├Ąt, in beide Richtungen als Pointer. F├╝r die korrekte Referenzierung in die * Richtung muss MagicDraw der Container angegeben werden, den man verwenden will.

Am folgenden Beispiel wird das Vorgehen beschrieben.

Man legt die Beziehung an und gibt die Rollennamen der beteiligten Klassen (pFB und pStudent) an.

 

F├╝r die Referenzierung in die 1er Richtung (von Student zu FB) gibt man in der Spezifikation des Attributs f├╝r die Eigenschaft Typ Modifikator den Wert $* an. Diese Angabe entspricht der Standardeinstellung.

 

 

F├╝r die Referenzierung in die * Richtung gibt man in der Spezifikation des Attributs f├╝r die Eigenschaft Container den Wert "std::vector<$ *>" an. Das $-Zeichen ersetzt den Typ, der im Vector aufbewahrt wird. Das std-Package muss im Projekt enthalten sein.

 

 

 Das Ergebnis ist im folgenden Klassendiagramm dargestellt.

 /**
 * @(#) FB.h
 */

#ifndef FB_H_H
#define FB_H_H
#include "Studenten.h"
class Studenten;

class FB
{
    std::vector<Studenten *> pStudenten;
};
#endif

 

/**
 * @(#) Studenten.h
 */

#ifndef STUDENTEN_H_H
#define STUDENTEN_H_H
#include "FB.h"
class FB;
class Studenten
{
    FB* pFB;
};
#endif
 

Anlegen einer Assoziation f├╝r existierendes Attribut

Verweist ein Attribut einer Klasse auf eine weitere Klasse, so kann eine Assoziation erzeugt werden, die das existierende Attribut als Realisierungsattribut verwendet.

 

  • man stellt den Cursor auf das Attribut
  • und w├Ąhlt ├╝ber die rechte Maustaste "Refactor/Convert To/Association"

 

Assoziation: Pfeil Leserichtung anzeigen

Will man den Pfeil, der die Leserichtung eines Assoziationsnamens angibt anzeigen, dann stellt man im CASE-Labor

  • den Cursor auf die Assoziation
  • und w├Ąhlt ├╝ber die rechte Maustaste "Show Direction Arrow"

Dies ist eine FBI-eigene Konfiguration. Auf den privaten Rechneren findet man diese Funktion in den Symbol Properties.

Assoziation: Pfeil Leserichtung umkehren

Will man den Pfeil, der die Leserichtung eines Assoziationsnamens angibt ├Ąndern, dann

  • stellt man den Cursor auf den Pfeil
  • und w├Ąhlt ├╝ber die rechte Maustaste "Refactor/Reverse Direction"

Korrekte Vererbungs-Deklaration erzeugen

Um eine korrekte Deklaration von Vererbungen zu erhalten, muss die Sichtbarkeit des Vererbungspfeils angegben werden. Sonst erzeugt Magicdraw  Deklarationen, die z. B. so aussehen: class A : B.

So geht es:

  • Man erzeugt den Vererbungspfeil
  • Rechte Maus Taste auf dem Vererbungspfeil -> Specification
  • Man stellt die Eigenschaft "Inheritance visibility" auf public

 

 

Mehrere Vererbungspfeile zusamenfassen

Um mehrere Vererbungspfeile zu einem zusammenzufassen geht man so vor:

  • man erzeugt den ersten Pfeil 
  • alle weiteren Pfeil erzeugt man zwischen den Klassen und dem vorhandenen Pfeil.

Generalisierungsmenge

Um eine Generalisierungsmenge (Generalization Set) in Magicdraw anzugeben, zeichent man zuerst die Klassen und die Vererbungsbeziehung. Dann wird der Vererbungspfeil selektiert und man w├Ąhlt ├╝ber die rechte Maustaste "Generalization Set". Es poppt ein Fenster auf in dem man die UNTERSTE Zeile, "New Generalization Set" w├Ąhlt. Man w├Ąhlt einen Besitzer des Geralization Set (z. B. Data) und klickt OK

Im Spezifikations Dialog gibt man den Namen des Set an. ├ťber die Eigenschaften "Is Disjoint" und "Is Covering" setzt man die Werte f├╝r disjoint/overlapping und complete/incomplete.

 

 

Damit das Generalization Set angezeigt wird, muss ├╝ber Symbols Properties (rechte Maustaste auf dem Set) die Eigenschaft Show Complete/Disjoint auf true gesetzt sein.

Forward Deklaration

Zur Generierung der korrekten Forward-Deklaration stellt man die Eigenschaft Header include auf Class Forward.

 

 

Vererbung: geerbte Methode implementieren/├╝berschreiben

Erbt eine Unterklasse in einer Vererbungshierarchie eine Methode von einer Oberklasse, so kann sie wie folgt in der Unterklasse angegeben werden:

  • man selektiert die Unterklasse
  • w├Ąhlt ├╝ber die rechte Maustaste "Tools/Implement/Override Operation"
  • im folgenden Dialog selektiert man die zu implementierende Methode.

Klassen in mehreren Diagrammen darstellen

Klassen k├Ânnen in mehreren Diagrammen dargestellt werden. MagicDraw ber├╝cksichtigt alle Beziehungen, an denen eine Klasse beteiligt ist, auch wenn nicht alle Beziehungen dargestellt werden. Man f├╝gt in einem Modell vorhandene Klassen durch Ziehen in einem Diagramm ein. Die Beziehungen der Klasse werden nicht automatisch dargestellt. Die Beziehungen, die dargestellt werden sollen, blendet man ├╝ber das Kontextmenu einer Klasse durch die Funktion "Related Elements/Display Paths" ein..

Design Patterns

MagicDraw kann Design Patterns automatisch erzeugen. Am Beispiel des Observer Patterns werden hier die einzelnen Schritte beschrieben, die man gehen mu├č.

Man w├Ąhlt in der Diagramm Palette, links vom Klassendiagramm, "Class by Pattern".

Man erzeugt eine "Class by Pattern" durch einen Klick. Im folgenden Dialog w├Ąhlt man im linken Frame den Pattern-Typ aus und ordnet im rechten Bereich die Klassen zu und klickt den Finish-Button.

Interface

  • Zuerst man erzeugt die beiden Klassen (B und C)

 

  • Dann man klickt die Klasse B an, w├Ąhlt "Interface Realization" und klickt auf eine leere Fl├Ąche
  • Man klickt das Interface an und w├Ąhlt ├╝ber die rechte Mautaste "Symbol Properties". Hier stellt man die Option "Suppress Operations" auf true.

 

  • Man klickt die Klasse C an, w├Ąhlt eine "Usage"-Beziehung und klickt auf das Interface

Interface