2012-07-12 127 views
5

使用UML,我如何在以下代碼中表示A<Foo>如何在UML中表示從模板參數的繼承?

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

class Foo { }; 

A<Foo> a_foo; 

像這樣的東西(道歉的ASCII藝術差...和Jon Skeet)是我的第一個猜測,但我懷疑這是不正確的。

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

不是CRTP描述了從模板類繼承的類,其中繼承器將自身作爲模板參數傳遞?在這種情況下,泛化鏈接應該有相反的方向。顯示的綁定依賴關係是正確的。 – 2012-07-12 14:09:59

+0

@ g-makulik - 你是對的(正如Luchiane指出的那樣)。我修改了標題。 – PaulH 2012-07-12 14:12:43

+0

@Luc Touraille - 好標題。 :) – PaulH 2012-07-12 21:43:01

回答

1

有一個提案,由聯合王國。設計師,但是,它不是標準的一部分。

如果,有沒有任何模板參數,對象「A」型的「A」,可能是這樣的:

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

對象「一」,誰是「一模板「與類型參數‘foo’的,可以被表示如下:

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

注意,即,在UML,在聲明類,它們是由一個矩形表示,而特定的對象,這樣的」一「,由具有圓角的矩形表示。有些人,&工具,不遵循「圓角」規範。

乾杯。

+0

因此,今天沒有標準的方式來表達這種關係? 另外,我很好奇,你有一個特定的工具,你喜歡用於UML?我現在正在使用MS Visio,我決不會嫁給它。 – PaulH 2012-07-12 21:39:56

+0

@PaulH:不,我沒有特定的工具。我從Rational Rose(UML Authors工具),Umbrello和其他工具入手,但是由於侷限性而不是金錢或工具,最終使用了Power Point,Visio和Libre Office Draw(Visio的開源版本):-s – umlcat 2012-07-13 14:33:08

1

我不太清楚,如果這是完美的標準,但是這是你的「A」級的,當我試圖扭轉使用Enterprise Architect的工程師定義它:

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

只需添加模板的名稱參數作爲類的父級名稱。