UML设计系列(1):状态机图

引子

第一次听到这个词时,我是有点奇怪的。什么是状态机呢?

考虑一个场景,在前面的用户登陆的时序图中

有一步是检查用户的合法性,这里面可能包括用户的账号的状态正常/异常。

那么,用户的状态可能有哪些呢?状态又是如何流转的呢?

找出可能的状态

假设用户状态为status,模拟一下用户在系统中的整个流程

  • 用户注册开始,输入注册信息(包括邮件地址);系统插入一条用户记录,状态为UNACTIVED;发送一封确认邮件到用户邮箱
  • 用户收到邮件,点击确认,更新状态为ACTIVED,注册成功
  • 用户异地登陆,系统监测到用户账户疑似被盗,紧急冻结,状态变为FROZEN
  • 用户申请解冻,状态又变为ACTIVED
  • 用户注销账号,状态变为CLOSED

用户状态找出来了,用图表示一下

但是这样光秃秃的几个状态是没有什么意义的,尝试着将它们串联起来

这样,似乎完成了一个简单的状态机。约定在首尾加上开始,结束符号。

但是有2个问题:

  1. 上面的状态机是按照每个状态推进的,会不会有其它状态推进的路径呢?有可能,比如用户激活后直接注销
  2. 上面的状态机都是正向推进的,有没有可能逆向的的?也有可能,比如设计成注销之后还可以再激活

状态机

一般用状态机图来表示单个对象的生命周期。也属于动态建模的一种。

理论上除了各种状态之外,还有一个初态节点

终态节点

及各个节点转换的转接关系,即箭头连线+上面的条件(发生状态转换时,对应的条件必须为真)

子状态

上面的状态如果要定义的更细一点(只为说明,不是真实案例)

  • 发送邮件成功,状态更新为SEND_MAIL_S
  • 发送邮件失败,状态更新为SEND_MAIL_F
  • 用户激活失败,状态更新为ACTIVED_FAILED
  • 用户激活成功,状态更新为ACTIVED

状态机可能为

可以发现,激活态的看起来有点复杂,用子状态来表示下

应用场景

状态机除了业务需求之外,有2个地方比较有用

  • 设计模式中的状态模式
  • 可以用作接口幂等
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录: 第一部分 基础知识 第1章 UML简介 3 1.1 在纷繁复杂中寻求解决问题的办法 3 1.2 UML的诞生 4 1.3 UML的组成 5 1.3.1 类 5 1.3.2 对象 6 1.3.3 用例 7 1.3.4 状态 7 1.3.5 顺序 8 1.3.6 活动 9 1.3.7 协作 10 1.3.8 构件 11 1.3.9 部署 11 1.4 其他特征 12 1.4.1 注释 12 1.4.2 关键字和构造型 12 1.5 UML 2.0中的新 13 1.5.1 组成结构 13 1.5.2 交互纵览 14 1.5.3 计时 15 1.5.4 有创新也有保留的包 15 1.6 为什么需要这么多种 16 1.7 这不仅仅是一系列 16 1.8 小结 17 1.9 常见问题解答 17 1.10 小测验和习题 18 1.10.1 小测验 18 1.10.2 习题 18 第2章 理解面向对象 20 2.1 无处不在的对象 20 2.2 一些面向对象的概念 22 2.2.1 抽象 22 2.2.2 继承 23 2.2.3 多态性 24 2.2.4 封装 24 2.2.5 消息传递 25 2.2.6 关联 26 2.2.7 聚集 27 2.3 意义 28 2.4 小结 29 2.5 常见问题解答 29 2.6 小测验和习题 30 第3章 运用面向对象 31 3.1 类的可视化表示 31 3.2 属性 32 3.3 操作 33 3.4 属性、操作和可视化表达 34 3.5 职责和约束 35 3.6 附加注释 36 3.7 类——应该做什么和如何识别它们 37 3.8 小结 39 3.9 常见问题解答 39 3.10 小测验和习题 39 3.10.1 小测验 39 3.10.2 习题 40 第4章 关系 41 4.1 关联 41 4.1.1 关联上的约束 42 4.1.2 关联类 43 4.1.3 链 43 4.2 多重性 43 4.3 限定关联 45 4.4 自身关联 45 4.5 继承和泛化 46 4.5.1 找出继承关系 47 4.5.2 抽象类 48 4.6 依赖 48 4.7 类和对象 49 4.8 小结 50 4.9 常见问题解答 51 4.10 小测验和习题 51 4.10.1 小测验 51 4.10.2 习题 51 第5章 聚集、组成、接口和实现 53 5.1 聚集 53 5.2 组成 54 5.3 组成结构 54 5.4 接口和实现 55 5.5 接口和端口 58 5.5.1 可见性 58 5.5.2 作用域 59 5.6 小结 59 5.7 常见问题解答 60 5.8 小测验和习题 60 5.8.1 小测验 60 5.8.2 习题 60 第6章 介绍用例 61 6.1 什么是用例 61 6.2 用例的重要性 62 6.3 举例:饮料销售机 62 6.3.1 用例“买饮料” 62 6.3.2 其他用例 63 6.4 包含用例 64 6.5 扩展用例 65 6.6 开始用例分析 66 6.7 小结 66 6.8 常见问题解答 66 6.9 小测验和习题 67 6.9.1 小测验 67 6.9.2 习题 67 第7章 用例 68 7.1 用例模型的表示法 68 7.1.1 回顾饮料销售机 69 7.1.2 跟踪场景中的步骤 69 7.2 用例之间关系的可视化表示 70 7.2.1 包含 70 7.2.2 扩展 71 7.2.3 泛化 72 7.2.4 分组 73 7.3 用例在分析过程中的作用 73 7.4 运用用例模型:举例 73 7.4.1 理解领域 73 7.4.2 理解用户 74 7.4.3 理解用例 75 7.4.4 进一步深入 76 7.5 “清查存货” 77 7.5.1 结构元素 77 7.5.2 关系 77 7.5.3 分组 78 7.5.4 注释 78 7.5.5 扩展 78 7.5.6 其他 78 7.6 UML“大” 78 7.7 小结 79 7.8 常见问题解答 79 7.9 小测验和习题 79 7.9.1 小测验 80 7.9.2 习题 80 第8章 状态 81 8.1 什么是状态 81 8.1.1 基本符号集 82 8.1.2 在状态标中增加细节 82 8.1.3 增加转移的细节:事件和动作 83 8.1.4 增加转移的细节:保护条件 84 8.2 子状态 84 8.2.1 顺序子状态 84 8.2.2 并发子状态 85 8.3 历史状态 86 8.4 UML 2.0中的新变化 86 8.5 为什么状态很重要 87 8.6 UML“大” 87 8.7 小结 88 8.8 常见问题解答 89 8.9 小测验和习题 89

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值