Procedura: generare codice da diagrammi classi UML
Questo Feature Pack di Visual Studio 2010 consente di creare codice dagli elementi UML in Visual Studio 2010 Ultimate tramite il comando Genera codice. Per impostazione predefinita, il comando genera un tipo C# per ogni tipo selezionato su un diagramma classi UML. Tale comportamento può essere modificato o esteso modificando o copiando i modelli di testo che generano il codice. È possibile specificare un comportamento differente per i tipi contenuti nei vari pacchetti del modello. Per ulteriori informazioni, vedere Feature Pack di Visual Studio.
Importante |
---|
Per utilizzare questa funzionalità, è necessario installare un Feature Pack di Visual Studio 2010. Se si è sostituito il Feature Pack di visualizzazione e modellazione di Microsoft Visual Studio 2010 con Visual Studio 2010 Feature Pack 2, sarà necessario rieseguire il mapping dei modelli personalizzati per i progetti di generazione del codice al percorso seguente: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\<NomeFeaturePackVisualStudio>\<NumeroVersioneFeaturePackVisualStudio> Per ulteriori informazioni, vedere Personalizzazione del comando Genera codice. |
Il comando Genera codice è particolarmente indicato per la generazione di codice in base alla selezione degli elementi da parte dell'utente e per la generazione di un file per ogni classe o altro elemento UML. Ad esempio, nella schermata riportata di seguito sono illustrati due file C# generati da due classi UML.
In alternativa, se si desidera generare codice nel quale i file generati non dispongono di una relazione 1:1 con gli elementi UML, è possibile scrivere modelli di testo che vengano richiamati con il comando Trasforma tutti i modelli. Per ulteriori informazioni su tale metodo, vedere Procedura: generare file da un modello UML.
Per ulteriori informazioni sui diagrammi classi UML in Visual Studio Ultimate, vedere i seguenti argomenti:
Utilizzo del comando Genera codice
Nella procedura riportata di seguito viene descritto il comportamento predefinito del comando Genera codice:
Per generare un file separato per ogni elemento
Creare un modello UML contenente classi. È possibile applicare stereotipi agli elementi del modello.
Per ulteriori informazioni, vedere Trasformazioni della generazione di codice predefinita.
In un diagramma classi o in Esplora modelli UML, selezionare gli elementi dai quali si desidera generare il codice. È possibile effettuare una delle seguenti selezioni:
Un set specifico di elementi.
Un pacchetto o il modello, dal cui contenuto generare il codice.
Il diagramma, per selezionarne tutti gli elementi.
Fare clic con il pulsante destro del mouse su un elemento selezionato e scegliere Genera codice.
Al primo utilizzo del comando Genera codice in un particolare modello, viene visualizzata una finestra di dialogo che consente di modificare i parametri di generazione del codice del modello.
Scegliere OK a meno che non si ritenga di dover modificare questi parametri.
Per tornare a questa finestra di dialogo in seguito, fare clic con il pulsante destro del mouse sul diagramma e scegliere Configura impostazioni predefinite di generazione codice. Per ulteriori informazioni, vedere Personalizzazione del comando Genera codice.
Vengono generati i file contenenti il codice C#. Nel caso predefinito, viene generato per ogni tipo un file in un progetto Libreria di classi C#. È tuttavia possibile personalizzare tale comportamento. Per ulteriori informazioni, vedere Personalizzazione del comando Genera codice.
Al modello vengono applicati alcuni test di convalida per verificare che possa essere convertito in C#. Se i test hanno esito negativo, viene visualizzato un messaggio di errore e la generazione di codice non viene eseguita. Se si è creato un comando di menu di convalida, il codice non viene generato per gli elementi per i quali il comando di convalida ha esito negativo. Per ulteriori informazioni, vedere Procedura: definire vincoli di convalida per i modelli UML.
Trasformazioni della generazione di codice predefinita
In questa sezione vengono riepilogati i risultati prodotti dal comando Genera codice quando questo non è stato personalizzato. Per ulteriori informazioni, vedere Personalizzazione del comando Genera codice.
Per ogni tipo selezionato nel modello UML viene generato un tipo C#. Ogni tipo viene inserito in un file di codice separato nella cartella GeneratedCode.
Se il tipo UML è contenuto in un pacchetto, il tipo C# generato viene inserito in uno spazio dei nomi e il file viene generato in una cartella con lo stesso nome dello spazio dei nomi.
Per ogni elemento Attribute di una classe UML viene generata una proprietà C#.
Per ogni elemento Operation di un tipo UML viene generato un metodo C#.
Per ogni associazione navigabile cui partecipa la classe viene generato un campo C#.
Aggiungendo uno stereotipo a ogni tipo UML, è possibile controllare più proprietà del tipo C# generato.
Per creare il tipo C# |
Creare il tipo UML |
Applicare lo stereotipo |
---|---|---|
Classe |
Classe |
<nessuno> oppure Classe C# |
Interfaccia |
Interfaccia |
<nessuno> oppure Interfaccia C# |
Enumerazione |
Enumerazione |
<nessuno> oppure C# enum |
Delegato |
Classe |
Delegato C# |
Struct |
Classe |
C# struct |
Per impostare uno stereotipo su un tipo o su un altro elemento
Fare clic con il pulsante destro del mouse su un diagramma o in Esplora modelli UML e scegliere Proprietà.
Nella finestra Proprietà fare clic sulla freccia a discesa della proprietà Stereotypes e selezionare la casella di controllo relativa allo stereotipo che si desidera applicare.
Suggerimento Se gli stereotipi C# non sono visualizzati, abilitare il profilo C# per il modello o per un pacchetto contenente gli elementi del modello desiderati. Selezionare il pacchetto o la radice del modello in Esplora modelli UML. Quindi, nella finestra Proprietà fare clic su Profile e abilitare il profilo C#.
Espandere la proprietà Stereotypes per visualizzare le proprietà aggiuntive che è possibile impostare.
Le proprietà Description di tipi, attributi, operazioni e associazioni sono scritte in commenti <summary> all'interno del codice generato. Gli elementi di commento collegati ai tipi sono scritti in commenti <remarks>.
Modifica del codice generato
Il codice generato varia in base alle proprietà di ciascun tipo, attributo o operazione. Ad esempio, se si imposta la proprietà Is Abstract di una classe su true, nella classe generata verrà visualizzata la parola chiave abstract. Se si imposta la proprietà Multiplicity di un attributo su 0..*, la proprietà generata disporrà di un tipo IEnumerable<>.
Inoltre, ogni stereotipo fornisce varie proprietà aggiuntive che è possibile impostare. Questi valori vengono convertiti nelle parole chiave appropriate nel codice C#. Ad esempio, se si imposta la proprietà Is Static su una classe, la classe C# sarà static.
Per impostare queste proprietà aggiuntive, selezionare la classe o un altro elemento nel diagramma. Nella finestra Proprietà espandere Stereotypes, quindi espandere lo stereotipo C#, ad esempio Classe C#. Per le classi, tali proprietà aggiuntive includono:
CLR Attributes
Is Partial
Is Static
Is Unsafe
Package Visibility
Ogni attributo e operazione dispone di proprietà di stereotipo che è possibile impostare. Se per un nuovo attributo non sono visualizzate le relative proprietà, eseguire Genera codice.
Personalizzazione del comando Genera codice
Il comando Genera codice comporta la trasformazione degli elementi del modello mediante un set di modelli di testo. Per ulteriori informazioni sui modelli di testo, vedere Generazione di codice e modelli di testo (T4).
I modelli vengono specificati in un set di associazioni a modello di testo. Un'associazione a modello di testo specifica il modello da applicare, la destinazione dell'output che verrà generato e gli altri parametri del comando Genera codice.
Alla prima esecuzione per un particolare modello, il comando Genera codice collega un set predefinito di associazioni a modello alla radice del modello. Queste associazioni si applicano a tutti gli elementi del modello.
Tuttavia, è possibile eseguire l'override e aggiungere, a queste associazioni predefinite, associazioni personalizzate a pacchetti, classi o altri elementi. Un'associazione si applica a tutti gli elementi contenuti nell'elemento a cui è collegata. Ad esempio, se si desidera che tutti i tipi contenuti in un particolare pacchetto vengano trasformati in base a un differente set di modelli o che vengano estratti in una diversa cartella, è possibile collegare le associazioni a modello al pacchetto.
Per controllare le associazioni a modello collegate a un elemento del modello, fare clic sul pulsante con i puntini di sospensione [...] nella proprietà Text Template Bindings nella finestra Proprietà.
Il comando Genera codice applica i modelli a ciascun elemento del modello selezionato. Per ogni elemento, il set di modelli applicato è il set combinato dei modelli associati ai relativi contenitori, fino alla radice del modello inclusa.
Se due associazioni a modello in questo set hanno lo stesso nome, l'associazione nel contenitore più piccolo esegue l'override dell'associazione nel contenitore più grande. Ad esempio, la radice del modello contiene un'associazione denominata Class Template. Per assicurarsi che il modello personalizzato venga applicato al contenuto di un particolare pacchetto, definire l'associazione a modello personalizzata denominata Class Template.
È possibile applicare più modelli a un elemento del modello, nonché generare più file da ciascun elemento del modello.
Nota
Le associazioni collegate alla radice del modello fungono da associazioni predefinite per tutti gli elementi del modello. Per visualizzare queste associazioni predefinite, fare clic con il pulsante destro del mouse sulla superficie del diagramma e scegliere Configura impostazioni predefinite di generazione codice. In alternativa, è possibile selezionare la radice del modello in Esplora modelli UML e fare clic sul pulsante con i puntini di sospensione […] nella proprietà Text Template Bindings. Le associazioni non verranno visualizzate finché non si sia utilizzato il comando Genera codice almeno una volta. Non è possibile collegare associazioni a modello a un diagramma.
Per collegare associazioni a modello di testo a un pacchetto o a un altro elemento del modello
In Esplora modelli UML fare clic con il pulsante destro del mouse su un elemento del modello e scegliere Proprietà. In genere, le associazioni a modello di testo vengono collegate a un pacchetto o alla radice del modello.
Nella finestra Proprietà fare clic sul pulsante con i puntini di sospensione ([…]) nella proprietà Text Template Bindings.
Verrà visualizzata la finestra di dialogo Text Template Bindings.
Fare clic su Aggiungi per creare una nuova associazione a modello di testo.
- oppure -
Fare clic su un'associazione esistente per modificarla.
Ogni associazione a modello definisce la modalità di applicazione di un modello specificato all'elemento del modello selezionato e agli altri elementi in questo contenuti.
Nella finestra di dialogo, impostare le proprietà dell'associazione a modello di testo.
Proprietà
Descrizione
Name
Nome per l'associazione. Per eseguire l'override di un'associazione ereditata da un pacchetto o da un modello che la contiene, utilizzare lo stesso nome dell'associazione di cui si desidera eseguire l'override.
Overwrite
Se true, il codice esistente viene sovrascritto.
Target Name
Nome del file generato.
È possibile inserire in questa stringa espressioni quali {Name} o {Owner.Name}. Ad esempio, è possibile scrivere {Owner.Name}_{Name}. L'espressione viene valutata sull'elemento del modello e può utilizzare proprietà di elementi, ma non metodi. Per individuare le proprietà che possono essere utilizzate, verificare le proprietà dei tipi in Microsoft.VisualStudio.Uml. *.
ImportanteL'espressione {Name} o {Owner.Name} può essere utilizzata solo nella proprietà Target Name.Per modificare il nome della classe generata, è necessario modificare il modello.Per ulteriori informazioni, vedere Scrittura di un modello di testo.Project Path
Specifica il percorso del progetto di Visual Studio che conterrà i file di output della trasformazione. Utilizzare valori tipizzati per creare un nuovo progetto. Fare clic sul pulsante con i puntini di sospensione ([…]) per selezionare un progetto esistente.
Se non esiste alcun progetto, verrà creato un nuovo progetto Libreria di classi C#.
A questo scopo, è necessario digitare direttamente il progetto. È possibile includere macro di variabili di ambiente quali %ProgramFiles% o %LocalAppData%.
Target Directory
Cartella in cui viene generato il file di destinazione. Il percorso è relativo alla cartella del progetto.
È possibile utilizzare l'espressione {PackageStructure} per inserire un percorso che corrisponde ai nomi dei pacchetti contenitore. Il valore predefinito è \GeneratedCode\{PackageStructure}. È anche possibile includere variabili di ambiente quali %TEMP% o %HomePath%.
ImportanteL'espressione {PackageStructure} può essere utilizzata solo nella proprietà Target Directory.Template Filename
Modello che eseguirà la trasformazione.
È possibile utilizzare i modelli forniti o crearne di personalizzati. I modelli forniti sono disponibili nei seguenti percorsi:
Feature Pack di visualizzazione e modellazione di Visual Studio 2010: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<NomeFeaturePackVisualStudio>\1.0\Templates\Text\
Suggerimento%LocalAppData% corrisponde in genere a NomeUnità:\Users\NomeUtente\AppData\Local.In Windows XP e Windows 2003, utilizzare %AppData% anziché %LocalAppData%.Visual Studio 2010 Feature Pack 2: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<NomeFeaturePackVisualStudio>\<NumeroVersioneFeaturePackVisualStudio>
È possibile collegare a un elemento il numero di associazioni desiderato.
Scrittura di un modello di testo
È possibile scrivere modelli di testo personalizzati. I modelli di testo possono generare codice programma o qualsiasi altro tipo di file di testo.
Si consiglia di iniziare modificando copie dei modelli standard. È possibile copiare i modelli dai seguenti percorsi:
Feature Pack di visualizzazione e modellazione di Visual Studio 2010: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<NomeFeaturePackVisualStudio>\1.0\Templates\Text\
Suggerimento %LocalAppData% corrisponde in genere a NomeUnità:\Users\NomeUtente\AppData\Local. In Windows XP e Windows 2003, utilizzare %AppData% anziché %LocalAppData%.
Visual Studio 2010 Feature Pack 2: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<NomeFeaturePackVisualStudio>\<NumeroVersioneFeaturePackVisualStudio>
Per comprendere i modelli di testo, fare riferimento agli argomenti seguenti.
Un modello di testo è un prototipo del file risultante e contiene sia il testo risultante che il codice programma che legge il modello. Per ulteriori informazioni, vedere Generazione di codice e modelli di testo (T4).
Per esplorare il modello UML nel codice programma, è necessario utilizzare l'API UML. Per ulteriori informazioni, vedere Procedura: esplorare il modello UML e Riferimento API per l'estensibilità di modellazione UML.
Per utilizzare i modelli con il comando Genera codice, è necessario includere la direttiva Modeling. Di seguito è riportato un esempio:
<#@ Modeling ElementType="Microsoft.VisualStudio.Uml.Classes.IClass" Processor="ModelingProcessor" #>
L'attributo ElementType definisce il tipo di elemento UML al quale si applica il modello.
Nel modello, this appartiene a una classe temporanea che dispone delle proprietà seguenti:
Element corrisponde all'oggetto IElement a cui viene applicato il modello.
Errors: CompilerErrorCollection
Host: ITextTemplatingEngineHost
ModelBus: ModelBus. Per ulteriori informazioni, vedere Procedura: integrare i modelli UML con altri modelli e strumenti.
ProfileName corrisponde a "C#Profile".
ServiceProvider: IServiceProvider
Session: TextTemplatingSession.
Store: Store. Si tratta dell'archivio dell'SDK di visualizzazione e modellazione sul quale viene implementato l'oggetto UML ModelStore. Per ottenere l'oggetto UML IModelStore, utilizzare this.Element.GetModelStore().
Le informazioni riportate di seguito possono risultare utili durante la scrittura di un modello di testo. Per maggiori dettagli, vedere Generazione di codice e modelli di testo (T4).
Per eseguire il debug di un modello di testo, inserire quanto segue all'interno di un segmento dell'istruzione: System.Diagnostics.Debugger.Launch();
È possibile impostare l'estensione del file risultante nella direttiva Output. Una direttiva Output è richiesta in ogni modello di testo.
Ad alcuni assembly viene fatto automaticamente riferimento nel modello. Tali assembly includono, ad esempio, System.dll e Microsoft.VisualStudio.Uml.Interfaces.dll.
Per utilizzare altri assembly nel codice programma generatore, è necessario utilizzare una direttiva Assembly. Di seguito è riportato un esempio:
<#@ Assembly Name="%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll" #>
Alcuni spazi dei nomi quali System vengono importati automaticamente nel codice programma. Per altri spazi dei nomi, è possibile utilizzare la direttiva Import in modo analogo a un'istruzione using. Di seguito è riportato un esempio:
<#@ Import Namespace="Microsoft.VisualStudio.Uml.Classes" #>
<#@ Import Namespace="Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml" #>
Utilizzare la direttiva Include per fare riferimento al testo di un altro file.
Le parti del modello racchiuse tra parentesi <# ... #> vengono eseguite dal comando Genera codice. Le parti del modello esterne a tali parentesi vengono copiate nel file risultante. È importante distinguere tra il codice generatore e il testo generato. Il testo generato può essere in qualsiasi linguaggio.
Le parti <#= Expressions #> vengono valutate e convertite in stringhe.
Vedere anche
Concetti
Diagrammi classi UML: riferimento
Diagrammi classi UML: linee guida
Procedura: generare file da un modello UML
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Dicembre 2010 |
Contenuto aggiornato per Visual Studio 2010 Feature Pack 2. |
Miglioramento delle informazioni. |