簡體   English   中英

模板 inheritance 的 UML 圖

[英]UML diagram for template inheritance

在我的庫的一個文件中,我有一個繼承自模板的 class。

我的代碼示例:

class data{ ... };
class dataA: public data{ ... };
class dataB: public data{ ... };

//inheritance from a template

template<typename dataHandler>
class myClass: public dataHandler{ ... };

我的代碼中的模板dataHandler可以是datadataAdataB

我想為 class myClass編寫一個 UML 圖,以明確 inheritance 來自先前的數據類型。

似乎它不能在 UML 中完成。 根據UML 規范

  1. Class是一種EncapsulatedClassifier分類器 - 第 11.4 條
  2. EncapsulatedClassifier是一種StructuredClassifier - 第 11.3 條
  3. StructuredClassifier是一種Classifier器 - 第 11.2 條
  4. Classifier器是一種TemplateableElement - 第 9.2 節
  5. TemplateableElement是一種Element - 第 7.3 節

因此Class不是一種TemplateParameter (第 7.3 節),而dataHandlerTemplateParameter的一個實例,而myClassClass的一個實例。

UML 模板的限制

您遇到的問題與 UML 處理用綁定元素替換模板參數的方式有關。 這主要是由符號而不是 inheritance 引起的。

事實上,如果你有一個只有組合的myClass

template<typename T>
class myClass { 
   T a;
   vector<T> v; 
   ...
}; 
using myClassDataA = myClass<dataA>;

您可以在 UML 中以自包含的方式表示它,模板參數僅在模板 class 中使用:

在此處輸入圖像描述

但據我所知,如果您想將 T 屬性顯示為關聯端,則無法模板化相同 class 的等效表達式:

在此處輸入圖像描述

對於 inheritance,同樣的問題:繼承的 class 在模板 class 之外。 但是在這里,沒有可以神奇地將其包含在模板框中的符號快捷方式。

視覺解決方法?

如果它主要用於 C++ 設計的圖形通信,您可以直觀地建議一組類都依賴於相同的模板參數。 在我上面的作文示例中,它看起來像:

在此處輸入圖像描述

對於您的 inheritance 情況,它將是:

在此處輸入圖像描述

但請記住, UML 中沒有為此定義語義 例如,沒有任何東西可以讓 UML 工具識別myClass<dataA>的所有成員,這些成員將從dataA繼承。 換句話說,沒有 UML 代碼生成器或工具能夠產生對模型有意義的東西,但是 C++ 程序員會完全理解你的意思。

更好的設計?

雖然您的模板構造非常強大,但它也很容易出錯,因為您可以對同一模板的實例化執行的操作取決於綁定。 這意味着對於模板的每個實例化,您都需要不同的測試用例。

所以值得提醒的是一般原則:

比 inheritance 更喜歡組合

因此,只需在您的模板 class 中創建一個dataHandler成員,並將所有處理程序應該通用的一組良好識別的操作轉發給該成員。 然后,您可以毫無困難地使用現有的 UML 語義在 UML 中 model 它。

我知道,它不是那么靈活; 但我認為操作轉發的小麻煩,將為您節省以后的很多麻煩。 如果您確實需要更大的靈活性,您還可以考慮使用 CRTP反轉 inheritance,但這次使用更清晰和明確的 UML 建模

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM