7

使用 UML,我如何A< Foo >在下面的代码中表示?

template< class T > 
class A : public T
{
    /* ... */
};

class Foo { };

A< Foo > a_foo;

像这样的事情(为可怜的 ascii 艺术道歉......和​​Jon Skeet)是我的第一个猜测,但我怀疑它是不正确的。

            ________________
            |              |
            |              |
            |     Foo      |
            |              |
            |______________|
             /:\  /|\
«bind»(Foo)   :    |
              :    |   .......               
            __:____|___:  T  :
            |          :.....:
            |              |
            |      A       |
            |              |
            |______________|
4

2 回答 2

2

UML 设计者有一个提议,但它还不是标准的一部分。

如果没有任何模板参数,则类型为“A”的对象“a”可能是这样的:

+--------------------+
|        a: A        | 
+--------------------+
| [+] doSomething(); |
+--------------------+

对象“a”是“a”的模板,类型参数为“Foo”,可以这样表示:

                  +-----+
+-----------------| Foo |
|                 +-----+
|        a: A        | 
+--------------------+
| [+] doSomething(); |
+--------------------+

请注意,在 UML 中,当您声明一个类时,它们由矩形表示,而特定对象(例如“a”)则由圆角矩形表示。有些人和工具不遵循“圆角”规范。

干杯。

于 2012-07-12T20:59:26.433 回答
2

我不太确定这是否完全标准,但是当我尝试使用 Enterprise Architect 对其进行逆向工程时,这是您的“A”类的定义:

      +---------+
+-----| T:class |
|     +---------+
|        T |
|   A      |
+----------+
|          |
+----------+

只需添加模板参数的名称作为类的父名称。

于 2013-06-17T21:38:26.497 回答