I have the following interface:
public interface IRegisterable
{
T Register<T>(string username, string passw) where T : User, ICanLogin, new();
}
User
is an abstract class, and ICanLogin
is another interface.
Now, I want to represent the above interface with its method in a UML Class Diagram, in Visio.
How can I represent the above generic method with its constraints in a Class Diagram ?
UML does not support type parametric methods directly.
About the closest you'll get is to define a nested class which has the type constraints with a stereotype which you will interpret as meaning it's a type parameter, and define the Register
operation in terms of that.
+---------------------------------------------------+
| «interface» |
| IRegisterable |
+---------------------------------------------------+
| + Register (string username, string passw) : T |
+---------------------------------------------------+
+---------------+ +---------------+
| «abstract» | | «interface» |
| User | | ICanLogin |
+---------------+ +---------------+
. .
/_\ /_\
| .
+-----------+ .............
| .
+-------------------+
| «typeParameter» |
| IRegisterable::T |
+-------------------+
| + new() |
+-------------------+
note: T is a nested class within IRegisterable
A generic class is a Template class in UML
see What is the correct way to represent template classes with UML?
So can't you use thye Parameterized Class in Visio http://etutorials.org/Programming/UML/Chapter+6.+Class+Diagrams+Advanced+Concepts/Parameterized+Class/
UML DOES support parametric types (other things can be parametrized as well, and things other than types can be used as parameters as well).