我正在用C ++写一个过度设计的矩阵计算器,不知道这意味着什么:
我以前从未在类图中看到类似Valuation = std :: map的框,也不知道该查找什么。我将其编写为构造函数还是什么?为什么即使IntElement明确使用IntElement和Valuation也没有联系?
我现在在标题中有这个,它是该图所寻找的吗?
class Valuation{
Valuation(std::map<char,int>);
};
很难说这行在没有更多上下文的情况下会走到哪里,但是Valuation
框看起来像是在请求这样的行:
using Valuation = std::map<char,int>;
即,将Valuation
定义为特定映射的别名。基于“合理”的设计,我希望这一行可以在VariableElement
和IntElement
的公共父类中使用,可能作为受保护的typedef。但是,我在图中没有看到任何建议。
我没有看到足够的上下文来猜测为什么从IntElement
到Valuation
没有“使用”行。在给定IntElement
成员的情况下,VariableElement
和evaluate
似乎都处在平等的地位。另一方面,我会质疑为什么现有的线连接到VariableElement
而不是连接到应该定义别名的假定的公共父级。这可能是关系图作者提出的。 (有时人们会犯错误,甚至是教授。)
附录:我曾想过IntElement::evaluate
和VariableElement::evaluate
之间的区别。前者可能会忽略其参数,因此它实际上并没有使用Valuation
作为类型名称。另一方面,后者可能会在映射中查找条目,因此实现需要Valuation
为完整类型。这是一种可能的动机,即使我发现这样的实现细节影响类图也令人怀疑。
让我们看看UML 2.5规范怎么说。
9.2.4.1分类器 ((p。99)] >>
分类器的默认符号是一个实线轮廓矩形,其中包含分类器的名称,并在名称下方用水平线分隔各个分隔间。分类器的名称应以粗体居中。对于区分大写和小写字符的语言,分类器名称应以大写字符开头。
我在UML规范中找不到任何将名称限制为任何给定的(unicode)字符集的地方。可能是因为您需要另一本书。因此,我们可以从上面得到的是
Valuation = std::map<char,int>
是与例如相同的标识符
wiec8736b(/&& 3l?!blurb
将是(奇怪的)标识符。但是绝不会是某个运算符子句,您可以在其中将字符=
解释为赋值或相等。
tl; dr
这是垃圾。去问一下作者是什么意思。告诉他使用评论和易于理解的文字描述,或使用有效的UML表示法。