Freigeben über


Gewusst wie: Generieren von Code aus UML-Klassendiagrammen

In Visual Studio Ultimate können Sie Code von UML-Klassendiagrammen generieren, indem Sie den Befehl Code generieren verwenden. Standardmäßig generiert der Befehl einen C#-Typ für jeden UML-Typ, den Sie 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.

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. Öffnen Sie das Kontextmenü für ein ausgewähltes Element, und wählen Sie dann Code generieren aus.

    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.

    Wählen Sie OK aus, es sei denn, Sie wissen, dass Sie diese Parameter ändern möchten.

    Um später zu diesem Dialogfeld zurückzukehren, öffnen Sie das Kontextmenü für das Diagramm, und wählen Sie dann Standardeinstellungen für die Codegenerierung konfigurieren aus.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

Klasse

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. Öffnen Sie das Kontextmenü für das Element in einem Diagramm oder in UML-Modell-Explorer, und wählen Sie dann Eigenschaften aus.

  2. Im Fenster Eigenschaften wählen Sie den Dropdownpfeil in der Eigenschaft Stereotype aus, und aktivieren Sie dann das Kontrollkästchen für das Stereotyp, die Sie anwenden möchten.

    TippTipp

    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.Das im Fenster Eigenschaften, wählen Sie Profil aus 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.

Um die Vorlagenbindungen zu überprüfen, die einem Modellelement zugeordnet sind, wählen Sie die Auslassungspunkte [...] in der Eigenschaft Textvorlagenbindungen im Eigenschaftenfenster.

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.

HinweisHinweis

Die Bindungen am Stamm des Modells fungieren für alle Elemente im Modell als Standard.Um diese Standardbindungen anzuzeigen, öffnen Sie das Kontextmenü für die Diagrammoberfläche, und wählen Sie dann Standardeinstellungen für die Codegenerierung konfigurieren aus.Alternativ können Sie den Stamm des Modells im UML-Modell-Explorer auswählen und dann [...] in der Eigenschaft Textvorlagenbindungen aus.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. In UML-Modell-Explorer öffnen Sie das Kontextmenü für ein Modellelement, und wählen Sie dann Eigenschaften aus.Im Allgemeinen fügen Sie Textvorlagenbindungen einem Paket oder dem Stamm des Modells an.

  2. Im Eigenschaften Sie im auf die Schaltfläche mit den Auslassungspunkten ([...]) in der Eigenschaft Textvorlagenbindungen aus.

    Das Dialogfeld Text Template Bindings (Textvorlagenbindungen) wird angezeigt.

  3. Wählen Sie Hinzufügen, um eine neue Textvorlagenbindung zu erstellen.

    - oder -

    Wählen Sie 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.Wählen Sie die Schaltfläche mit den Auslassungspunkten ()[...] 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.

    Vorlagendatei-Pfad

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

    Sie können entweder die bereitgestellten Vorlagen verwenden oder eigene erstellen.Sie können die bereitgestellten Vorlagen im folgenden Speicherort finden:

    …\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\

  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:

…\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\

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.

  • 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 11.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

Gewusst wie: Generieren von Dateien aus einem UML-Modell