我正在尝试为我的 android 应用绘制状态机图。许多网站和书籍都说它显示了各种对象之间的转换。但是,由于缺乏 UML 知识,我无法理解对象的确切含义。
在https://www.uml-diagrams.org/object.html中, 对象是类的实例。
那么对象是指代码中特定类的实例还是整个系统?我对此感到困惑。你能给我一个关于对象的例子吗?
答案 0 :(得分:1)
一个对象在 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
在此示例中,您可以看到状态机状态可以(并且大部分将)对应于一组(可能很大)对象状态。