`
zhoushuping
  • 浏览: 45012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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之类的描述就是不一致,而且难于理解的。
  • 大小: 7 KB
  • 大小: 7.4 KB
  • 大小: 7.3 KB
分享到:
评论

相关推荐

    UML建模实例大全

    《UML建模实例大全》是一本深入探讨UML(统一建模语言)在实际项目中的应用的书籍,尤其强调了其在设计模式中的实践。UML作为一种强大的可视化建模工具,是软件开发过程中的重要组成部分,它为系统分析、设计和沟通...

    超市管理系统UML建模实例+完整实验报告

    包括全套的UML建模图,用例图(3级),类图,顺序图,协作图,状态图,活动图,协作图,部署图。 附有完整的实验报告,报告包括实验内容,需求分析设计方法,思路和主要技术,软件系统建模(包括完整建模图),和三...

    UML建模图:用例图 时序图 协作图 状态图 活动图

    本文将深入探讨UML建模图中的几种关键图表:用例图、时序图、协作图、状态图和活动图,以及它们如何应用于汽车租赁系统的需求分析和系统配置。 首先,用例图是描述系统参与者与系统提供的服务之间的关系。在汽车...

    UML建模之活动图介绍(Activity_Diagram)

    【UML建模之活动图介绍(Activity Diagram)】 活动图是统一建模语言(UML)中的一个重要组成部分,主要用于描述系统或过程的动态行为。它以一种流程图的形式展现了控制流从一个活动到另一个活动的顺序,尤其适用于...

    UML建模-网上购物

    创建状态图,展示了对象在生命周期中可能经历的各种状态及其转换,如订单从创建到完成的过程。创建活动图,用于表示复杂的业务流程,如订单处理流程,包括验证、库存检查、发货等步骤。 第5章,物理模型,关注系统...

    UML建模之状态图(StatechartDiagram)

    一般可以用状态机对一个对象的生命周期建模,状态图用于显示状态机(State MachineDiagram),重点在与描述状态图的控制流。如下图例子,状态机描述了门对象的生存期间的状态序列,引起转移的事件,以及因状态转移而...

    UML建模技术.pdf

    ### UML建模技术知识点详解 #### UML的基本概念与作用 **UML**(Unified Modeling Language,统一建模语言)是一种标准化的图形化建模语言,被广泛应用于软件工程和系统架构的设计过程中。UML的主要作用在于: - ...

    uml建模实验报告

    ### UML建模实验报告知识点总结 #### 一、UML与软件建模基础 - **UML(Unified Modeling Language)概述**: - UML是一种面向对象的建模语言,用于软件系统的可视化建模。 - 它提供了一套标准化的符号体系,帮助...

    汽车租赁系统UML建模

    在“汽车租赁系统”的上下文中,UML建模是设计和理解系统结构、行为和关系的一种有效方法。以下是关于这个主题的详细知识点: 1. **UML介绍**:UML是一种通用的、可视化的建模语言,它提供了多种图表类型,如用例图...

    UML-建模设计-航-空-订-票-系-统.pdf

    《UML建模设计在航空订票系统中的应用》 UML(统一建模语言)是一种标准的图形建模工具,广泛应用于软件工程领域,尤其是系统设计阶段。它提供了多种图表,如用例图、类图、包图、顺序图、协作图、状态图、活动图、...

    UML建模状态图教案

    UML建模 信息管理与信息系统 状态图 图书管理系统 教案

    UML建模案例分析二网络教学系统UML建模

    UML建模案例分析二网络教学系统UML建模 UML(Unified Modeling Language)是一种标准化的建模语言,用于描述、设计和指定软件系统的结构、行为和业务规则。UML建模是面向对象的系统分析和设计方法,通过使用UML模型...

    UML建模案例之图书管理系统

    UML建模案例之图书管理系统 UML(Unified Modeling Language,统一建模语言)是一种标准的建模语言,用于描述、设计和指定软件系统的结构和行为。UML建模是面向对象的分析和设计方法,旨在提高软件系统的质量和可...

    考试成绩管理UML建模

    在“考试成绩管理UML建模”这个项目中,我们将关注如何使用Rational Rose这一专业工具来实现考试成绩管理系统的建模工作。 首先,UML是一种图形化语言,它提供了一套标准符号和图示,帮助开发人员理解、记录和沟通...

    图书馆管理系统UML建模ppt讲解

    《图书馆管理系统UML建模深度解析》 在信息化飞速发展的今天,图书馆管理系统已经成为现代图书馆不可或缺的一部分。UML(统一建模语言)作为一种强大的建模工具,被广泛应用于软件开发的各个阶段,尤其是在系统分析...

    详解UML建模中的状态图

    本文将为大家介绍的是UML建模中的状态图,希望通过本文能对大家了解UML,了解UML建模有所帮助。状态图目录:一、状态图简介(Briefintroduction)二、状态图元素(StateDiagramElements)1、状态(States)2、转移...

    《UML建模实例教程》【PPT】

    3.1.2理解UML建模 3.2UML的特点 3.3UML的结构 3.3.1UML的事物 3.3.2UML的关系 3.4UML的视图 3.4.1用例视图 3.4.2逻辑视图 3.4.3并发视图 3.4.4组件视图 3.4.5部署视图 3.5UML图形符号 3.5.1用例图 ...

Global site tag (gtag.js) - Google Analytics