在UML类图中,操作和构造函数之间是否有特定的区别?

4

我正在学习数据分析课程,我们正在学习 UML 类图。方法(operations)和构造函数的术语让我感到困惑。什么是方法和构造函数的区别?任何解释都将不胜感激。我还没弄明白这个问题,希望一些外部视角能够帮助我。谢谢!

1个回答

4
一些混淆有历史原因,其中一些术语只被部分定义(或根本没有定义)。当前的UML规范2.5在第114页上进行了定义:
9.6.3.1 操作
操作是接口、数据类型或类的行为特征。操作可以直接在其 featuringClassifiers 的实例上调用。操作指定了这些调用的名称、类型、参数和约束。这听起来有点像宣传语,但基本上这就是程序员所称的函数。
相比之下,在p.13上定义了方法(以前曾与操作交替使用):
例如,由类拥有的操作可能有一个相关的方法来定义它的详细行为。因此,方法是操作的“如何”,可以通过多种方式描述,例如状态机等。
最后,构造函数是在对象初始化期间执行的某个特定操作。在第15页上:
因此,当对分类器的实例化的详细行为进行建模时,建模者有责任确保建模的行为在对象创建后对具有默认值的任何属性进行适当的初始化。(这通常是通过将类的实例化行为封装在构造函数操作中来完成的——见子条款11.4——在这种情况下,属性的初始化成为构造函数的隐含后置条件。)

现在,如果您能解释为什么在序列图中,<<new>>(构造函数的调用?)是一个虚线箭头,而调用操作的消息(当它们是同步的时候,大多数都是)是实线箭头,我会更加理解它们之间的区别 :-) - Fuhrmanator
@Fuhrmanator 好吧,UML的设计师就是这样设计的。new不仅仅是消息,因为它在发送对象引用作为结果之前创建对象。所以这是一种“不同的风味”,他们决定通过使用不同的渲染来展示。 - qwerty_so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接