什么是状态机图中的对象?

时间:2021-05-19 11:36:05

标签: class object state uml state-machine

我正在尝试为我的 android 应用绘制状态机图。许多网站和书籍都说它显示了各种对象之间的转换。但是,由于缺乏 UML 知识,我无法理解对象的确切含义。

https://www.uml-diagrams.org/object.html中, 对象是类的实例。

那么对象是指代码中特定类的实例还是整个系统?我对此感到困惑。你能给我一个关于对象的例子吗?

1 个答案:

答案 0 :(得分:1)

UML 中的对象

一个对象在 UML 中定义如下:

<块引用>

分类器描述一组对象。 对象是具有状态和与其他对象关系的个体。对象的状态标识了该对象分类器的属性值。

但这很难把握:分类器的定义依赖于对象的概念,而对象的定义依赖于分类器的概念。较短的“对象是类的实例”无助于解决这个鸡和蛋的问题。

更难的是,这种观察物体的方式很适合class based programming,但不太适合prototype-based programming

更实用的对象

我不会试图解释数百本书中已经解释过的内容。让我们看一下 Grady Booch 的定义(他是 UML 的创始人之一):

<块引用>

对象:你可以做的事情。一个对象有状态、行为和身份;相似对象的结构和行为在它们的公共类中定义。术语实例和对象可以互换。

更妙的是,GoF 的定义非常幼稚但非常有用:

<块引用>

对象同时封装数据和操作该数据的过程。

状态

“状态”是一个模棱两可的术语,在“对象状态”和“状态机的状态”中使用时可能不是指同一现实。

对于对象来说,状态往往是指一个对象的所有数据。如果您保存和恢复一个对象的所有数据,您会期望它的操作会导致相同的结果和相同的行为。这通常是正确的,但并非总是如此。 Booch 更准确的定义是:

<块引用>

一个对象行为的累积结果;对象可能存在的可能条件之一(...)

状态机的一个状态的含义略有不同。状态不对应于单个对象状态,而是对应于一组可能的对象状态(单个对象、多个对象或整个系统的)。通常状态机状态用非常广泛的术语描述底层集合。例如,状态可以描述对象或组件的生命周期或操作(创建、初始化、使用中、存档、丢弃)中的一个阶段。

控制房间温度的状态机示例:

Named state (State machine)   Object state
TOO_COLD                      temp=12, min=16, max=19, power=1500
                              temp=13, min=16, max=19, power=1500
                              temp=15, min=16, max=19, power=900
RIGHT_TEMPERATURE             temp=16, min=16, max=19, power=100
                              temp=18, min=16, max=19, power=50                   
                              temp=19, min=16, max=19, power=50   
TOO_WARM                      temp=20, min=16, max=19, power=50
                              temp=21, min=16, max=19, power=0
                              temp=20, min=16, max=19, power=0
            

在此示例中,您可以看到状态机状态可以(并且大部分将)对应于一组(可能很大)对象状态。

相关问题