2010-01-17 14 views
8

ho la seguente interfaccia:Rappresentando un C# metodo generico in una classe UML Diagram

public interface IRegisterable 
{ 
    T Register<T>(string username, string passw) where T : User, ICanLogin, new(); 
} 

User è una classe astratta, e ICanLogin è un'altra interfaccia.

Ora, voglio rappresentare l'interfaccia precedente con il suo metodo in un diagramma di classe UML, in Visio.

Come si può rappresentare il metodo generico precedente con i suoi vincoli in un diagramma di classe?

risposta

3

UML non supporta direttamente di tipo metodi parametrici.

Il valore più vicino che si ottiene è definire una classe nidificata che abbia i vincoli di tipo con uno stereotipo che verrà interpretato nel senso che è un parametro di tipo e definire l'operazione Register in termini di ciò.

+---------------------------------------------------+ 
|     «interface»      | 
|     IRegisterable     | 
+---------------------------------------------------+ 
| + Register (string username, string passw) : T | 
+---------------------------------------------------+ 

    +---------------+   +---------------+ 
    | «abstract» |   | «interface» | 
    |  User  |   | ICanLogin | 
    +---------------+   +---------------+ 
      .       . 
      /_\       /_\ 
      |       . 
      +-----------+ ............. 
         | . 
       +-------------------+    
       | «typeParameter» | 
       | IRegisterable::T | 
       +-------------------+   
       | + new()   | 
       +-------------------+   

    note: T is a nested class within IRegisterable 
1

UML FA supporto tipi parametrici (altre cose possono essere parametrizzati pure, e cose diverse tipologie possono essere utilizzati come parametri pure).

+1

Potresti citare qualche "fonte affidabile" per questo? Sono solo curioso di saperne di più, in particolare sull'uso di "cose ​​diverse dai tipi [...] anche come parametri" –

+0

Per metodi e Non classi? –

+0

Vedere questo post del blog come "[Note sulle scogliere] (https://blog.abstratt.com/2007/11/01/uml-101-the-templates-package/)", il API UML2 javadoc (a partire da [TemplateableElement] (http://download.eclipse.org/modeling/mdt/uml2/javadoc/5.0.0/org/eclipse/uml2/uml/TemplateableElement.html)) e cerca [ Specifiche UML] (http://www.omg.org/spec/UML/) per le stringhe TemplateableElement, TemplateSignature, TemplateParameter, ClassifierTemplateParameter, OperationTemplateParameter. –