簡體   English   中英

我如何去實現一個奇怪的“類”符號

[英]How do I go about implementing a strange "class" notation

我正在用 C++ 編寫一個過度設計的矩陣計算器,但不知道這意味着什么:

在此處輸入圖片說明

我以前從未在類圖中看到過類似帶有 Valuation = std::map 的框的東西,也不知道要查找什么。 我是把它寫成構造函數還是什么? 為什么 IntElement 和 Valuation 之間沒有聯系,即使 IntElement Clearly 使用了它?

我現在在標題中有這個是圖表要查找的內容嗎?

class Valuation{

    Valuation(std::map<char,int>);

};

在沒有更多上下文的情況下,很難說這條線會去哪里,但Valuation框看起來像請求這樣的線:

using Valuation = std::map<char,int>;

即,將Valuation定義為某個地圖的別名。 基於“合理”的設計,我希望這條線出現在VariableElementIntElement的公共父類中,可能作為受保護的 typedef。 但是,我在圖中沒有看到任何暗示這一點的內容。

我沒有看到足夠的上下文來猜測為什么從IntElementValuation沒有“使用”行。 考慮到evaluate成員, IntElementVariableElement在這IntElement似乎處於同等地位。 另一方面,我會質疑為什么現有的行連接到VariableElement而不是應該定義別名的假設的公共父級。 這可能是需要向圖表作者提出的問題。 (有時人們會犯錯,即使是教授。)

附錄:我想到了IntElement::evaluateVariableElement::evaluate之間的區別。 可能是前者忽略了它的參數,因此除了類型的名稱之外,它並沒有真正使用Valuation 另一方面,后者可能會在地圖中查找一個條目,因此實現需要Valuation是一個完整的類型。 這是一個可能的動機,盡管我發現這樣的實現細節影響類圖是有問題的。

讓我們看看 UML 2.5 規范是怎么說的。

9.2.4.1 分類器(第 99 頁)

分類器的默認符號是一個包含分類器名稱的實線矩形,並在名稱下方用水平線分隔隔間。 分類器的名稱應以粗體居中。 對於那些區分大小寫字符的語言,分類器名稱應以大寫字符開頭。

我在 UML 規范中找不到任何將名稱限制為任何給定(unicode)字符集的點。 也許是因為你需要另一本書。 所以我們可以從上面得到的是

Valuation = std::map<char,int>

是與 eg 相同的標識符

wiec8736b(/&& 3l?!blurb

將是一個(奇怪的)標識符。 但絕不是某些運算符子句,您可以將字符=解釋為賦值或相等。

tl;dr這是垃圾。 去問問作者他是什么意思。 告訴他使用注釋和可理解的文本描述或堅持使用有效的 UML 符號。


作為旁注:該 UML 圖的作者在操作隔間中使用了一個未定義的符號。

9.6.4 符號(第 115 頁)

如果顯示在圖表中,則操作顯示為以下形式的文本字符串:

 [<visibility>] <name> '(' [<parameter-list>] ')' [':' [<return-type>] ['[' <multiplicity-range> ']'] ['{' <oper-property> [',' <oper-property>]* '}']]

在哪里:

  • <visibility>是操作的可見性(見 7.4)。

    <visibility> ::= '+' | '-' | '#' | '~'

/是沒有定義的可見性。 很可能作者自由地使用//作為評論的常見用法。 這可能是可以接受的,但它不會呈現有效的 UML。

作為第二個注意事項:右上角的n*n看起來也很可疑。 它可能是多重性的,並且在該格式中也是無效的。 但這只是猜測。

暫無
暫無

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

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