UML各种图画法总结
- 格式:doc
- 大小:425.50 KB
- 文档页数:19
UML各种图例面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.UML类的符号是一个被划分成三块的方框:类名,属性,和操作.抽象类的名字,像Payment是斜体的.类之间的关系是连接线.类图有三种关系.关联association-表示两种类的实例间的关系.如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联.在图中,关联用两个类之间的连线表示.dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.。
UML科普⽂,⼀篇⽂章掌握14种UML图前⾔上⼀篇⽂章写了⼀篇建造者模式,其中有⼏个UML类图,有的读者反馈看不懂了,我们今天就来解决⼀哈。
什么是UML?UML是Unified Model Language的缩写,中⽂是统⼀建模语⾔,是由⼀整套图表组成的标准化建模语⾔。
为什么要⽤UML?通过使⽤UML使得在软件开发之前,对整个软件设计有更好的可读性,可理解性,从⽽降低开发风险。
同时,也能⽅便各个开发⼈员之间的交流。
UML提供了极富表达能⼒的建模语⾔,可以让软件开发过程中的不同⼈员分别得到⾃⼰感兴趣的信息。
Page-Jones 在《Fundamental Object-Oriented Design in UML》⼀书中总结了UML的主要⽬的,如下:1. 为⽤户提供现成的、有表现⼒的可视化建模语⾔,以便他们开发和交换有意义的模型。
2. 为核⼼概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
3. 独⽴于特定的编程语⾔和开发过程。
4. 为了解建模语⾔提供⼀个正式的基础。
5. ⿎励⾯向对象⼯具市场的发展。
6. ⽀持更⾼层次的开发概念,如协作,框架,模式和组件。
7. 整合最佳的⼯作⽅法 (Best Practices)。
UML图有哪些?UML图分为结构图和⾏为图。
结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
⾏为图⼜分活动图、⽤例图、状态机图和交互图。
交互图⼜分为序列图、时序图、通讯图、交互概览图。
UML图概览什么是类图?【概念】类图是⼀切⾯向对象⽅法的核⼼建模⼯具。
类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
【⽬的】⽤来表⽰类、接⼝以及它们之间的静态结构和关系。
在类图中,常见的有以下⼏种关系。
泛化(Generalization)【泛化关系】是⼀种继承关系,表⽰⼦类继承⽗类的所有特征和⾏为。
【箭头指向】带三⾓箭头的实线,箭头指向⽗类。
UML各种图例面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language ™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成标准文档为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)标准文档角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求标准文档∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.标准文档UML类的符号是一个被划分成三块的方框:类名,属性,和操作.抽象类的名字,像Payment是斜体的.类之间的关系是连接线.类图有三种关系.关联association-表示两种类的实例间的关系.如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联.在图中,关联用两个类之间的连线表示.标准文档标准文档为了简单地表示出复杂的类图,可以把类组合成包packages.一个包是UML上有逻辑关系的元件的集合.下面这个图是是一个把类组合成包的一个商业模型.dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.标准文档这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.标准文档每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.标准文档协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.标准文档对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.标准文档我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及 Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.标准文档状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和 Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.标准文档标准文档标准文档。
uml图怎么画UML图,即统一建模语言图,是由OMG(Object Management Group,对象管理组)制定并推广的软件工程标准,用于描述软件系统的结构和行为。
UML图包括用例图、活动图、类图、序列图、状态图、组件图和部署图,不同的UML图适用于不同的建模需求,可以帮助软件开发人员更清晰、准确地描述和设计软件系统。
如何画UML图呢?以下是几种常用的UML图绘制方法:1. 用例图用例图用于描述系统功能和参与者之间的关系。
绘制用例图时,首先要确定系统的参与者,然后绘制用于描述系统功能的用例,最后画出它们之间的联系。
用例图的常见符号包括参与者、用例、关联关系、泛化关系、包含关系、扩展关系等。
其中,参与者用人的形状表示,用例用椭圆形表示,关联关系用实线表示,泛化关系用空心三角形表示,包含关系和扩展关系用虚线箭头表示。
2. 活动图活动图用于描述系统中的业务流程或处理过程。
绘制活动图时,首先要确定业务流程或处理过程的步骤和顺序,然后绘制用于表示步骤的活动节点和用于表示控制流的箭头,最后画出它们之间的联系。
活动图的常见符号包括活动节点、控制流、决策节点、合并节点、分支节点、循环节点等。
其中,活动节点用圆角矩形表示,控制流用实线箭头表示,决策节点用菱形表示,合并节点用以上两个节点的相反形状表示,分支节点用实线符号表示,循环节点用小圆圈表示。
3. 类图类图用于描述系统中的类、对象及它们之间的关系。
绘制类图时,首先要确定系统中的类和对象,然后绘制用于表示类的矩形和用于表示类属性和方法的分区,最后画出它们之间的关系。
类图的常见符号包括类、对象、关联关系、聚合关系、组合关系、泛化关系、依赖关系等。
其中,类用矩形表示,对象用类名加下划线表示,关联关系用实线表示,聚合关系和组合关系用空心菱形和实心菱形表示,泛化关系用空心三角形表示,依赖关系用虚线箭头表示。
4. 序列图序列图用于描述系统中的对象之间的消息传递过程。
UML类图基本画法类简要画法类有三个单元格的矩形(看上图中的动物类)第⼀格:类名称(如果是抽象类,名称标注为斜体字)第⼆格:类属性名称第三格:类操作名称类属性或者操作的访问修改符的标注:public⽤加号标注private⽤减号标注protected⽤#号标注接⼝简要画法接⼝有两个单元格的矩形(看上图中的飞翔接⼝)第⼀格:接⼝名称(名称前⾯要加⼊接⼝标注<>)第⼆格:操作名称属性或者操作的访问修改符的标注:同类继承关系简要画法继承关系简单介绍:类似is-a的关系,如:猫是⼀个动物鸟类+实线+空⼼三⾓形+动物类(即鸟类继承动物类,参考上图中的标注①)箭头⽅向说明:箭头⽅向由⼦类指向⽗类接⼝实现关系简要画法简单介绍:接⼝表达的是⼀种has-a的关系,即拥有这类接⼝的操作,如:猫可以实现爬树的接⼝⼤雁类+虚线+空⼼三⾓形+飞翔接⼝(即⼤雁类实现了接⼝飞翔,参考上图中的标注②)箭头⽅向说明:箭头⽅向由类指向接⼝依赖关系简要画法简单介绍:依赖关系表达的是⼀种use-a的关系,即⼀个类临时引⽤另外⼀个类的⽅法实现功能动物类+虚线+箭头+氧⽓类和⽔类(即动物类依赖氧⽓类和⽔类,参考上图中的标注③)箭头⽅向说明:箭头由类指向被依赖类关联关系简要画法简单介绍:关联关系表达的是⼀种强依赖关系,需要长期知道对⽅,使⽤对⽅,如企鹅需要总是知道⽓候的变化企鹅类+实线+箭头+⽓候类(即企鹅类关联⽓候类,参考上图中的标注④)箭头⽅向说明:箭头由类指向被关联类聚合关系简要画法简单介绍:聚合关系表达的是⼀种弱拥有关系,如电脑与很多外设的关系雁群类+空⼼菱形+实线+箭头+⼤雁类(即雁群类是由⼤雁类聚合成的,参考上图中的标注⑤)箭头⽅向说明:箭头由整体指向部分合成(或说组合)关系简要画法简单介绍:合成关系表达的是⼀种强拥有关系,并且⽣命周期相同,不能单独存在鸟类+实⼼菱形+实线+箭头+翅膀类(即鸟类是由翅膀类及其它类合成的,参考上图中的标注⑥)箭头⽅向说明:箭头由整体指向部分关系常见的关系有:继承(Inheritance),关联关系(Association),(Aggregation),复合关系(Composition),依赖关系(Dependency),实现关系(Realization/Implementation)。
1UML 的9种图例的总结一、 用例图1、 定义用例定义:用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。
(这是UML 对用例的正式定义,可以这样去理解,用例是参与者想要系统做的事情,用例在画图中用椭圆来表示,椭圆下面附上用例名称)。
用例图定义:由参与者(Actor )、用例(Use Case )以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。
2、 用途用例图(User Case )是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。
用例图主要的作用有三个:(1)获取需求;(2)指导测试;(3)还可在整个过程中的其它工作流起到指导作用。
3、 组成元素以及元素之间的关系说明用例图由参与者(Actor )、用例(Use Case )、系统边界(用矩形表示—注明系统名称)、箭头组成,用画图的方法来完成。
参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。
因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。
还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。
系统边界是用来表示正在建模系统的边界。
边界内表示系统的组成部分,边界外表示系统外部。
系统边界在画图中用方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。
因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。
箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。
箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。
元素之间的关系:用例图中包含的元素除了系统边界、角色和用例,另外就是关系。
关系包括用例之间的关系,角色之间的关系,用例和角色之间的关系。
角色之间的关系:角色之间的关系。
UML的九种模型图本⽂转⾃,仅供学习交流!⼀、作为⼀种建模语⾔,UML的定义包括UML语义和UML表⽰法两个部分。
UML语义:描述基于UML的精确元模型定义。
UML表⽰法:定义UML符号的表⽰法,为开发者或开发⼯具使⽤这些图形符号和⽂本语法为系统建模提供了标准。
这些图形符号和⽂字所表达的是应⽤级的模型,在语义上它是UML元模型的实例。
⼆、标准建模语⾔UML可以由下列5类图来定义。
⽤例图:从⽤户⾓度描述系统功能,并指出各功能的操作者。
静态图:包括类图和对象图。
类图描述系统中类的静态结构,不仅定义系统中的类,表⽰类之间的联系,如关联、依赖、聚合等,也包括类的属性和操作,类图描述的是⼀种静态关系,在系统的整个⽣命周期都是有效的。
对象图是类图的实例,⼏乎使⽤与类图完全相同的标识。
⼀个对象图是类图的⼀个实例。
由于对象存在⽣命周期,因此对象图只能在系统某⼀时间段存在。
⾏为图:描述系统的动态模型和组成对象间的交互关系,包括状态图和活动图。
状态图描述类的对象所有可能的状态以及事件发⽣时状态的转移条件,状态图是对类图的补充,活动图描述满⾜⽤例要求所要进⾏的活动以及活动间的约束关系,有利于识别并进⾏活动。
交互图:描述对象间的交互关系,包括时序图和协作图。
时序图显⽰对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显⽰对象之间的交互;协作图描述对象间的协作关系,协作图跟时序图相似,显⽰对象间的动态合作关系。
除显⽰信息交换外,协作图还显⽰对象以及它们之间的关系。
如果强调时间和顺序,则使⽤时序图;如果强调上下级关系,则选择协作图。
实现图:包括组件图和部署图。
组件图描述代码部件的物理结构及各部件之间的依赖关系,组件图有助于分析和理解部件之间的相互影响程度;部署图定义系统中软硬件的物理体系结构。
采⽤UML来设计系统时,第⼀步是描述需求;第⼆步根据需求建⽴系统的静态模型,以构造系统的结构;第三步是描述系统的⾏为。
其中在第⼀步与第⼆步中所建⽴的模型都是静态的,包括⽤例图、类图、对象图、组件图和部署图等5种图形,是标准建模语⾔UML的静态建模机制。
一.用例图用例模型是把应满足用户需求的基本功能(集) 聚合起来表示的强大工具。
用例模型的基本组成部件是用例角色和系统。
引入用例的主要目的是:确定系统应具备哪些功能这些功能是否满足系统的需求开发者与用户协商达成共识的东西为系统的功能提供清晰一致的描述,以便为后续的开发工作打下良好的交流基础,方便开发人员传递需求的功能为系统验证工作打下基础通过验证最终实现的系统能够执行的功能是否与最初需求的功能相一致保证系统的实用性从需求的功能用例出发提供跟踪进入系统中具体实现的类和方法检查其是否正确的能力特别是为复杂系统建模时常用用例模型构造系统的简化版本(也就是精化系统的变化和扩展能力使系统不要过于复杂)然后利用该用例模型跟踪对系统的设计和实现有影响的用例简化版本构造正确之后通过扩展完成复杂系统的建模图示用例图时既要画出三种模型元素,同时还要画出元素之间的各种关系(通用化关联依赖)用例代表的是一个完整的功能。
如何发现用例实际上从识别角色起发现用例的过程就已经已开始了对于已识别的角色通过询问下列问题就可发现用例●角色需要从系统中获得哪种功能角色需要做什么●角色需要读取产生删除修改或存储系统中的某种信息吗●系统中发生的事件需要通知角色吗或者角色需要通知系统某件事吗这些事件功能能干些什么●如果用系统的新功能处理角色的日常工作是简单化了还是提高了工作效率●还有一些与当前角色可能无关的问题也能帮助建模者发现用例例如●系统需要的输入/输出是什么信息这些输入/输出信息从哪儿来到哪儿去●系统当前的这种实现方法要解决的问题是什么也许是用自动系统代替手工操作UML 中的用例UML 中的用例用椭圆形表示用例的名字写在椭圆的内部或下方用例位于系统边界的内部角色与用例之间的关联关系或通信关联关系用一条直线表示用例和角色之间有连接关系用例和角色之间的关系属于关联association 又称作通信关联communication association,这种关联表明哪种角色能与该用例通信,关联关系是双向的一对一关系,即角色可以与用例通信,用例也可以与角色通信。
UML九种建模图--类图⼝令泛化、实现、关联、依赖、组合、聚合泛化是实线加空⼼三⾓形,实现是虚线加空⼼三⾓形。
关联是实线加箭头,依赖是虚线加箭头。
组合是实⼼棱形加实线箭头,聚合是空⼼棱形加实线箭头。
思维导图作⽤在软件⼯程中,类图是⼀种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了⼈们对系统的理解。
类图是系统分析和设计阶段的重要产物。
UML的介绍和画法类的UML使⽤包含类名、属性、⽅法名以及参数。
相互之间使⽤带分割线的长⽅形表⽰。
类名根据java命名规范类名⾸字母⼤写。
属性表⽰⽅式:可见性名称:类型 [ = 缺省值 ]可见性的值:+表⽰ public属性, - 表⽰ private属性, # 表⽰ protected属性⽅法表⽰⽅式:可见性名称(参数列表) [ : 返回类型]接⼝接⼝的UML⽐类多了⼀个圆圈和横线其他类似。
类与类的六种关系泛化(Generalization)、实现(Realization)、依赖(Dependence)、关联(Association)、聚合(Aggregation)、组合(Composition)泛化关系表⽰类与类之间的继承关系,由⼦类指向⽗类。
实现关系实现关系就是java中的⼀个类和接⼝之间的关系,接⼝中⼀般是没有成员变量。
所有操作都是抽象的,只有声明没有具体的实现。
关联关系关联关系表⽰⼀个类和另⼀类有联系。
关联关系通常将⼀个类的对象作为另⼀个类的属性。
依赖关系假设A类的变化引起了B类的变化,则说名B类依赖于A类。
1、A类是B类中的(某中⽅法的)局部变量;2、A类是B类⽅法当中的⼀个参数;3、A类向B类发送消息,从⽽影响B类发⽣变化;组合关系也是整体与部分的关系。
“整体”负责“部分”的⽣命周期,他们之间是共⽣共死的;并且“部分”单独存在时没有任何意义。
聚合关系整体和部分的关系,是⼀种强的关系,但是部分可以脱离整体⽽存在。
是关联关系的⼀种。
UML类图的画法及含义2008-05-19 09:29写点定义先:抽象:只定义你想要的属性和操作,不相关的可以省去不写.继承:类之间的特性传承多态性:类的名字不同,但有相同的操作名封装:非公开的属性和操作,这样可以降低类之间的耦合消息传递:类之间协作的方式关联:类之间发生关系时的术语.两个类之间可以有多种关联.多重性:一个类和多个类之间有关联.聚集:1个类包含N个类,那么主和子之间就有聚集关系.组成:聚集的加强版,即组成的每个成员都必须存在,缺一不可.类的可视化例子:类名:WashingMachine包名:有包的情况下,可能要把包名写在类名前面,比如:PackageName::WashingMachine属性: brandName , 更全的例子是 + brandName:String = "TNND"对象名:myWasher:WashingMachine操作: +addClothes(C:String)void职责:写在类图的最下面,记述这个类它要做什么约束:用{}的格式写在类国的边上,指定个别属性的取值范围.关系:关联:类A要在类B 中发挥什么作用时,就用带方向的关联来表示, 关联相关的概念:关联名,角色名,关联上的约束,多重性.关联类:类A和类B之间的关联,是通过类C来体现的,那么类C就是关联类. 链:相对于类,对象之间的关系叫链.多重性: 可能1个类A对应N个类B. 例子有 1 1・・*0,1限定关联:在多重关联时,类A可能要通过一个指定的属性来识别类B.此时那个属性,就叫做限定符自身关联:一个类可能同时代表多种角色,那在类图中就可能表现为自已和自己关联继承:子类继承父类, 用实线空三角形指向父类.用――――――――△(这个三角要右转90度)来表示相关概念:基类,根类,叶类,单继承,多继承.依赖:当类A的操作里用到类B时,就说类A依赖类B 用------->来表示聚集:上面讲过了.图示为: 部分类―――――◇ 总的类组成:同上.图示为: 部分类―――――◆ 总的类接口:听说有两种:1)在类图的类名上面写<<interface>>, 2)把类名写成IClassName的格式.实现:是说类和接口之间的关系,用-------△(这个三角要右转90度)来表示另外,接口可以简化成一个圆圈.可见性: + 公有 # 保护 - 私有有点搞的地方:1,关联和依赖:简单的说,关联是指把类B定义成类A的属性. 依赖是指,类A的一个方法,用到了类B.2,聚集和组成:聚集,少几个没问题. 组成,少一个不成. // 其实还是不知道两者有什么实际意义,感觉还是一回事.。
UML各种图总结-精华UML(UnifiedModelingLanguage)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。
一、基本概念如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。
静态图分为:用例图,类图,对象图,包图,构件图,部署图。
动态图分为:状态图,活动图,协作图,序列图。
1、用例图(UseCaseDiagrams):用例图主要回答了两个问题:1、是谁用软件。
2、软件的功能。
从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
2、类图(ClassDiagrams):用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。
在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
各种关系的强弱顺序:泛化=实现>组合>聚合>关联>依赖2.1.泛化【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
2.2.实现【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.3.关联【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量2.4.聚合【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
UML 2.0共有10种图,分别为表示系统静态结构的静态模型(包括类图、组合结构图、部署图),以及表示系统动态结构的动态模型(包括用例图、序列图、对象图、协作图、状态图、活动图、组件图),它们各用以表现不同的视图,如表1-1所示。
用例之间也可以存在包含、扩展和泛化等关系:
(1)包含关系:用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为做为自身行为的一部分,这被称作包含关系。
(2)扩展关系:扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。
它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。
在以下几种情况下,可使用扩展用例:
a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开);
b.表明只在特定条件(如例外条件)下才执行的分支流;
c.表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入。
所插入的行为段和插入的顺序取决于在执行基本用例时与主角进行的交互。
(3)泛化关系:用例可以被特别列举为一个或多个子用例,这被称做用例泛化。
当父用例能够被使用时,任何子用例也可以被使用。
如在图2.4中,订票是电话订票和网上订票的抽象。
UML建模的六种图解释与应用UML(Unified Modeling Language)是一种用于软件系统开发和设计的标准化语言,由Grady Booch、James Rumbaugh和Ivar Jacobson等大师共同开发。
UML不仅具有图形化表示系统结构的能力,还能够从不同角度分析和设计软件系统的结构。
UML中的图形化表示是UML建模的关键特点之一,下面将解释UML的六种图。
一、用例图用例图是UML建模的第一种图形化表示法,它对系统的功能进行了整体把握,并说明系统和外部环境之间的交互关系。
在用例图中,系统和外部的人员和物体都表示成参与者,而系统和外部参与者之间的交互行为则用用例来描述,用例可以表示系统的内部处理过程或与外界协调完成的事件。
例如,我们可以使用用例图来表示一个在线购物网站的功能,网站本身就是一个系统,用户可以通过在网站上购买商品,而交互行为包括注册、登录、搜索商品、加入购物车、下订单以及查询订单等操作。
在用例图中,网站就是系统,用户是参与者,用例分别表示各种交互功能。
二、类图类图是UML建模的第二种图形化表示法,它主要用于定义系统中的对象的属性和方法,并描述这些对象之间的关系。
在类图中,类是表示系统中实际对象的模型,类包括类名、属性和方法,类之间的关系一般有继承、关联、聚合和组合四种。
例如,我们可以使用类图来表示一个学生选课系统,其中学生和课程就是类,属性包括学生的姓名、学号、所选课程等,方法包括选课、退课等,类之间的关系可以用关联和聚合来表示。
三、时序图时序图是UML建模的第三种图形化表示法,它主要用于描述系统中的对象之间的交互过程,包括对象之间的消息传递、方法调用以及时间顺序等。
在时序图中,对象一般用竖直方向的生命线表示,消息则用水平方向的箭头表示,并标明消息发送者、接受者和消息内容,可以清晰地描述系统中复杂的交互过程。
例如,我们可以使用时序图来表示一个学生选课系统中学生选课的整个流程,从学生登陆网站开始,选择课程和提交选课申请,再到后台管理员审核后确认选课,之后再将该课程加入到学生的选课列表,最后生成成绩单等交互流程。
UML 各种图总结精华UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
下面将对UML的九种图+包图的基本概念进行介绍以及各个图的使用场景。
一、基本概念如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。
静态图分为:用例图,类图,对象图,包图,构件图,部署图。
动态图分为:状态图,活动图,协作图,序列图。
1、用例图(UseCase Diagrams):用例图主要回答了两个问题:1、是谁用软件。
2、软件的功能。
从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
2、类图(Class Diagrams):用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖2.1.泛化【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
2.2.实现【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.3.关联【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量2.4. 共享聚合【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
一.用例图用例模型是把应满足用户需求的基本功能(集) 聚合起来表示的强大工具。
用例模型的基本组成部件是用例角色和系统。
引入用例的主要目的是:确定系统应具备哪些功能这些功能是否满足系统的需求开发者与用户协商达成共识的东西为系统的功能提供清晰一致的描述,以便为后续的开发工作打下良好的交流基础,方便开发人员传递需求的功能为系统验证工作打下基础通过验证最终实现的系统能够执行的功能是否与最初需求的功能相一致保证系统的实用性从需求的功能用例出发提供跟踪进入系统中具体实现的类和方法检查其是否正确的能力特别是为复杂系统建模时常用用例模型构造系统的简化版本(也就是精化系统的变化和扩展能力使系统不要过于复杂)然后利用该用例模型跟踪对系统的设计和实现有影响的用例简化版本构造正确之后通过扩展完成复杂系统的建模图示用例图时既要画出三种模型元素,同时还要画出元素之间的各种关系(通用化关联依赖)用例代表的是一个完整的功能。
如何发现用例实际上从识别角色起发现用例的过程就已经已开始了对于已识别的角色通过询问下列问题就可发现用例●角色需要从系统中获得哪种功能角色需要做什么●角色需要读取产生删除修改或存储系统中的某种信息吗●系统中发生的事件需要通知角色吗或者角色需要通知系统某件事吗这些事件功能能干些什么●如果用系统的新功能处理角色的日常工作是简单化了还是提高了工作效率●还有一些与当前角色可能无关的问题也能帮助建模者发现用例例如●系统需要的输入/输出是什么信息这些输入/输出信息从哪儿来到哪儿去●系统当前的这种实现方法要解决的问题是什么也许是用自动系统代替手工操作UML 中的用例UML 中的用例用椭圆形表示用例的名字写在椭圆的内部或下方用例位于系统边界的内部角色与用例之间的关联关系或通信关联关系用一条直线表示用例和角色之间有连接关系用例和角色之间的关系属于关联association 又称作通信关联communication association,这种关联表明哪种角色能与该用例通信,关联关系是双向的一对一关系,即角色可以与用例通信,用例也可以与角色通信。
用例关系用例之间有扩展使用组合三种关系扩展和使用是继承关系即通用化关系的另一种体现形式组合则是把相关的用例打成包package 当作一个整体看待1 扩展关系一个用例中加入一些新的动作后则构成了另一个用例这两个用例之间的关系就是通用化关系又称扩展关系后者通过继承前者的一些行为得来前者通常称为通用化用例后者常称为扩展用例扩展用例可以根据需要有选择地继承通用化用例的部分行为扩展用例也一定具有完全性2 使用关系一个用例使用另一个用例时这两个用例之间就构成了使用关系一般情况下如果若干个用例的某些行为都是相同的则可以把这些相同的行为提取出来单独作成一个用例这个用例称为抽象用例这样当某个用例使用该抽象用例时就好象这个用例包含了抽象用例的所有行为二类图所谓对象就是可以控制和操作的实体,类是对象的抽象描述,它包括属性的描述和行为的描述二方面,构建面向对象模型的基础是类对象和它们之间的关系类图是用类和它们之间的关系描述系统的一种图示是从静态角度表示系统的因此类图属于一种静态模型类图是构建其它图的基础没有类图就没有状态图协作图等其它图也就无法表示系统的其它各个方面类图中允许出现的模型元素只有类和它之间的关系类用长方形表示长方形分成上中下三个区域每个区域用不同的名字标识用以代表类的各个特征上面的区域内用黑体字标识类的名字中间的区域内标类的名字识类的属性下面的区域内标识类的操作方法即行为这三部分作为一个整体描述某个类属性的可见性可以不限于上述的三种某些具体的程序设计语言还可以定义其它的可见性类型但是在表示类图时必须含有公有类型和私有类型在类图中公有类型表示为加号+ 私有类型表示为减号-它们标识在属性名称的左侧如图4-4 所示如果属性名称旁没有标识任何符号表示该属性的可见性尚未定义描述属性的语法格式为可见性属性名类型名= 初值{性质串}枚举类型的属性经常使用性质串操作在类图中操作部分位于长方形的最底部一个类可以有多种操作每种操作由操作名参数表返回值类型等几部分构成标准语法格式为可见性操作名参数表返回值类型{性质串}参数表由多个参数用逗号分开构成参数的语法格式为参数名参数类型名= 缺省值有一种特别的类叫做持久类persistent class 如图4-11 所示的类就是一个持久类当产生对象的程序draw 运行结束时所需的对象便生成了同时生成的对象将自身存入数据库文件或其它永久性的存储器中类之间的关系类图由类和它们之间的关系组成类与类之间通常有关联通用化(继承) 依赖和精化等四种关系关联可分为普通关联递归关联限定关联或关联有序关联三元关联和聚合等七种普通关联:由于关联是双向的可以在关联的一个方向上为关联起一个名字而在另一个方向上起另一个名字也可不起名字名字通常紧挨着直线书写导航关联:类与类之间的关联是单向的类图中图示关联中的数量关系--------重数0..1 表示零到1 个对象0..*或* 表示零到多个对象5..17 表示5 到17 个对象2表示2 个对象对于多对多的双向关联可以转化为两个一对多的关联来实现对象图对象的图示方式与类的图示方式几乎是一样的主要差别在于对象的名字下面要加下划线对象名有下列三种表示格式第一种格式形如对象名类名即对象名在前类名在后中间用冒号连接第二种格式形如类名这种格式用于尚未给对象命名的情况注意类名前的冒号不能省略第三种格式形如对象名这种格式不带类名即省略类名递归关联如果一个类与它本身有关联关系那么这种关联称为递归关联recursive association角色任何关联关系中都涉及到与此关联有关的角色也就是与此关联相连的类中的对象所扮演的角色引入角色的好处是指明了类和类的对象之间的联系(CONTEXT)限定关联限定关联用于一对多或多对多的关联关系中在限定关联中使用限定词将关联中多的那一端的具体对象分成对象集限定词可以理解为一种关键词用关键词把所有的对象分开利用限定关联可以把模型中的重数从一对多变成一对一类图中限定词放置在关联关系末端的一个小方框内紧挨着开始导航的类有序关联对象与对象之间的连接可以具有一定的次序就像应把窗口安排在屏幕之上一样一般情况下对象之间的关联都是无序的如果要明确表示关联中的次序关系一定要将规格说明{排序}放在表示关联的直线旁且紧挨着对象被排序的类三元关联类与类之间的关联关系不仅限于两个类之间多个类之间也可以有关联关系如果三个类之间有关联关系则称之为三元关联三元关联图示为一个大的菱形菱形的角与关联的类之间用直线相连也可以用虚线连接聚合聚合是关联的特例如果类与类之间的关系具有整体与部分的特点则把这样的关联称为聚合如图4-35 是一个带角色的复合聚合的示例图中给出了三种图示方法角色名位于部分类一方按钮和图标4.35 a 是带角色名的复合聚合图示4.35 b 是带角色的复合聚合的标准语法形式 4.35 c 采用将属性名变成角色名将属性的类型变成类的方法的形式图示复合聚合通用化一个类通用元素的所有信息属性或操作能被另一个类具体元素继承继承某个类的类中不仅可以有属于自己的信息而且还拥有了被继承类中的信息这种机制就是通用化受限通用化给通用化关系附加一个约束条件进一步说明该通用化关系的使用方法或扩充方法这样的通用化关系称为受限通用化预定义的约束有四种多重不相交完全和不完全图4-44 图示了二种约束通用化的表示方法图4-44 a 是多个子类共用一个箭头指向父类约束用花括号括起来放在直线旁边多个约束之间用逗号分隔图4-44 b 中的继承关系是单独图示的这种情况下要另外附加一条虚线穿越所有的继承关系多重继承多重继承指的是子类的子类可以同时继承多个上一级子类图4-45 所示的水陆两用类就是通过多重继承得到的依赖和精化关系依赖关系描述的是两个模型元素类组合用例等之间的语义上的连接关系UML 中的规则称为约束和派生约束用于限制一个模型我们已经讨论过的约束有或关联有序关联和四种继承约束多重不相交完全和不完全派生用于描述某种事物的产生规则约束关联派生关联派生属性由其它属性通过某种方式计算得来派生属性前面加一个斜线表示它并不真正出现在类的对象中派生属性的计算公式用括号括起来放在类的下方对UML 模型元素应用的约束和派生规则也可以用UML 语言语法机制表示表示规则的语法称为导航表达式它构成说明一个具体规则的基本语句根据需要有时可以扩展导航表达式下面介绍五种常见语法的书写形式形式一set.attributeset 是一个表达式代表一个对象或对象集attribute 是set 所代表对象的一个属性名它们之间用. 号相连接形式一的结果是属性的值结果值可能是单值也可能是多值具体结果依赖于关联的重数形式二set.role其中set 的含义同形式一role 代表关联关系中目的方角色名它们之间用. 相连形式二的结果为一个或多个对象对象的多少依赖于关联的重数形式三set.~role形式三与形式二的含义差不多不同之处在于role 代表关联关系中的起始方角色名role 前面多加一个~ 符号表示对关联关系的逆转具体结果仍然是与关联的重数有关的对象或对象集形式四set [布尔表达式]set 是代表一个对象或多个对象的表达式布尔表达式用set 中的对象书写并用方括号括起来形式四的结果值是使布尔表达式为真的对象是set 的一个子集形式五set.[限定词的值]set 是代表一个对象或多个对象的表达式限定词指明一个限定set 的限定关联限定词代表限定关联中的限定属性值动态建模所有系统均可表示为两个方面静态结构和动态行为UML 提供图来描述系统的结构和行为类图(class diagram)最适合于描述系统的静态结构类对象以及它们之间的关系而状态序列协作和活动图则适合于描述系统的动态行为即描述系统中的对象在执行期间不同的时间点是如何动态交互的系统中的对象需要相互通信它们相互发送消息本章中描述的动态图有状态图状态图描述对象在生命周期内处于哪些状态每一种状态的行为以及什么样的事件引起对象状态发生改变例如一张发票可以是已付(状态paid)和未付(状态unpaid)序列图描述对象如何相互交互和通信序列图中的最要的是时间通过序列图可以看出为了完成某种功能一组对象如何发送和接收一序列消息协作图协作图也是描述对象交互的但侧重于空间的协作意即明确地给出对象间的关系(链接) 活动图也是描述对象交互的但侧重于工作的描述当对象相互交互时需要执行一些工作或活动这些活动以及它们的出现顺序就是活动图所要描述的简单消息表示普通的控制流它只是表示控制是如何从一个对象传给另一个对象而没有描述通信的任何细节这种消息类型主要用于通信细节未知或不需要考虑通信细节的场合它也可以用于表示一个同步消息的返回也就是说箭头处理消息的对象指向调用者表示控制返回给调用者同步消息一个嵌套控制流典型情况下表示一个操作调用处理消息的操作在调用者恢复执行之前完成(包括任何在本次处理中发送的其它消息) 返回可以用一个简单消息来表示或当消息被处理完毕隐含地表示异步消息异步控制流中没有直接的返回给调用者发送者发送完消息后不需要等待消息处理完成而是继续执行在实时系统中当对象并行执行时常采用这类消息状态图:状态图主要用来描述对象子系统系统的生命周期通过状态图可以了解到一个对象所能到达的所有状态以及对象收到的事件(收到消息超时错误条件满足)对对象状态的影响等所有的类只要它有可标记的状态和复杂的行为都应该有一个状态图一个状态一般包含三个部分第一部分为状态的名称如空闲已付移动第二部分为可选的状态变量的变量名和变量值属性(变量)指的是状态图中类的属性在某些情况下临时变量也是很有用的如计数器第三部分为可选的活动表列出有关的事件和活动活动部分的语法如下:事件名参数表'/' 动作表达式状态转移的语法表示如下event-signature '{' guard-condition '}' '/' action-expression'^' send-clause其中"event-signature"的语法表示如下事件名'{' 参数',' , …'}'"send-clause"的语法表示如下destination-expression '.' destination-event-name '{' argument ',' …'}'从图5-7 中可以看出"event-signature"由事件名参数触发状态转移的事件与事件有关的附加数据组成参数由逗号隔开的参数表来表示其语法表示如下参数名':' 类型表达式参数名':' 类型表达式, …守卫条件是状态转移中的一个布尔表达式如果将守卫条件和事件说明放在一起使用的话则当且仅当事件发生且布尔表达式成立时状态转移才发生如果状态转移只有守卫条件这一个条件则只要守卫条件为真状态转移就发生带守卫条件动作表达式(Action-Expression)动作表达式是一个过程表达式当状态转移开始时执行如图 5.9 所示它可以由对象(拥有所有状态的对象)的操作和属性组成也可以由事件说明中的参数组成在一个状态转移中允许有多个动作表达式但是多个动作表达式之间必须用斜杠(/)分隔开动作表达式按指定顺序(从左至右)一个一个地执行不允许有嵌套的动作表达式或递归的动作表达式但是只带一个动作表达式的状态转移是可能的下面就是只有一个动作表达式的状态转移的例子( ':= '表示赋值)increase () / n := n + 1 / m := m + 1add (n) / sum := sum + n/ flash发送子句是动作的特例它被用来在两个状态转移之间发送消息发送子句由目的表达式和事件名组成目的表达式由一个或多个对象组成事件名是对目的对象(一组对象)有意义的事件的名称目的对象可以是对象本身可以将:[ timer = Time-out ] / go down (first floor)转换成一个发送子句[ timer = Time-out] ^ self.go down (first floor)再举几个带发送子句的状态转移的例子out_of_paper () ^ indicator.light()left_mouse_btn_down(location) / color := pick_color(location) ^pen.set(color)UML 中有四类事件条件成真即状态转移上的守卫条件收到另一个对象中的信号信号本身也是一个对象在状态转移中表示为事件说明这类事件也称作消息收到另一个对象(或对象本身)的操作调用在状态转移中表示为事件说明这类事件也称为消息经过指定时间间隔通常情况下时间是从另一个指定事件(通常是当前状态的入口)或一给定时间段之后开始计算的在状态转移中表示为时间表达式需要注意的是错误也可以是事件对建模也许有用UML 并不对错误事件提供直接的支持但是可以将错误事件定义成版类(stereotype) 例如<<error>> out_of_memory。