Uml 如何使用枚举值作为状态图状态?
我希望状态图状态是给定枚举类型的值。在第二步中,我想使用状态图作为前面提到的枚举类型属性的约束,例如,在属性的setter中作为参数检查。枚举属性在UML中表示如下:Uml 如何使用枚举值作为状态图状态?,uml,Uml,我希望状态图状态是给定枚举类型的值。在第二步中,我想使用状态图作为前面提到的枚举类型属性的约束,例如,在属性的setter中作为参数检查。枚举属性在UML中表示如下: _______________________ | <<enumeration>> | | DaysOfTheWeek | |_____________________| | Sunday | | Monday | | Tuesday
_______________________
| <<enumeration>> |
| DaysOfTheWeek |
|_____________________|
| Sunday |
| Monday |
| Tuesday |
| ... |
|_____________________|
_______________________
| |
|星期一|
|_____________________|
|星期天|
|星期一|
|星期二|
| ... |
|_____________________|
然后,您可以在枚举和状态图之间绘制关联
希望这有帮助枚举属性在UML中表示如下:
_______________________
| <<enumeration>> |
| DaysOfTheWeek |
|_____________________|
| Sunday |
| Monday |
| Tuesday |
| ... |
|_____________________|
_______________________
| |
|星期一|
|_____________________|
|星期天|
|星期一|
|星期二|
| ... |
|_____________________|
然后,您可以在枚举和状态图之间绘制关联
希望这对您有所帮助我不知道您的具体实现,但我会将您重定向到状态机模式,这是实现状态机的一种非常优雅的方式。Cf,维基百科页面:
我不知道您的具体实现,但我会将您重定向到状态机模式,这是实现状态机的一种非常优雅的方式。Cf,维基百科页面:
在某些工具中,您可以单击枚举>创建状态图。这意味着状态图将在UML模型树中枚举的根处创建。因此,状态图将具有enum属性。在某些工具中,您可以单击enum>创建状态图。这意味着状态图将在UML模型树中枚举的根处创建。因此,状态图将具有enum属性。仍然不能确定我是否完全理解您试图实现的目标。然而,这里有一些想法,希望它们有用。如果我没抓住要点,我道歉 第一个问题是:为什么希望枚举值和状态同构?从最普遍的意义上讲,这就是复制信息。而且复制的信息有一个不同步的习惯。因此,了解动机是很有用的 尽管如此,这里还是有一些可能性 1。UML/建模透视图 在UML世界中,不需要同时拥有一个状态模型和一个与之关联的枚举。UML通常不定义如何读取对象当前状态的值;但是,某些配置文件(例如)确实如此。在可执行UML中,任何具有状态机的类都会自动获取名为
current\u state
的只读属性。当前状态的可能值是状态模型中状态的名称。因此,您可以将其视为定义隐式枚举的状态机
注意,该属性是只读的。这是因为改变它的唯一方法是通过状态机,即通过向对象发送事件。因此,它也满足了您的第二个要求:不可能以违反状态机协议的方式更改当前_state
变量的值
即使您没有使用可执行的UML概要文件(或类似文件),将上述内容作为规则/约定来陈述也是完全有效的。如果有必要,您可以定义自己的配置文件,尽管这可能有点过分——这取决于您的环境
关键的一点是,枚举在建模世界中是不必要的
2。代码透视图
在将模型转换为代码时,枚举是定义当前状态变量类型的一种合理且常用的方法。根据建模场景,您希望将current_state
属性设置为外部世界只读。然后,您还需要三件事:
当前_状态
变量当前_state
变量设置为外部只读来防止其无效序列。也就是说,您只有一个公共读访问器:没有公共写访问器
在类内部,将写访问器设置为私有,并确保调用它的唯一位置是在状态机实现中
您提供与驱动状态机的事件对应的公共方法,而不是公共写访问器。下面是关于实现状态机的更多详细信息,但这里有一个简单的示例:
class Phone {
enum PhoneState {disconnected, connecting, connected, disconnecting};
public PhoneState current_state {get}; //no write accessor
//functions for generating state machine events
public void digit(int number) {..} //press digit key, e.g. while dialing
public void connect() {..} //make connection
public void disconnect() {..} //disconnect
}
实现状态机
实现状态机有3种常见模式:
1.状态矩阵或查找表
2.嵌套开关
3.状态模式
对(1)有很好的概述;(2) 和(3)包括在内
基本上就是这样。我不太确定我是否回答了你的问题。如果不道歉,也许你可以更具体地说明你想要实现的目标
嗯。我仍然不确定我是否完全理解你想要实现的目标。然而,这里有一些想法,希望它们有用。如果我没抓住要点,我道歉 第一个问题是:为什么希望枚举值和状态同构?从最普遍的意义上讲,这就是复制信息。而且复制的信息有一个不同步的习惯。因此,了解动机是很有用的 尽管如此,这里还是有一些可能性 1。UML/建模透视图 在UML世界中,不需要同时拥有一个状态模型和一个与之关联的枚举。UML通常不定义如何读取对象当前状态的值;但是,某些配置文件(例如)确实如此。在前