10

我有以下界面:

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

User是一个抽象类,ICanLogin是另一个接口。

现在,我想在 Visio 中的 UML 类图中用其方法表示上述接口。

如何在类图中表示上述通用方法及其约束?

4

3 回答 3

7

泛型类是 UML 中的模板类,请参阅用 UML 表示模板类的正确方法是什么?

所以你不能在 Visio 中使用你的参数化类http://etutorials.org/Programming/UML/Chapter+6.+Class+Diagrams+Advanced+Concepts/Parameterized+Class/

于 2010-01-17T13:51:05.280 回答
4

UML 不直接支持类型参数方法。

您将得到的最接近的方法是定义一个嵌套类,该类具有带有原型的类型约束,您将其解释为意味着它是类型参数,并据此定义Register操作。

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

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

    note: T is a nested class within IRegisterable
于 2010-01-18T13:19:48.347 回答
2

UML确实支持参数类型(其他东西也可以被参数化,除了类型之外的东西也可以用作参数)。

于 2010-12-27T20:09:42.580 回答