2012-07-12 38 views
5

Sử dụng UML, làm cách nào tôi có thể đại diện cho A<Foo> trong mã sau?Làm thế nào tôi có thể biểu diễn thừa kế từ tham số mẫu trong UML?

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

class Foo { }; 

A<Foo> a_foo; 

Something như thế này (xin lỗi cho nghệ thuật ascii nghèo ... và Jon Skeet) là đoán đầu tiên của tôi, nhưng tôi nghi ngờ nó không phải là chính xác.

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

CRTP không mô tả một lớp kế thừa từ một lớp mẫu, trong đó người thừa kế tự vượt qua như tham số mẫu? Trong trường hợp này, liên kết tổng quát nên có hướng ngược lại. Sự phụ thuộc ràng buộc được hiển thị là IMHO chính xác. –

+0

@ g-makulik - bạn đúng (như Luchiane đã chỉ ra bên dưới). Tôi đã sửa đổi tiêu đề. – PaulH

+0

@Luc Touraille - tiêu đề hay. :) – PaulH

Trả lời

1

Có đề xuất của U.M.L. nhà thiết kế, nhưng, nó không phải là một phần của tiêu chuẩn, được nêu ra.

Nếu, không có bất kỳ thông số mẫu, các đối tượng "một" của loại "A", có thể là như thế này:

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

Đối tượng "a", là người mẫu của "một "với tham số gõ 'Foo', có thể được biểu diễn như thế này:

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

Lưu ý, rằng, trong UML, khi bạn khai báo một lớp học, họ được đại diện bởi một hình chữ nhật, trong khi đối tượng cụ thể, chẳng hạn" một ", được thể hiện bằng hình chữ nhật với các góc tròn. Một số người, công cụ &, không tuân theo đặc điểm "góc tròn".

Chúc mừng.

+0

Vì vậy, không có cách tiêu chuẩn để đại diện cho mối quan hệ này ngày hôm nay? Ngoài ra, tôi tò mò, bạn có một công cụ cụ thể nào bạn muốn sử dụng cho UML không? Tôi đang sử dụng MS Visio ngay bây giờ và tôi không có nghĩa là kết hôn với nó. – PaulH

+0

@PaulH: Không, tôi không có một công cụ cụ thể nào. Tôi bắt đầu với Rational Rose (công cụ tác giả UML), Umbrello và các công cụ khác, nhưng đã kết thúc bằng Power Point, Visio & Libre Office Draw (Phiên bản nguồn mở của Visio), vì giới hạn, không phải tiền hoặc công cụ: -s – umlcat

1

Tôi không hoàn toàn chắc chắn nếu điều này là hoàn toàn chuẩn nhưng đây là định nghĩa của lớp học "A" của bạn khi tôi đã cố gắng để thiết kế đối chiếu nó bằng cách sử Enterprise Architect:

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

chỉ cần thêm tên của mẫu tham số làm tên cha của lớp.

Các vấn đề liên quan