Gewusst wie: Generieren von Code aus UML-Klassendiagrammen

Dieses Visual Studio 2010 Feature Pack ermöglicht Ihnen das Erstellen von Code aus UML-Elementen in Visual Studio 2010 Ultimate mit dem Befehl Code generieren. Standardmäßig wird mit dem Befehl einen C#-Typ für jeden Typ generiert, den Sie für ein UML-Klassendiagramm auswählen. Sie können dieses Verhalten ändern oder erweitern, indem Sie die Textvorlagen ändern oder kopieren, mit denen der Code generiert wird. Sie können ein anderes Verhalten für die Typen angeben, die in anderen Paketen im Modell enthalten sind. Weitere Informationen finden Sie unter Visual Studio Feature Packs.

Wichtig

Sie müssen Visual Studio 2010 Feature Pack installieren, um diese Funktion verwenden zu können.

Wenn Sie Visual Studio 2010 Visualization and Modeling Feature Pack durch Visual Studio 2010 Feature Pack 2 ersetzt haben, müssen Sie alle benutzerdefinierten Vorlagen für Codegenerierungsprojekte dem folgenden Speicherort neu zuordnen:

…\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\<InsertVisualStudioFeaturePackName>\<InsertVisualStudioFeaturePackVersionNumber>

Weitere Informationen finden Sie unter Anpassen des Befehls 'Code generieren'.

Der Befehl Code generieren eignet sich insbesondere zum Generieren von Code für die Elementauswahl des Benutzers und zum Generieren einer Datei für die einzelnen UML-Klassen oder andere Elemente. Das folgende Bildschirmfoto zeigt z. B. zwei C#-Dateien, die aus zwei UML-Klassen generiert wurden.

Wenn Sie stattdessen Code generieren möchten, in dem die generierten Dateien keine 1:1-Beziehung mit den UML-Elementen aufweisen, können Sie Textvorlagen schreiben, die mit dem Befehl Alle Vorlagen transformieren aufgerufen werden. Weitere Informationen über diese Methode finden Sie unter Gewusst wie: Generieren von Dateien aus einem UML-Modell.

UML-Klassendiagramm und generierte Dateien der C#-Klasse.

Weitere Informationen zu UML-Klassendiagrammen in Visual Studio Ultimate finden Sie in den folgenden Themen:

Verwenden des Befehls 'Code generieren'

Im folgenden Verfahren wird das Standardverhalten des Befehls Code generieren beschrieben:

So generieren Sie eine separate Datei für jedes Element

  1. Erstellen Sie ein UML-Modell, das Klassen enthält. Sie können Stereotype auf die Modellelemente anwenden.

    Weitere Informationen finden Sie unter Transformationen der Standardcodegenerierung.

  2. Wählen Sie in einem Klassendiagramm oder in UML-Modell-Explorer Elemente aus, mit denen Sie Code generieren möchten. Es stehen Ihnen folgende Auswahlmöglichkeiten zur Verfügung:

    • Ein bestimmter Satz von Elementen.

    • Ein Paket oder das Modell, aus dessen Inhalt Code generiert werden soll.

    • Das Diagramm, in dem alle Elemente ausgewählt werden können.

  3. Klicken Sie mit der rechten Maustaste auf ein ausgewähltes Element, und klicken Sie dann auf Code generieren.

    Bei der ersten Verwendung von Code generieren in einem bestimmten Modell wird ein Dialogfeld angezeigt. In diesem Dialogfeld können Sie die Codegenerierungsparameter des Modells bearbeiten.

    Klicken Sie auf OK, wenn Sie wissen, dass Sie diese Parameter nicht ändern möchten.

    Um später zu diesem Dialogfeld zurückzukehren, klicken Sie mit der rechten Maustaste auf das Diagramm, und klicken Sie dann auf Configure Default Code Generation Settings (Standardeinstellungen für Codegenerierung konfigurieren). Weitere Informationen finden Sie unter Anpassen des Befehls 'Code generieren'.

Dateien werden generiert, die C#-Code enthalten sind. Im Standardfall wird eine Datei für jeden Typ generiert, und die Dateien werden in einem C#-Klassenbibliotheksprojekt generiert. Sie können dieses Verhalten jedoch anpassen. Weitere Informationen finden Sie unter Anpassen des Befehls 'Code generieren'.

Einige Validierungstests werden für das Modell angewendet, um sicherzustellen, dass es in C# übersetzt werden kann. Wenn diese Tests fehlschlagen, wird eine Fehlermeldung angezeigt, und die Codegenerierung wird nicht ausgeführt. Wenn Sie einen Validierungsmenübefehl erstellt haben, wird Code für kein Element generiert, für das der Validierungsbefehl fehlschlägt. Weitere Informationen finden Sie unter Gewusst wie: Definieren von Validierungseinschränkungen für UML-Modelle.

Transformationen der Standardcodegenerierung

In diesem Abschnitt werden die Ergebnisse zusammengefasst, die vom Befehl Code generieren erzeugt werden, sofern Sie den Befehl nicht angepasst haben. Weitere Informationen finden Sie unter Anpassen des Befehls 'Code generieren'.

  • Ein C#-Typ wird für jeden Typ erzeugt, den Sie im UML-Modell ausgewählt haben. Jeder Typ wird in einer separaten Codedatei unter dem Ordner GeneratedCode eingefügt.

  • Wenn der UML-Typ in einem Paket enthalten ist, wird der generierte C#-Typ in einem Namespace platziert, und die Datei wird in einem Ordner generiert, der den gleichen Namen wie der Namespace hat.

  • Eine C#-Eigenschaft wird für jedes Attribute einer UML-Klasse generiert.

  • Eine C#-Methode wird für jede Operation eines UML-Typs generiert.

  • Ein C#-Feld wird für jede navigierbare Zuordnung generiert, an der die Klasse teilnimmt.

Sie können mehr Eigenschaften des generierten C#-Typs steuern, indem Sie jedem UML-Typ ein Stereotyp hinzufügen.

Zum Erstellen dieses C#-Typs

Zeichnen Sie diesen UML-Typ

Übernehmen Sie dieses Stereotype

Class

Klasse

<none> oder

C#-Klasse

Schnittstelle

Schnittstelle

<none> oder

C#-Schnittstelle

Enumeration

Enumeration

<none> oder

C#-Enumeration

Delegat

Klasse

C#-Delegat

Struktur

Klasse

C#-Struktur

So legen Sie ein Stereotyp für einen Typ oder ein anderes Element fest

  1. Klicken Sie im Diagramm oder im UML-Modell-Explorer mit der rechten Maustaste auf das Element, und klicken Sie dann auf Eigenschaften.

  2. Klicken Sie im Fenster Eigenschaften auf den Dropdownpfeil in der Stereotypes-Eigenschaft, und aktivieren Sie dann das Kontrollkästchen für das Stereotyp, das Sie übernehmen möchten.

    Tipp

    Wenn die C#-Stereotype nicht angezeigt werden, aktivieren Sie das C#-Profil für das Modell oder ein Paket, das die Modellelemente enthält, für die Sie sich interessieren. Wählen Sie das Paket oder den Stamm des Modells in UML-Modell-Explorer aus. Klicken Sie dann im Fenster Eigenschaften auf Profil, und aktivieren Sie dann das C#-Profil.

  3. Erweitern Sie die Stereotypes-Eigenschaft, um die zusätzlichen Eigenschaften zu sehen, die Sie festlegen können.

Die Description-Eigenschaften von Typen, Attributen, Vorgängen und Zuordnungen werden in <summary>-Kommentare im generierten Code geschrieben. Kommentarelemente, die mit Typen verknüpft sind, werden in <remarks>-Kommentare geschrieben.

Variieren des generierten Codes

Der generierte Code unterscheidet sich je nach den Eigenschaften der einzelnen Typen, Attribute oder Vorgänge. Wenn Sie z. B. die Is Abstract-Eigenschaft einer Klasse auf "true" festlegen, wird das abstract-Schlüsselwort für die generierte Klasse angezeigt. Wenn Sie die Multiplizität eines Attributs auf 0..* festlegten, erhält die generierte Eigenschaft einen IEnumerable<>-Typ.

Außerdem stellt jedes Stereotyp mehrere zusätzliche Eigenschaften bereit, die Sie festlegen können. Diese Werte werden im C#-Code in geeignete Schlüsselwörter übersetzt. Wenn Sie z. B. die Is Static-Eigenschaft für eine Klasse festlegen, ist die C#-Klasse static.

Wählen Sie die Klasse oder ein anderes Element im Diagramm aus, um diese zusätzlichen Eigenschaften festzulegen. Erweitern Sie Stereotypes im Eigenschaftenfenster, und erweitern Sie dann das C#-Stereotyp, z. B. C#-Klasse. Für Klassen schließen diese zusätzlichen Eigenschaften Folgendes ein:

  • CRL-Attribute

  • Is Partial

  • Is Static

  • Is Unsafe

  • Paketsichtbarkeit

Jedes Attribut und jeder Vorgang verfügt ebenfalls über Stereotypeigenschaften, die Sie festlegen können. Wenn die Eigenschaften für ein neues Attribut nicht angezeigt werden, führen Sie Code generieren aus.

Anpassen des Befehls 'Code generieren'

Der Befehl Code generieren funktioniert, indem die Modellelemente anhand eines Satzes von Textvorlagen transformiert werden. Weitere Informationen zu Textvorlagen finden Sie unter Codegenerierung und T4-Textvorlagen.

Die Vorlagen werden in einem Satz von Textvorlagenbindungen angegeben. Eine Textvorlagenbindung gibt die anzuwendende Vorlage, den Speicherort der generierten Ausgabe und weitere Parameter des Befehls Code generieren an.

Wenn Sie den Befehl Code generieren das erste Mal für ein bestimmtes Modell ausführen, wird dem Stamm des Modells ein Standardsatz von Vorlagenbindungen angefügt. Diese Bindungen gelten für alle Elemente im Modell.

Sie können diese Standardbindungen jedoch überschreiben und durch Anfügen von eigenen Bindungen an Pakete, Klassen oder andere Elemente ergänzen. Eine Bindung gilt für alle Elemente, die in dem Element enthalten sind, an das es angefügt wird. Wenn z. B. alle Typen in einem bestimmten Paket von einem anderen Satz von Vorlagen transformiert oder in einen anderen Ordner ausgegeben werden sollen, können Sie dem Paket Vorlagenbindungen anfügen.

Klicken Sie im Eigenschaftenfenster in der Text Template Bindings-Eigenschaft auf die Schaltfläche mit den Auslassungszeichen [...], um die an ein Modellelement angefügten Vorlagenbindungen zu überprüfen.

Mit dem Befehl Code generieren werden Vorlagen auf jedes ausgewählte Modellelement angewendet. Für jedes Element ist der angewendete Satz von Vorlagen, der kombinierte Vorlagensatz, der seinen Containern angefügt wurde, einschließlich des Modellstamms.

Wenn zwei Vorlagenbindungen in diesem Satz den gleichen Namen aufweisen, überschreibt die Bindung im kleineren Container die Bindung im größeren Container. Der Modellstamm besitzt z. B. eine Bindung mit dem Namen Class Template. Definieren Sie eine eigene Vorlagenbindung mit dem Namen Class Template, um auf den Inhalt eines bestimmten Pakets eigene Vorlage anzuwenden.

Für ein Modellelement können mehrere Vorlagen übernommen werden. Sie können mehr als eine Datei aus jedem Modellelement generieren.

Tipp

Die Bindungen am Stamm des Modells fungieren für alle Elemente im Modell als Standard. Klicken Sie zum Anzeigen dieser Standardbindungen mit der rechten Maustaste auf die Diagrammoberfläche, und klicken Sie dann auf Configure Default Code Generation Settings (Standardeinstellungen für Codegenerierung konfigurieren). Alternativ können Sie den Stamm des Modells im UML-Modell-Explorer auswählen und dann in der Text Template Bindings-Eigenschaft auf […] klicken. Die Bindungen werden erst angezeigt, wenn Sie mindestens einmal den Befehl Code generieren verwendet haben. Vorlagenbindungen können keinem Diagramm angefügt werden.

So fügen Sie Textvorlagenbindungen an ein Paket oder anderes Modellelement an

  1. Klicken Sie im UML-Modell-Explorer mit der rechten Maustaste auf ein Modellelement, und klicken Sie anschließend auf Eigenschaften. Im Allgemeinen fügen Sie Textvorlagenbindungen einem Paket oder dem Stamm des Modells an.

  2. Klicken Sie im Fenster Eigenschaften in der Text Template Bindings-Eigenschaft auf die Schaltfläche mit den Auslassungszeichen ([…]).

    Das Dialogfeld Text Template Bindings (Textvorlagenbindungen) wird angezeigt.

  3. Klicken Sie auf Hinzufügen, um eine neue Textvorlagenbindung zu erstellen.

    – oder –

    Klicken Sie auf eine vorhandene Bindung, um sie zu bearbeiten.

    Jede Vorlagenbindung definiert, wie eine angegebene Vorlage für das ausgewählt Modellelement und andere darin enthaltene Modellelemente übernommen werden soll.

  4. Legen Sie im Dialogfeld die Eigenschaften der Textvorlagenbindung fest.

    Eigenschaft

    Beschreibung

    Name

    Ein Name für diese Bindung. Um eine von einem enthaltenden Paket oder Modell geerbte Bindung zu überschreiben, verwenden Sie den gleichen Namen wie die Bindung, die Sie überschreiben möchten.

    Overwrite

    Bei "true" wird jeder vorhandener Code überschrieben.

    Target Name

    Der Name der generierten Datei.

    Sie können Ausdrücke in diese Zeichenfolge einfügen (z. B. {Name} oder {Owner.Name}). Sie könnten z. B. Folgendes schreiben: {Owner.Name}_{Name}. Der Ausdruck wird für das Modellelement ausgewertet. Eigenschaften von Elementen, jedoch keine Methoden können verwendet werden. Welche Eigenschaften verwendet werden können, finden Sie unter den Eigenschaften der Typen in Microsoft.VisualStudio.Uml.*.

    Wichtiger HinweisWichtig
    {Name} oder {Owner.Name} kann nur in der Target Name-Eigenschaft verwendet werden.Um den Namen der generierten Klasse zu ändern, müssen Sie die Vorlage ändern.Weitere Informationen finden Sie unter Schreiben einer Textvorlage.

    Project Path

    Gibt den Pfad zum Visual Studio-Projekt an, das die Ausgabedateien der Transformation enthält. Verwenden Sie typisierte Werte, um ein neues Projekt zu erstellen. Klicken Sie auf die Schaltfläche mit den Auslassungszeichen ([…]), um ein vorhandenes Projekt auszuwählen.

    Falls noch nicht vorhanden, wird ein neues Projekt erstellt. Es ist ein C#-Klassenbibliotheksprojekt.

    Hierzu müssen Sie das Projekt direkt eingeben. Sie können Umgebungsvariablenmakros wie %ProgramFiles% oder %LocalAppData% einschließen.

    Target Directory

    Der Ordner, in dem die Zieldatei generiert wird. Der Pfad ist relativ zum Projektordner.

    Sie können mithilfe des {PackageStructure}-Ausdrucks einen Pfad einfügen, der den Namen der enthaltenden Pakete entspricht. Der Standardwert ist \GeneratedCode\{PackageStructure}. Sie können auch Umgebungsvariablen wie %TEMP% oder %HomePath% einschließen.

    Wichtiger HinweisWichtig
    {PackageStructure} kann nur in der Target Directory-Eigenschaft verwendet werden.

    Template Filename

    Die Vorlage, mit der die Transformation ausgeführt wird.

    Sie können entweder die bereitgestellten Vorlagen verwenden oder eigene erstellen. Sie finden die bereitgestellten Vorlagen an den folgenden Speicherorten:

    • Visual Studio 2010 Visualization and Modeling Feature Pack: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<InsertVisualStudioFeaturePackName>\1.0\Templates\Text\

      TippTipp
      %LocalAppData% ist in der Regel DriveName:\Users\UserName\AppData\Local.Verwenden Sie unter Windows XP und Windows 2003 %APPDATA% statt %LocalAppData%.
    • Visual Studio 2010 Feature Pack 2: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<InsertVisualStudioFeaturePackName>\<InsertVisualStudioFeaturePackVersionNumber>

  5. Sie können einem Element beliebig viele Bindungen anfügen.

Schreiben einer Textvorlage

Sie können eigene Textvorlagen schreiben. Textvorlagen können Programmcode oder eine beliebige andere Art von Textdatei generieren.

Beginnen Sie am besten, indem Sie Kopien der Standardvorlagen ändern. Sie können die Vorladen aus den folgenden Speicherorten kopieren:

  • Visual Studio 2010 Visualization and Modeling Feature Pack: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<InsertVisualStudioFeaturePackName>\1.0\Templates\Text\

    Tipp

    %LocalAppData% ist in der Regel DriveName:\Users\UserName\AppData\Local. Verwenden Sie unter Windows XP und Windows 2003 %APPDATA% statt %LocalAppData%.

  • Visual Studio 2010 Feature Pack 2: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<InsertVisualStudioFeaturePackName>\<InsertVisualStudioFeaturePackVersionNumber>

Erläuterungen zu den Textvorlagen finden Sie unter den folgenden Themen.

Sie müssen Sie die Modeling-Direktive einschließen, um die Vorlagen mit dem Befehl Code generieren verwenden zu können. Beispiel:

<#@ Modeling ElementType="Microsoft.VisualStudio.Uml.Classes.IClass" Processor="ModelingProcessor" #>

Das ElementType-Attribut definiert den Typ des UML-Elements, auf das diese Vorlage angewendet wird.

In der Vorlage gehört this zu einer temporären Klasse, die über die folgenden Eigenschaften verfügt:

Die folgenden Punkte können beim Schreiben der Textvorlage hilfreich sein. Diese Informationen werden in Detail in Codegenerierung und T4-Textvorlagen beschrieben.

  • Fügen Sie zum Debuggen einer Textvorlage Folgendes in einem Anweisungssegment ein: System.Diagnostics.Debugger.Launch();

  • Sie können die Dateinamenerweiterung des Ergebnisses in der Output-Direktive festlegen. Eine Output-Direktive ist in jeder Textvorlage erforderlich.

  • Die Vorlage verweist automatisch auf einige Assemblys. Diese Assemblys schließen z. B. "System.dll" und "Microsoft.VisualStudio.Uml.Interfaces.dll" ein.

    Für die Verwendung anderer Assemblys im generierenden Programmcode müssen Sie eine Assembly-Direktive verwenden. Beispiel:

    <#@ Assembly Name="%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll" #>

  • Einige Namespaces wie System werden automatisch in den Programmcode importiert. Für andere Namespaces können Sie die Import-Direktive auf die gleiche Weise verwenden wie eine using-Anweisung. Beispiel:

    <#@ Import Namespace="Microsoft.VisualStudio.Uml.Classes" #>

    <#@ Import Namespace="Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml" #>

  • Verwenden Sie die Include-Direktive, um auf den Text einer anderen Datei zu verweisen.

  • Die in Klammern <# ... #> eingeschlossenen Teile der Vorlage werden mit dem Befehl Code generieren ausgeführt. Teile der Vorlage außerhalb dieser Klammern werden in die Ergebnisdatei kopiert. Es ist wichtig, zwischen dem generierenden Code und dem generierten Text zu unterscheiden. Der generierte Text kann jeder Sprache aufweisen.

  • <#= Expressions #> werden ausgewertet und in Zeichenfolgen konvertiert.

Siehe auch

Konzepte

UML-Klassendiagramme: Referenz

UML-Klassendiagramme: Richtlinien

Weitere Ressourcen

Gewusst wie: Generieren von Dateien aus einem UML-Modell

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Dezember 2010

Aktualisierter Inhalt für Visual Studio 2010 Feature Pack 2.

Informationsergänzung.