UML建模风格之状态图

软件系统架构设计实战:从UML建模到架构风格选择 本文深入探讨了软件系统架构设计的实战经验,从UML建模到架构风格选择。通过电商系统、智能家居平台等实际案例,详细解析了用例图、类图、时序图等UML工具的应用,以及分层架构、微服务架构等不同架构风格的适用场景和选型策略。文章还分享了从需求分析到架构验证的完整路径,帮助开发者避免常见陷阱,提升系统设计能力。 阅读详情

UML状态图描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。建模实时系统。

通用准则

当行为的改变和状态有关时才创建状态图。

敏捷建模( AM) ( Ambler 2002)的原则--最大化项目干系人的投资--建议你只有当模型能够提供正面价值的时候才创建模型。 如果一个实体,比如一个类或组件,表示的行为的顺序和当前的状态无关,那么画一个UML状态图可能是没有什么用处的。例如一个SurfaceAddress类就很简单,表示了那些你将会在系统中显示和操作的数据,因此一个UML状态图就没有任何相关之处。而一个Seminar对象就非常的复杂,学生注册这样一个事件将会根据它的当前状态有不同的反应,就像你在图1中看到的。

图⒈班级注册的一个UML状态图。

把初始状态放置在左上角。

如你在图1所见的,初始状态被建模成一个实心圈,把初始状态放在左上角反映西方人的阅读文化的习惯。

把最终状态放置在右下角。

如你在图1所见,最终状态被建模为一个带边界的实心圆。把最终状态放右下角反映了西方的文化的从左到右,从上到下的阅读习惯。

状态指南

状态是一个实体的行为模式的某个阶段。 状态的表示是通过实体的属性值。 例如,在图1中,当seminar被标记为open,并且存在空位的时候,seminar就处于Open For Enrollment的状态。

状态名称要简单但应具有描述性。

象Open For Enrollment和Proposed这种的状态名称很容易理解,从而提高了图⒈的沟通价值。理论上状态名称应该是现在时,但是用过去式写成的诸如Proposed的名称要比用现在时写成的诸如Is Proposed的名称好的多。

避免"黑洞"状态。

黑洞状态是那种只有变换进来但没有任何变换发出的状态,这种情况要么由于该状态是一个最终状态,要么就是你已经错过了一个或多个变换变换。

避免"奇迹"状态。

奇迹状态是那种只有变换发出但没有任何变换进来的状态,这种情况要么由于该状态是一个起点,要么就是你已经错过了一个或多个变换变换。

子状态建模指南

为复杂的目标建模子状态。

图1中展示的UML状态图是不完整的,因为它没有建模Seminar的post - enrollment(注册后)状态。 图2建模了一个Seminar的完整的生命周期,把图1描述为一个新的包括子状态集合的Enrollment的复合状态,也称作超状态。 注意按理说你会像图1的模型那样处理标记,但为了简化起见在原先变换上的标记都没有包括在内。当一个现有状态表现出复杂的行为时,建模子状态就是有意义的,从而促使你来研究它的子状态。 当几个现有状态共用一个通用的入口条件或出口条件( Douglass 1999)时,引入超状态是有意义的,在图1中你可以看到所有的状态共用一个通用的closed变换,以到达最终状态。

图⒉Seminar的完整生命周期

把通用的子状态变换放在一起

和图1中每一个子状态都拥有一个cancelled变换不同,在图2中你可以看到cancelled变换仅用于描述Enrollment超状态,这使图形得到简化。 如果子状态都共享一个入口变换或出口变换,都可以使用一个同样的方法。 变换上的警戒点和动作(如果有)也应该使相等的。

为复杂的实体创建一个分层的状态图

虽然这种表现子状态的方法是很好使的,但是最终的图可能变得相当复杂--我们只要设想一下如果Being Taught状态也有子状态的话,图2会变成什么样就知道了。 一个替代的方法是创建一个分层的UML状态图。 例如,图3表示高阶视图,而图1描述了一个细节视图。这种方法的好处是如果需要的话,马上就可以建立一张详图来研究Being Taught状态。

图⒊Seminar的高阶状态图。

最高阶的状态图总有初始态和最终态

一个高阶的UML状态图,例如图2描述的这样,应该表示实体的完整的生命周期,包括"出生"和最后的"死亡"。 低阶的图未必包含初始状态和最终状态,特别是那些建模一个实体的生命周期的"中间状态"的图。

变换和动作

变换是从一种状态到另一种状态的序列,它可能是通过一个事件触发的。简而言之就是被建模的实体的内部或外部的行为。 对一个类来说,变换一般是将会导致状态的重要改变的操作调用的结果,因此我们需要了解一点,并不是所有的方法调用都会导致变换产生的,这一点非常重要。 一个动作就是某个东西,对类来说就是一个操作,被建模的实体所调用的操作。

用实现语言的命名规则命名软件动作

图1中的动作遵循Java操作的命名规则( Vermeulen et. 2000),因为系统使用
用叙述性文字命名角色动作

UML状态图可用于建模非软件实体的生命周期,特别是UML图上的角色。 例如学生角色就可能有诸如Accepted、Full Time、Part Time、Graduated、Masters、Doctoral、和Post - Doctoral等状态,以显示各人的不同行为。 当你在建模现实世界的角色时,与软件中Student类不同的是,状态间的变换最好是使用叙述性文字来描述,例如drop seminar和pay fees,而不是dropSeminar ()和payFees (),因为现实生活中的人是做事情,而不是执行操作。

只有对所有的入口变换都合适时才注明入口动作

在图1中你可以看到Closed To Enrollment状态的入口中操作notifyInstructor ()都是经由entry/动作标记来调用的。 这暗示着每次进入状态时都需要调用该操作,如果你不希望每次都发生,那么就把动作关联到特定的入口变换。 例如,addStudent ()动作是在student enrolled变换到Open For Enrollment变换发生,而在到opened变换则不会发生,这是因为每次你在进入该状态并不需要增加一个学生。

只有对所有的出口变换适合时才注明出口动作

出口动作,用exit/标记来表示,工作方式类似于入口动作。

只有当你想终止并再进入该状态时才建模递归变换

一个递归的变换是那些两个端点都拥有相同状态的变换。 一个重要的暗示是实体从状态出来,又回到原有的状态,因此,那些由于entry/或exit/动作标记而被调用的任何一种操作都可能被自动调用。 图1的Open For Enrollment状态就是这种递归变换的例子,因此当前班级大小就在入口处被记录下来。

用过去式命名转换事件

图1中的转换事件,例如seminar split和cancelled,是使用过去式命名的,反映了这样一个事实:变换是事件的结果--因为事件发生在变换之前,因此应该用过去式命名。

把转换标记放在接近源状态的地方

虽然图1比较复杂,变换标记尽可能放在靠近来源的地方,例如seminar split和student enrolled。 Furthermore, the labels were justified (left and right respectively) to help visually place them close to the source state.

以转换方向为基础放置变换标记

为了更易于判断哪个标记和变换是一起的,按照如下的规则来放置变换标记:

在变换线条上的从左到右。

在变换线条下的从右到左。

变换线条右边的往下。

变换线条左边的往上。

警戒点

一个警戒点是为了穿过一个转换而必须为真的一个条件。

警戒点不应该重叠

离开状态的相似变换上的警戒点必须彼此一致。 举例来说,x <0, x = 0,以及x > 0的警戒点是一致的,而x < = 0和x > = 0的警戒点就不是一致的,因为他们重叠了,它并没有明确的指出当x为0时将发生什么。在图1中,你可以看到警界点的一致性,从填写注册表活动出发的该学生划线变换上的警戒点没有重叠,决策点上的警戒点也一样。

为可视化的定位警戒点而引入接合点。

在图2中你可以看到从Being Taught触发student dropped事件存在两个变换,而图3中仅有一个,变换被合并了,因此我们需要一个接合点(填满的圆)。 这种方法的好处是现在图上的两个警戒点更彼此接近了,更容易看出警戒点是否重叠。

警戒点不必配套

一个状态的变换警戒点有可能是不完整的。例如,一个bank account对象可能从Open状态变换到Needs Authorization状态,这时需要一个大额存款"large deposit"的警戒点。可是,一个带有"small deposit"的警戒点的deposit变换可能并不需要建模,它是被隐含的,我们遵循了AM的实践--简单的描述模型和仅仅包括相关的信息。

一致的命名警戒点



图1包含了诸如seat available和no seat available的警戒点,两个警戒点的描述是一致的。 然而,诸如seats left、no seat left、no seats left、no seats available、seat unavailable之类的描述就是不一致,而且难于理解的。 

头歌软件工程实践:从理论到实战的客观题精解(1-8章) 本文系统解析头歌平台软件工程实践1-8章核心内容,涵盖软件工程基础概念、协同开发技巧、代码质量分析、敏捷开发实践等关键知识点。通过客观题精解和实战案例,帮助读者掌握从需求分析到开源协作的全流程技能,提升软件工程实践能力。特别针对头歌平台特色内容进行深入剖析。 阅读详情

相关推荐

每天进步一点点

从系统执行效率方面讲,基于DNS的负载均衡机制实现简单,但其通常不能区分服务器的差异,也不能反映服务器的当前运行状态。采用基于反向代理的负载均衡机制,可在代理服务器中引入调速缓存机制,对Web服务器返回的静态页面或图片等静态资源进行缓存,由代理服务器承担对原始服务器的静态资源访问请求,从而进一步降低原始Web服务器的负载。一种自项向下的软件可靠性分析方法,即从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全及可靠性产生重大影响的事件开始向下逐步追查导致事件发生的原因,直至基本事件(底事件)。

fu406591165的专栏 334

UML学习笔记(六)【状态图】

状态图包含:状态与状态之间的转换、状态内部活动、超状态、并发状态 状态图的基本模型(初始状态、内部活动、转换、结束状态) 闹钟的并发正交状态图(初始状态、历史伪状态,并发) 状态图DEMO 城堡有个隐藏的宝箱,平常都是等待开启状态 当蜡烛移出烛台时,如果门是关闭的,宝箱的锁就显现出来 当钥匙转动时,如果替换了蜡烛,就打开宝箱,如果没替换蜡烛,就放出妖怪。 状态模式实现 ...

赤山岛 740

UML进阶:状态图、活动图、协作图、组件图及配置图应用详解

在软件设计过程中,状态图是不可或缺的工具之一。它有助于开发者理解复杂的业务逻辑,并确保系统能够适应各种事件和条件。使用状态图可以直观地表示对象状态变化的逻辑路径,从而降低开发过程中的不确定性。组件图(Component Diagram)是一种结构图,它以图形化的方式表达了系统的物理结构,特别强调了系统中的组件(软件构件)以及它们之间的接口关系。组件图的主要目的是展示系统如何被组织为独立的模块,这些模块如何与系统中的其他部分相互作用,以及它们如何集成到更大的系统中去。

weixin_29496633的博客 1436

【UML】行为图(状态图&活动图)

一、状态图     1、概念         状态图描述一个实体基于事件反应的动态行为,显示该实体如何根据当前的状态对不同的事件作出反应的,为了研究类、角色、子系统或组件的行为。     2、图示                      二、活动图     1、概念         活动图是阐明了业务用例实现的工作流程,可以用于研究实现业务目标时所要执行的各项任务或活动的顺

Elsa 1031

软考高级系统分析师考点全解析:需求、架构、数据库与信息安全

在信息技术服务领域,软考高级认证是衡量从业者综合能力的重要标尺,其中系统分析师考试因其覆盖业务与技术的全链路而备受关注。这门考试不仅要求掌握需求分析中的结构化方法与UML建模,还深入考察软件架构风格与评估方法,以及数据库设计中的ER模型与范式判断。随着2023年考纲调整,国产密码算法SM2/SM3/SM4、威胁建模STRIDE等安全知识成为新的考查重点。从概念原理到工程实践,系统分析师考试强调将理论落地于真实项目场景,例如通过状态图描述订单流转、利用ATAM进行架构评审、应用反规范化优化查询性能等。理解这些

weixin_28568819的博客 145

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2552

UML图学习笔记(二)状态图

一、介绍 1.状态机介绍 状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化改变其状态或引发一个动作。在状态机的语境中,一个事件就是一次激发的产生,每个激发都可以触发一个状态转换。 2.状态图介绍 状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。一般可以用状态机对一个对象的生命周期建模,状态图用于显示状态机(StateM.

JIZQAQ学习&踩坑笔记本 2713

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1996

UML总结

UML(unified model language):统一建模语言 UML是一个绘制软件概念图的图形化标记语言; 1. 图的类型: UML有三种主要的图:静态图,动态图,物理图 静态图通过对象,类,数据结构以及他们之间的关系来表达那些软件元素中不会改变的逻辑元素; 动态图通过执行流,实体改变状态的方式来描述软件实体在执行过程中如何变化; 物理图用来描述不会改变的物理实体,例如源文

expectbird的专栏 728

Xcelium XRUN实用指南:从入门到高效仿真

本文是Xcelium XRUN仿真工具的实用指南,从基础入门到高效应用全面解析。XRUN作为Cadence Xcelium的统一命令行入口,能自动化编译、精细和仿真流程,大幅提升数字芯片与FPGA验证效率。文章详细介绍了最简命令、波形调试、增量编译、多核并行仿真等核心功能,并提供了管理复杂项目、性能调优与深度调试的进阶技巧,帮助工程师快速上手并精通这一高效仿真工具。

weixin_29238147的博客 738

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1399

UML建模风格 UML状态图表现形式解析

本节和大家一起学习一下UML建模风格中的UML状态图,为了便于大家理解本节通过具体的图例讲解,希望通过本节的介绍大家对UML状态图的相关知识有大致的了解。下面让我们一起来看一下具体介绍吧。 UML建模风格之UML状态图 UML状态图描述一个实体基于事件反应的动态行为,显示了该

774

基于 MFC 和 C++ 的语音识别客户端实现方案

语音 SDK:[Microsoft Speech SDK](https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/speech-sdk)(建议使用最新版)1. **Azure 语音服务密钥**:需要在 [Azure 门户](https://portal.azure.com/) 中创建语音资源,获取密钥和区域(如 `eastasia`),替换代码中的占位符。

寒寒豆豆软件公司的博客 152

(转)UML建模风格之状态图详述

通用准则当行为的改变和状态有关时才创建状态图。敏捷建模( AM) ( Ambler 2002)的原则--最大化项目干系人的投资--建议你只有当模型能够提供正面价值的时候才创建模型。 如果一个实体,比如一个类或组件,表示的行为的顺序和当前的状态无关,那么画一个UML状态图可能是没有什么用处的。例如一个SurfaceAddress类就很简单,表示了那些你将会在系统中显示和操作的数据,因此一个U...

weixin_33937913的博客 149

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1278

最适合入门的100个深度学习项目

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 12万+

软件工程 行为建模

UML2.0中对行为建模的图包括状态图 顺序图 时间图 不包括对象图 顺序图中带条件的消息发送,不能采用分成多个顺序图子图来描述 顺序图的组合控制框中,用于表达分支选择关系的控制符是alt 当一个顺序图过大时,最好的处理方法是添加ref框,建立顺序图间的引用关系 用例分析阶段的用例图要包含设计对象,并关注参数消息 × 大部分对象的状态空间是由它的属性取值决定的 状态迁移的发生不会受到目标状态的影响 UML状态图中的状态可以分解为“与”状态以及“或”状态,但都可以转化为基本状态机来表示 ...

qq_40774672的博客 843

整理 钢琴 约翰汤普森-简易钢琴(小汤)

文件名:(小汤1)约翰-汤普森钢琴1 超清PDF (原版引进)文件名:(小汤2)约翰-汤普森钢琴2 超清PDF (原版引进)文件名:(小汤3)约翰-汤普森钢琴3 超清PDF (原版引进)文件名:(小汤4)约翰-汤普森钢琴4 超清PDF (原版引进)文件名:(小汤5)约翰-汤普森钢琴5 超清PDF (原版引进)文件大小:20.1 MB。文件大小:23.7 MB。文件大小:45.7 MB。文件大小:51.7 MB。文件大小:72.0 MB。

TS的博客 5万+

系统架构师笔记(四)

今年的系统架构师考试马上就要开始了,在此进行了一次核心要点总结,与大家一起分享。 十五、可靠性 可靠度:系统在规定的条件下、规定的时间内不发生失效的概率。 失效率:(风险函数)运行至此刻系统未出现失效的情况下,单位时间系统出现失效的概率。 可靠度计算方式: 1)、串联:R1*R2*R3.... 2)、并联:1-(1-R1)*(1-R2)*(1-R3)... 1、容错...

我是传奇 126

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

设计模式、面向对象一:面向对象

什么是面向对象编程? 面向对象编程是一种编程范式和编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 什么是面向对象编程语言? 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便的实现面向对象编程四大特性(封装、继承、抽象、多态)的编程语言 如何判定一个编程语言是否是面向对象编程语言? 如果按照严格的定义,需要有现成的语法...

圆哥哥纳丶的博客 231

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

软件工程详解

OOA的基本任务是运用OO方法, 对问题域进行分析和理解, 正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。OOD的结果就是设计模型,对于OOD而言,在支持可维护性的同时,提高软件的可复用性是一个至关重要的问题,如何同时提高软件的可维护性和可复用性,是OOD需要解决的核心问题之一。(3) 构件图(component diagram) :构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。

2301_76406247的博客 109

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: UML建模风格之顺序图
下一篇: UML 用例建模技巧
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值