2012-07-12 12 views
5

UML, jak mogę reprezentować A<Foo> w poniższym kodzie?Jak mogę reprezentować dziedziczenie z parametru szablonu w języku UML?

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

class Foo { }; 

A<Foo> a_foo; 

Coś tak (przepraszam za słabą ASCII Art ... i Jon Skeet) jest mój pierwszy przypuszczenie, ale podejrzewam, że nie jest prawidłowe.

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

Czy CRTP nie opisuje klasy dziedziczącej z klasy szablonu, w której dziedziczy się jako parametr szablonu? W takim przypadku łącze generalizacyjne powinno mieć przeciwny kierunek. Pokazana zależność powiązania jest poprawna IMHO. –

+0

@ g-makulik - masz rację (jak Luchiane wskazał poniżej). Zmodyfikowałem tytuł. – PaulH

+0

@Luc Touraille - dobry tytuł. :) – PaulH

Odpowiedz

1

Istnieje propozycja, przez U.M.L. projektantów, ale nie jest to jeszcze częścią standardu.

Jeśli nie było żadnych parametrów szablonu, obiekt „a” Typ „A” może być tak:

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

Obiekt „A”, który jest szablonem „a „z parametrem typu«Foo», mogą być reprezentowane tak:

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

nocie, że w UML, kiedy zadeklarować klasę, są one reprezentowane przez prostokąta, a konkretnych obiektów, takich” a ", są reprezentowane przez prostokąt z zaokrąglonymi rogami. Niektóre osoby, narzędzia &, nie są zgodne ze specyfikacją "zaokrąglone rogi".

Pozdrawiam.

+0

Więc nie ma standardowego sposobu reprezentowania tego związku dzisiaj? Jestem także ciekawy, czy posiadasz specjalne narzędzie, którego chcesz używać w UML? Używam teraz MS Visio i nie jestem w żadnym razie poślubiony. – PaulH

+0

@PaulH: Nie, nie mam konkretnego narzędzia. Zacząłem od Rational Rose (narzędzia UML Authors), Umbrello i innych narzędzi, ale skończyłem używając Power Point, Visio i Libre Office Draw (Open Source Version Visio), z powodu ograniczeń, nie pieniędzy i narzędzi: -s – umlcat

1

Nie jestem pewien, czy to jest doskonale standardzie, ale to jest definicja klasy „A”, gdy próbowałem inżynierii wstecznej go za pomocą Enterprise Architect:

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

tylko dodać nazwę szablonu parametr jako nazwa nadrzędna klasy.

Powiązane problemy