UML作业第五次:分析系统,绘制状态图

一. PlantUML状态图 语法学习小结

1.简单状态

我们使用[*]开始和结束状态图,使用-->添加箭头。

复制代码
@startuml
[*] --> Test1
Test1 --> [*]
Test1 : this is a test
Test1 : this is another testTest1 -> Test2
Test2 --> [*]
@enduml
复制代码

 

 

2.更改状态渲染

我们使用隐藏空描述将状态呈现为简单状态。

复制代码
@startuml
hide empty description
[*] --> Test1
Test1 --> [*]
Test1 : this is a test
Test1 : this is another testTest1 -> Test2
Test2 --> [*]
@enduml
复制代码

 

3.合成状态

一个状态也可能是合成的,但必须使用关键字state和花括号来定义合成状态。

复制代码
@startuml
scale 350 width
[*] --> NotShooting
state NotShooting {[*] --> IdleIdle --> Configuring : EvConfigConfiguring --> Idle : EvConfig
}state Configuring {[*] --> NewValueSelectionNewValueSelection --> NewValuePreview : EvNewValueNewValuePreview --> NewValueSelection : EvNewValueRejectedNewValuePreview --> NewValueSelection : EvNewValueSavedstate NewValuePreview {State1 -> State2}
}
@enduml
复制代码

 

4.长名字

我们使用关键字state定义长名字状态。 

复制代码
@startuml
scale 600 width[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {state "Accumulate Enough Data\nLong State Name" as long1long1 : Just a test[*] --> long1long1 --> long1 : New Datalong1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
@enduml
复制代码

 

 

5.并发状态

我们使用-- or ||作为分隔符来合成并发状态。

复制代码
@startuml
[*] --> Activestate Active {[*] -> NumLockOffNumLockOff --> NumLockOn : EvNumLockPressedNumLockOn --> NumLockOff : EvNumLockPressed--[*] -> CapsLockOffCapsLockOff --> CapsLockOn : EvCapsLockPressedCapsLockOn --> CapsLockOff : EvCapsLockPressed--[*] -> ScrollLockOffScrollLockOff --> ScrollLockOn : EvCapsLockPressedScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}@enduml
复制代码

 

二、例题巩固学习

1.以《电梯控制》系统、《银行账户》系统为例,分析系统中的状态及状态转换。

电梯状态机图:
电梯存在待载、上升、下降和楼间停4种基本状态。电梯无人承载时停在某楼层,处在待载状态。当有人进人电梯,并且当前楼层比目标楼层低,则电梯上升。如果当前楼层比目标楼层高,则电梯下降。在上升或下降状态,如果到了某个目标楼层,电梯运行停止,进人楼间停状态,等待人的进出。如果所有人都在本层下完,电梯回到待载状态。如果电梯中还有人,则判断目标楼层是否比当前楼层高,如果高于当前楼层则上升,如果低于当前楼层则下降。

银行账户状态机图:
银行账户存在空额有余额和负债三种状态。初建立的账户没有存款,处在空额状态。账户在空额状态时,如果向其中存款,进人有余额状态,如果从账户取款,则进人负债状态。账户在有余额状态时,如果向账户存款,余额增加,但仍然还在有余额状态。如果从账户取款,若取款额小于余额,账户仍在有余额状态;若取款额等于余额,则取款后账户回到空额状态;若取款额大于账户余额,则取款后账户进人负债状态。账户处于负债状态时,如果取款,余额减少,但仍然处在负债状态。如果给账户存款,当存款额小于负债额,则账户仍然在负债状态;如果存款额等于负债额,则存款后账户回到空额状态;如果存款额大于负债额,存款后账户进入有余额状态。

2.脚本及状态图

电梯控制:

@startuml
[*] --> 待载

待载 -up-> 上升 : 进入[目标楼层>当前楼层]/关门上行
上升 -down-> 楼间停 : [进人/出人]/停机开门

待载 -down-> 下降 : 进入[目标楼层<当前楼层]/关门下行
下降 -up-> 楼间停 : [进人/出人]/停机开门

楼间停 -up-> 上升:[目标楼层>当前楼层]/关门上行
楼间停 -down-> 下降:[目标楼层<当前楼层]/关门下行
楼间停 -left-> 待载:[无人]/关门
@enduml

银行账户

@startuml
[*] --> 空额

空额 -down-> 有余额 : 存款/余额=余额+存款额
空额 -down-> 负债 : 取款[取款额<最大限额]/余额=余额-存款额

有余额 --> 有余额 : 存款/余额=余额+存款额
有余额 --> 有余额 : 取款[取款额<余额]/余额=余额-取款额
有余额 -right-> 负债 : 取款[取款额>余额]/余额=余额-取款额
有余额 -up-> 空额 : 取款[取款额=余额]/余额=余额-取款额

负债 --> 负债 : 取款[取款额<最大限额]/余额=余额-存款额
负债 --> 负债 : 存款[存款额<负债额]/余额=余额+存款额
负债 -left-> 有余额 : 存款[存款额>负债额]/余额=余额+存款额
负债 -up-> 空额 : 存款[存款额=负债额]/余额=余额+存款额
空额 -up-> [*]
@enduml

转载于:https://www.cnblogs.com/yz1248865879/p/10957553.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第四十一期:从Windows到鸿蒙——操作系统的前世与今生

世界上操作系统生意做得最好的是微软&#xff0c;但是世界上第一个做操作系统生意的不是微软&#xff0c;Windows也不是世界上最好用的系统。 作者&#xff1a;苏亚 “做一个操作系统的技术难度不大&#xff0c;难度大的是生态。”——任正非 华为被谷歌断供之后&#xff0c…

算法一——排序

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 分析排序算法的角度 算法的执行效率 算法的执行效率一般从时间复杂度以及比较、交换次数来考虑。 时间复杂度 时间复杂度需要考虑最好情况、最坏情况、平均情况时…

第四十二期:Linux转正日常办公电脑到底行不行

昨天是中国程序员们自定义的程序员日&#xff0c;阿里在秀食堂&#xff0c;另一网络巨头腾讯也不甘寂寞地小蹭了一下这个节日&#xff1a;发布了Linux QQ 2.0 beta&#xff0c;宣告Linux版QQ回归。 作者&#xff1a;电脑报 昨天是中国程序员们自定义的程序员日&#xff0c;阿…

[Kali][VMware][2020][窗口大小][分辨率]高分辨率自适应

1.Vmware->查看->自动调整大小->自动适应窗口 2.Kali现在提供了HiDPI模式。此模式可调整GTK&#xff0c;QT甚至基于Java的界面的缩放比例&#xff0c;因此用户无需手动修改每个界面。您可以通过从应用程序菜单中打开“ Kali HiDPI模式”或kali-hidpi-mode从终端运行来…

第四十三期:Wireshark网络分析就这么简单,你一定会喜欢的技巧

拿到一个网络包时&#xff0c;我们总是希望它是尽可能小的。操作一个大包相当费时&#xff0c;有时甚至会死机。如果让初学者分析1GB以上的包&#xff0c;估计会被打击得信心全无。所以抓包时应该尽量只抓必要的部分。 作者&#xff1a;科技yuan 一、抓包 拿到一个网络包时&a…

Beta冲刺(9/7)——2019.5.31

作业描述 课程软件工程1916|W(福州大学)团队名称修&#xff01;咻咻&#xff01;作业要求项目Beta冲刺&#xff08;团队&#xff09;团队目标切实可行的计算机协会维修预约平台开发工具Eclipse团队信息 队员学号队员姓名个人博客地址备注221600207黄权焕https://www.cnblogs.co…

数据结构三——跳表

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 跳表的由来 说明&#xff1a;图片来自极客时间 由来   二分查找的数据结构是数组&#xff0c;利用数组随机访问的特定查找的时间复杂度是O(logn)。如果数据结构是…

[BUGKU][CTF][MISC][2020] MISC writeup持续更新中

CTF总结 ctf基本操作&#xff1a;https://blog.csdn.net/mafucan/article/details/106886421 zip: https://www.anquanke.com/post/id/86211 找软件推荐网址 1.https://www.52pojie.cn/ 2.没有的话百度一下 去找百度云 工具下载&#xff1a; stegSolve 隐写分析 需要配置Java…

spring学习(1):初始项目

1打开idea----new project 2点击建立项目的类型maven 点击next 3点击next 4选择路径&#xff0c;点击完成 5建立成功之后修改pom.xml配置文件 添加&#xff0c;解决依赖关系 <dependencies><dependency><groupId>org.springframework</groupId><ar…

[密码学][困难问题][常见规约]密码学问题常见困难问题

参考网址(科学上网) 密码学问题常见困难问题,需要点击参考网址进行查找 其困难问题的介绍非常友好&#xff0c;请根据目录快速找到相关资料 以下是检索 目录 Discrete logarithm problem DLP: discrete logarithm problem CDH: computational Diffie-Hellman problem SDH:…

数据结构四——散列表(下)

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 7 散列表链表的应用 很多情况下散列表会和链表一起使用。散列表可以通过key查找value。链表可以按照value进行排序。这样就能通过value查找key&#xff0c;也可以通…

spring学习(2):初始化spring程序

接着上一节的课程继续学习 MesasageService 类 package hello;import org.springframework.stereotype.Component; //注解的加入 Component public class MesasageService {public MesasageService() {super();System.out.println("MessageService...");}/*** 执行打…

Asp.Net Core 第05局:读取配置

前言 本文介绍Asp.Net Core 读取配置文件。环境 1.Visual Studio 2017 2.Asp.Net Core 2.2 开局 前期准备 1.添加app.json文件并在里面添加内容&#xff1b; 2.将app.json文件配置到应用中&#xff1b; 3.添加app.json对应的AppConfig类&#xff1b; 4.下面三种方式读取配置文…

[BUGKU][CTF][PWN][2020] PWN writeup

准备UBUNTU pwndbg pwntools PWN1 关键字&#xff1a;nc 知识点&#xff1a;nc使用方法 https://www.cnblogs.com/nmap/p/6148306.html nc命令是一个功能打包的网络实用程序&#xff0c;它通过命令行在网络上读取和写入数据;nc是为NMAP项目编写的&#xff0c;是目前已分裂的ne…

spring学习(3):获取bean对象

接着上一节的课程继续学习 MesasageService 类 package hello;import org.springframework.stereotype.Component; //注解的加入 Component public class MesasageService {public MesasageService() {super();System.out.println("MessageService...");}/*** 执行打…

数据结构四——散列表(上)

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 1散列表的由来 从数组随机访问特性说起。  数组的随机访问特性是&#xff1a;数组a,a[5]可以直接访问到数组的第6个元素。这就类似于在下标和数组对应的值之间建立…

[BUGKU][CTF][Reverse][2020] Reverse writeup 1-7 暂时肝不动了

Reverse 入门逆向 步骤: ida main函数 按R Reverse signin 关键字&#xff1a; 知识点&#xff1a;Android逆向分析。&#xff08;常用工具&#xff1a;安卓模拟器、JEB、Cyberchef、Androidkiller&#xff09; 步骤: 1.用jeb打开&#xff0c;找到MainActivity&#xff0c;右…

spring学习(4):spring管理对象之间的关联关系

接着上一节的课程继续学习 MesasageService 类 package hello;import org.springframework.stereotype.Component; //注解的加入 Component public class MesasageService {public MesasageService() {super();System.out.println("MessageService...");}/*** 执行打…

[Lua]LuaAPI整理

ref &#xff1a;https://blog.csdn.net/ouyangshima/article/details/43339571 LUA和C/C的沟通桥梁——栈 Lua生来就是为了和C交互的&#xff0c;因此使用C扩展Lua或者将Lua嵌入到C当中都是非常流行的做法。要想理解C和Lua的交互方式&#xff0c;首先要回顾一下C语言是如何处理…

[hackinglab][CTF][基础关][2020] hackinglab 基础关 writeup

在线工具&#xff1a;https://www.qqxiuzi.cn/daohang.htm 基础关 1 key在哪里&#xff1f; 知识点&#xff1a;F12查看源代码 步骤:F12 基础关 2 再加密一次你就得到key啦~ 知识点&#xff1a;ROT13 步骤: 基础关 3 猜猜这是经过了多少次加密&#xff1f; 关键字&#xf…