【问题标题】:only list attributes defined in the constructor of the class?只列出类的构造函数中定义的属性?
【发布时间】:2015-01-05 00:14:44
【问题描述】:

我在想,在 UML 的类图中,您创建一个类并指定其属性,您只需定义该类的所有属性,这些属性可以/应该在班级。 当我尝试使用视觉范例对我的 (python-) 代码进行逆向工程时,每个属性都显示在生成的类中(那些在构造函数中声明的和在类的其他方法中声明的)。

我想,这是视觉范式的错误。

有人可以告诉我,如果我的假设有误,或者 VP 代码生成器是否错误。提前致谢。

【问题讨论】:

  • 类属性列表和传递给类构造函数的参数列表是完全独立的概念。例如,如果程序员没有另外说明,某些语言(C++、TypeScript、...)会自动假定带有 0 个参数的空隐式构造函数。另见uml-diagrams.org/class-diagrams-overview.html。这是你要问的吗?
  • 谢谢,我仍在阅读该链接。但我并不是指传递给类构造函数的参数。我的意思是我在构造函数方法中创建“我自己”的属性。我想,我只将这些写在 uml 中的一个类的属性隔间中。还是隔间还必须包含我可能在类的不同方法中创建的类的每个属性。
  • 将您的 python 代码添加到问题和 VP 生成的类图的屏幕截图中,以更具体地说明您的问题。该类将使用/拥有的所有属性(无论它们何时出现在运行时)都应该在属性隔间中。 UML 类图应该表示类结构的静态不可变视图。这是你要问的吗?
  • 谢谢你,xmojmr。我认为,您的最后一条评论正是我正在寻找的答案。您可以将其发布为答案(从第二句话开始)。
  • 事后看来,这是一个愚蠢的问题。在那一刻,我不知何故没有看到,每个“变量”都是一个类的对象,即使它是原始数据类型之一。所以它们必须像其他组合或类聚合一样对待。

标签: python uml


【解决方案1】:

TL;DR Visual Paradigm 的逆向工程自动机在这方面似乎没问题。


Sparx Systems → UML 2 Tutorial → Class Diagram

类图

类图显示了任何面向对象系统的构建块。类图描绘了模型或模型的一部分的静态视图,描述了它具有的属性和行为,而不是详细说明实现操作的方法。类图在说明类和接口之间的关系时最有用。概括、聚合和关联在分别反映继承、组合或使用以及连接方面都很有价值......

Python 代码在运行时动态创建的属性的上下文中,我的翻译是该类将使用/拥有的所有属性(无论它们在运行时何时出现)都应该在属性隔间中。

UML Class Diagram 应该代表最大可能的内存结构(由称为类的块组成)的静态不可变(“编译时”)视图,然后落在进入UML Structure Diagrams 类别。

如果您想要记录(UML-way)某些属性在运行时收到明确定义的值那么您'd 需要使用一些属于UML Behavior Diagrams 类别的图表。

UML 类模型可以以非常动态和多态的方式转换为某些语言(例如 JavaScript)中的计算机可执行模型。这只是一个实现问题,UML 并不真正关心太多。 UML关心的主要是Platform-independent model (PIM)

【讨论】:

  • 感谢您的回答。但是如果你还没有在类和另一个类之间绘制一个组合,那么你只会在类的属性隔间中列出一个属性,这是相应属性的类型,对吧?我的意思是,对于每个属性,您必须在将其列在属性隔间和绘制关联之间做出选择,对吗?
  • @coffeekid 您可以将其显示为属性或链接或两者兼而有之。这个stackoverflow.com/a/27216132/2626313 似乎很相关。真正重要的是,如果在 UML 模型中(该工具用作“后端”的不可见事物,并且可以往返到另一个符合 XML Metadata Interchange (*.xmi) 格式的 UML 工具)中,关联是否被正确建模。我有时会使用工具代码生成功能从源代码的角度来查看模型。 Java 代码生成器通常非常接近
  • 再次感谢您。您评论中的最后一个提示也非常有帮助。 :-) 只是为了避免混淆,我必须补充一点,你不会称之为链接。因为链接是关联的实例。因此,一个关联连接两个类,一个链接将是两个对象之间的连接。
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多