2012-07-12 23 views
5

UML'yi kullanarak, aşağıdaki kodda A<Foo>'u nasıl temsil edebilirim?UML'de şablon parametresinden mirasımı nasıl temsil edebilirim?

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

class Foo { }; 

A<Foo> a_foo; 

Böyle bir şey (kötü ASCII sanat için özür ... ve Jon Skeet kadar) benim ilk tahminim, ama doğru değil şüpheli.

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

CRTP, mirasçının kendisini şablon parametresi olarak geçirdiği bir şablon sınıfından miras alan bir sınıfı açıklamıyor mu? Bu durumda genelleme linki ters yöne sahip olmalıdır. Gösterilen bağlama bağımlılığı doğru IMHO'dur. –

+0

@ g-makulik - haklısınız (aşağıda Luchiane'nin işaret ettiği gibi). Başlığı değiştirdim. – PaulH

+0

@Luc Touraille - iyi başlık. :) – PaulH

cevap

1

U.M.L. tasarımcıları, ancak, henüz standardın bir parçası değil.

herhangi bir şablon parametreleri, nesne "a" tipi "A", böyle olabilir yoktu, varsa:

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

"a bir şablondur nesne "a", "tipi parametresi ile 'fan', bu gibi temsil edilebilir: bir sınıf bildirirken, uml olarak, bunlar, bir dikdörtgen ile ifade edilen

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

Not, belirli nesneler ise, bu tür" bir ", yuvarlak köşeli dikdörtgen ile temsil edilir. Bazı kullanıcılar, & araçları "yuvarlak köşeler" spesifikasyonunu takip etmemektedir.

Şerefe.

+0

Bu ilişkiyi bugün temsil etmenin standart bir yolu yok mu? Ayrıca merak ediyorum, UML için kullanmak istediğiniz özel bir aracınız var mı? Şu an MS Visio kullanıyorum ve hiçbir şekilde onunla evli değilim. – PaulH

+0

@PaulH: Hayır, belirli bir aletim yok. Rational Rose (UML Authors araçları), Umbrello ve diğer araçlar ile başladım, ancak para ya da araç değil, sınırlamalar nedeniyle Power Point, Visio & Libre Office Draw (Visio'nun Açık Kaynak Versiyonu) kullanarak sona erdi: -s – umlcat

1

Ben bu mükemmel standarttır ama bu Enterprise Architect kullanarak ters mühendislik çalıştı "A" sınıfı tanımı ise oldukça emin değil:

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

sadece şablonun adını ekleyin sınıfın üst adı olarak parametre.

İlgili konular