【问题标题】:How do I represent the type of an argument in a UML class diagram, when the argument is a function?当参数是函数时,如何在 UML 类图中表示参数的类型?
【发布时间】:2021-05-08 23:37:44
【问题描述】:

例如,一个类有一个方法compute()(为了清楚起见,使用 Python 语法并删除了 self 参数):

def compute(computation_fn):
    return computation_fn(5)

假设computation_fn 将int 映射到int。在 UML 类图中,我应该这样写吗?

+ compute(computation_fn: (num: int): int): int

如果这已经在某个地方得到了回答,只需删除一个链接!我一直在寻找答案。

【问题讨论】:

  • 您应该选择 Christophe 的回答。不过,我不会打扰太多。由于 Python 不是 100% OO(除了 Smalltalk 之外是哪种语言?)您可能可以“弯曲”UML 以满足您的需求 - 只要您在某处记录您是如何弯曲它的。

标签: function uml class-diagram


【解决方案1】:

UML 确实只有基本类型 IntegerBooleanStringUnlimitedNaturalReal

您还可以使用您在模型中定义的任何类作为类型。对此,您可以很好地定义一个class that corresponds to a kind of functions,例如FunctionOfIntToInt。在任何使用可调用对象的设计中,这都是常见的做法。

UML 还可以在配置文件中添加其他类型。很多时候,您会看到使用的您最喜欢的语言类型。这假定使用特定语言的配置文件。但通常它是固定的类型名称(例如DateUInt8、...)。您可以想象一个称为(int):int 的类型,但是对于已经使用: 的UML 语法,这将是模棱两可的。

不幸的是,UML 的类型系统中没有任何东西可以表示具有任意数量的灵活类型参数的函数。因此,这完全取决于您需要与 UML 的兼容程度:

  • Python 程序员可以理解您在图中使用的任何 Python 类型,包括函数类型,即使它不是“纯”UML。所以这将是务实的做法。尽管如此,我还是建议将返回类型的 : 替换为 -> 以避免词汇混淆
  • 但是,如果您必须按书行事,则配置文件不允许在现有 UML 机制之上组合类型的语法扩展。有一个解决方法。您可以使用 UML 模板类来表示函数。第一个参数是返回类型,其余模板参数是参数类型。然后,您将使用 UML 的本机 template binding 语法来实例化模板以用于输入目的。但我同意,它更笨拙(即使 C++ std::function template 的任何用户都觉得它很熟悉。

【讨论】:

  • 你应该使用拼写检查器 ;-)
  • 我总是想象你坐在一辆自行车上,在你的移动设备上点击答案xD
  • @qwerty_so 你成就了我的一天 :-) 我骑自行车时总是专注于道路。但是我在手机上输入了几个答案(但我没有这个借口);-)
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多