UML交互图
程序员必备画图技能之——时序图

程序员必备画图技能之——时序图什么是时序图时序图(Sequence Diagram),⼜名序列图、循序图,是⼀种UML交互图。
它通过描述对象之间发送消息的时间顺序显⽰多个对象之间的动态协作。
使⽤场景时序图的使⽤场景⾮常⼴泛,⼏乎各⾏各业都可以使⽤。
当然,作为⼀个软件⼯作者,我这边主要列举和软件开发有关的场景。
1. 梳理业务流程⼀般的软件开发都是为了⽀撑某个具体的业务。
有时候业务的流程会⽐较复杂,涉及到多种⾓⾊,这时就可以使⽤时序图来梳理这个业务逻辑。
这样会使业务看起来⾮常清晰,代码写起来也是⽔到渠成的事情了。
2. 梳理开源软件作为⼀个合格的程序员,阅读源代码的能⼒⼀定要过关。
⼀般成熟框架的源代码调⽤深度都⽐较深,类之间的调⽤关系也⽐较复杂。
我喜欢⽤时序图来梳理框架中这些对象之间的关系。
⽐如再看Tomcat 启动流程的过程中,我就时序图梳理了各个组件之间的关系,看起来层次⾮常清楚,也便于记忆。
时序图的⾓⾊我们在画时序图时会涉及下⾯7种元素:⾓⾊(Actor)对象(Object)⽣命线(LifeLine)控制焦点(Activation)消息(Message)⾃关联消息组合⽚段。
其中前6种是⽐较常⽤和重要的元素,最后的组合⽚段元素不是很常⽤,但是⽐较复杂。
我们先介绍前6种元素,再单独介绍组合⽚段元素。
1. ⾓⾊(Actor)系统⾓⾊,可以是⼈或者其他系统和⼦系统。
以⼀个⼩⼈图标表⽰。
2. 对象(Object)对象位于时序图的顶部,以⼀个矩形表⽰。
对象的命名⽅式⼀般有三种:对象名和类名。
例如:华为⼿机:⼿机、loginServiceObject:LoginService;只显⽰类名,不显⽰对象,即为⼀个匿名类。
例如::⼿机、:LoginSservice。
只显⽰对象名,不显⽰类名。
例如:华为⼿机:、loginServiceObject:。
3. ⽣命线(LifeLine)时序图中每个对象和底部中⼼都有⼀条垂直的虚线,这就是对象的⽣命线(对象的时间线)。
UML科普文,一篇文章掌握14种UML图

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 第五章 序列图和通信图

5.3 建立序列图
3. 添加消息
按发生的顺序在对象之间添加交互消息。
– 客户通过发送创建消息EntryDialogue打开登录对话 框
– 客户通过发送inputUserInfo消息向登录对话框中输 入用户信息
– 登录对话框通过发送sendUserInfo消息将用户信息发 往服务器
5.3 建立序列图
server:Server
database:DataBase
e n tryDi a l o g :En tryDi a l o g En tryDi a l o g ()
«create»
i n p u tUse rIn fo ()
sendUserInfo()
i n p u tUse rIn fo ()
5.3 建立序列图
1. 确定事件流
“用户登录”的异常流: 用户输入的信息与数据库中存储的信息不匹配,数据库 验证不通过,弹出错误信息。
5.3 建立序列图
2. 布置对象
基本流中的对象主要有客户(client)、数据库(database)、 服务器(server)、登录对话框(entryDialogue)、好友 列表(friendList)
– 服务器再把该用户信息发往数据库进行身份验证, 若合法,返回消息允许用户登录,同时服务器通过 向自身发送updateList消息更新在线用户列表
– 服务器通过创建消息FriendList创建该用户好友列表 – 通过消息getOfflineMessage向数据库请求其他好友向
该用户发送的离线
5.3 建立序列图
3. 添加消息
按发生的顺序在对象之间添加交互消息。
– 客户通过发送创建消息EntryDialogue打开登录对话框
UML九种建模图--顺序图

UML九种建模图--顺序图概述顺序图是⼀种交互图(interaction diagram).交互图展现了⼀种交互,它由⼀组对象或参与者以及它们之间可能发送的消息构成。
交互图专注于系统的动态视图。
顺序图是强调消息的时间次序的交互图。
组成顺序图主要有4个标记符:对象、⽣命线、消息和激活。
对象三种表⽰⽅法1.包括对象名和类名,2、只有类名3.只有对象名⽣命线⽣命线⽤于描述对象的存在周期,对象下⽅的虚线就是该对象的⽣命线。
激活控制焦点是指活动者或对象处于执⾏状态的时间段消息消息⽤于描述对象间交互的⽅式及内容。
消息分为四种:同步消息、异步消息、返回消息、⾃关联消息1.同步消息:⼀个对象向另⼀个对象发出同步消息后,将处于阻塞状态,⼀直等到另⼀个对象的回应表⽰⽅式:2.异步消息:⼀个对象向另⼀个对象发出异步消息后,这个对象可以进⾏其他的操作,不需要等到另⼀个对象的响应表⽰⽅式:3.返回消息:同步消息的返回消息表⽰⽅式:4.⾃关联消息:⽤来描述对象内部函数的互相调⽤表⽰⽅式:还有顺序图中对于流程控制的模块:复合⽚段复合⽚段有多种,在此主要介绍⼀下⼏种:条件判断、可选、循环、同步1.条件判断:⽤于描述代码中if…else…这种结构标记为“alt”例如:2.可选:是⼀种特殊的“条件判断”,它只是⼀个if,没有else if或else 可选的标记为:opt3.循环:是指代码中的for、while之类的语句块循环的标记为:loop例如:下图中[m,n]是指⾄少执⾏m次,最多执⾏n次4.同步:⽤于描述多线程的情况同步的标记是:par画顺序图的步骤:1. 确定交互的范围2. 确定参与交互的活动者与对象3. 确定活动者、对象的⽣存周期4. 确定交互中产⽣的消息5. 细化消息的内容。
UML交互图

UML交互图目录1、UML交互图概述 (1)2、使用交互图的场合 (1)3、UML交互图作用 (2)4、UML交互图如何绘制? (3)5、协作图 (3)6、序列图 (4)1、UML交互图概述UML交互图描述的是对象之间的动态合作关系以及合作过程中的行为次序。
UML交互图常常用来描述一个用例的行为,显示该用例中所涉及的对象以及这些对象之间的消息传递情况,即一个用例的实现过程。
UML交互图包括两种:序列图和协作图。
序列图:显示对象之间的关系,强调对象之间消息的时间顺序,显示对象之间的交互。
协作图:描述对象之间的交互关系2、使用交互图的场合我们现在来讨论交互图在实际情况中的应用。
要了解实际应用中,我们需要了解的基本性质序列图和协作图。
这两个图的主要目的,是相似的,因为它们是用来捕捉系统的动态行为:序列图是用来捕获从一个对象到另一个消息流的顺序;协作图用来描述参与相互作用中的对象的结构组织。
一个单一的图是不足以说明整个系统的动态环节,这样的一套图是用来捕获一个整体。
使用交互图,当我们想要了解的消息流和组织结构。
消息流装置控制流从一个对象到另一个序列和结构组织的装置,在一个系统中的元素的视觉组织。
以下是交互图的用法:2.1.按时间顺序的控制流建模。
2.2.为了模拟流结构组织控制。
2.3.对于正向工程。
2.4.逆向工程。
3、UML交互图作用UML交互图主要包括对象和消息两类元素,创建交互图的过程实际上就是向对象分配任务的过程,是可视化系统的交互行为。
由于可视化的交互是一个困难的任务,所以要使用不同类型的模型来捕获不同方面的相互作用,这也是序列图和时序图的作用。
总而言之,对交互图的描述如下:3.1.交互图捕捉一个系统的动态行为;3.2.交互图用来描述该系统中的消息流;3.3.交互图用来描述对象的结构组织;3.4.交互图是为了描述对象之间的互动。
4、UML交互图如何绘制?我们已经了解了交互图的作用就是捕捉系统的动态环节。
UML-09-交互图-协作图和时序图

3. 消息 ③返回消息( Return ) 返回消息 返回消息表示从消息接受对象返回信息。 返回消息表示从消息接受对象返回信息。 表示从消息接受对象返回信息
返回消息
3. 消息 ④阻止消息 阻止消息指消息发送者发出消息给接收者, 阻止消息指消息发送者发出消息给接收者,如果接 消息指消息发送者发出消息给接收者 收者无法立即接收这个消息,则发送者放弃这个消息。 收者无法立即接收这个消息,则发送者放弃这个消息。
其中: 其中: Simple和Asynchronous(异步)同义 Synchronous (同步)和Procedure Call同义 Return 不变 新增: 新增: 阻止(Balking) 阻止( )
接受者如果无法立即接收,则发送者放弃消息;
超时( 超时(Timeout): ):
如果接受者无法在指定时间内接收,则发送者放弃 消息。
6.1.1 交互图的概念
1. 交互图的概念 交互图(interaction): 用来描述对象之间、对象与参与 用来描述对象之间、 交互图 者之间的动态协作关系, 者之间的动态协作关系,以及协作过程中行为次序的图 形。 2.交互图的类型 2.交互图的类型 顺序图( 顺序图( Sequence diagram ) 协作图( 协作图( Collaboration diagram )
消息 对象
生命线
控制焦点
2. 顺序图样式和组成
●
① 对象的命名
:类名 :对象名
对象名: 对象名:类名
匿名对象
2. 顺序图样式和组成 ① 对象的命名
●
② 生命线 表示对象存在的时间,对象下面一条虚线表示。 表示对象存在的时间,对象下面一条虚线表示。
对象生命线
×
uml建模第七章 交互图

图7-13 ref操作符
7.1 顺序图——顺序图的深入
顺序图中使用其它的技术: 1、使用注释 2、使用约束 3、使用状态
7.1 顺序图——顺序图建模
1. 为每一个用例编写事件流,包括一个基本事件 流和若干可选事件流或异常流; 2. 识别事件流中参与交互的对象; 3. 为每个事件流绘制顺序图,包括为每个对象设 置生命线,即确定哪些对象存在于整个交互过 程中,哪些对象在交互过程中被创建和撤销; 4. 从引发这个交互过程的初始消息开始,在生命 线之间自顶向下依次画出随后的各个消息; 5. 如果需要,可以画上交互片段、交互引用和约 束等。
7.2 通信图
三、组成元素 1、对象
(2)主动对象(活动对象) 一组属性和一组方法的封装体,其中至少有一 个方法不需要接收消息就能主动执行(称作主 动方法)。
UML中
Rose中
7.2 通信图
三、组成元素 2、链
用来连接对象,消息显示在链的旁边,一个链 上可以有多个消息。 在顺序图中不使用链,只有协作图中才使用链 的概念。
图7-5 嵌套编号
Rose中的消息
7.1 顺序图——顺序图的深入
顺序图中,对象的行为有循环和分支两
种方式,为了表示这两种行为,引入了 交互片段、区域和操作符的概念。
7.1 顺序图——顺序图的深入
每个交互片段都有一个操作符,操作符
决定了交互片段的执行方式。
1、表示分支的操作符
alt:支持多条件
表7-2常用迭代表达式
迭代表达式 [i:=1..n] [I=1..10] [while(表达式)] [until(表达式)]
语义 迭代n次
I迭代10次 表达式为true时才进行迭代 迭代到表达识为true时,才停止迭代 在对象集合上迭代
UML-8交互作用图

图8.1 把技能加入资源的顺序图
Home
8.1 顺序图
8.1.1 顺序图的组成 8.1.2 对象的创建与销 毁 8.1.3 同步消息与异步消息 8.1.4 交互框架
Home
8.1.5 分支 8.1.6 循环
8.1.7 自调用与回调
8.1.1 顺序图的组成
顺序图是一个二维图形。在顺序图中水平向为对象 维,沿水平方向排列参与交互的对象类角色;竖向为 时间维,沿垂直向下方向按时间递增顺序列出各对象 类角色所发出和接收的消息。 一个顺序图由下列图形元素构成:对象类角色、生 命线、激活期和消息。 1.对象类角色 对象类角色(Class Role)表示在交互中对象可起的 作用。 对象类角色用矩形框图标表示。 在顺序图中对象类角色一般只给出名称,其命名规 则与在对象类图中相同。
Home
8.1.3 同步消息与异步消息
异步消息的接收者必须是一个主动对 象(Active object),即它是一个不需要 消息驱动就能执行其动作的对象。 一个异步消息可以做以下3件事情之一: (1)创建一个新线程。此时的异步消 息连接到一个激活期的顶部。 (2)创建一个新对象。 (3)与一个已经在运行的线程通信。
:打印服务 Print (file) alt Print (file) [Printer free] Store (file) :打印机 :打印队列
[Printer busy]
图8.10 分支示例
Home
8.1.6 循环
消息的循环是指一组消息被多次发出。 在顺序图中循环处理可以用交互框架表示,一组消息 包含在一个交互框架中,这些消息将循环重复发送。 在交互框架左上角的标题框中标明操作符“loop”。操 作符“loop”的语法定义为:loop [(<minint>[,<maxint>])]。 其中,<minint>为循环参数值的下界,<maxint>为循 环参数值的上界,均可为非负整数;<maxint>还可为 “*”,表示无限。 若操作符“loop”不带参数值,则为无限循环。 循环的继续或退出也可由一个出口条件控制。出口条 件可用条件表达式表示,其值是循环的次数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类图如下
student + + + + + + + + name address ID age sex : : : : : std::string std::string int int char + + + + + + + + schedule semester : int commit () selectcourse () changecourse () delete () submit () updata () save () pass () : : : : : : : : void void void void void void void void 0..1 0..*
活动者或对象
一般活动者和对象按照从左到右的顺序排列, 主要活动者排在最左边;
活动者或对象
对象的命名方式有三种:
包括对象名和类名 类名(匿名对象) 对象名(不关心类)
生命线
每个对象都有自己的生命线,是一条垂直的虚线,用 来表示一个对象在一段时间内存在。 如对象生命期结束,则用e () : getID () : getphone () : selectcourse () : givegoals () :
要求
绘制学生修改课程顺序图
控制焦点( focus of control )/激活期
对象执行某个动作的时期
消息
对象间交互信息的方式,消息分为五种:
对象创建、同步调用、返回、异步消息、交叉异步消息、对 象销毁
顺序图元素
间消息来表示, 对象间的通信通过在对象的生命线之 间消息来表示,消息的箭头类型指明 消息的类型。 消息的类型。 同步消息=调用消息(Synchronous Message) 消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接 收者放弃或者返回控制。用来表示同步的意义。 异步消息(Asynchronous Message) 消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动, 不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作 的。 返回消息(Return Message) 返回消息表示从过程调用返回
交互图概述
Sequence Diagram
面向时间描述对象交互的视图
Communication Diagram
对象间消息的结构化视图
顺序图
按照时间顺序显示对象之间交互的图;
组成
活动者(actor) 对象(object) 生命线(lifeline) 控制焦点( focus of control )/激活期 消息(message) 交互片断(Interaction Frame)
交互图
交互图概述
Interaction diagram,是描述对象之间的关系 和对象之间的信息传递的图; 强调对象交互的图
顺序图(Sequence Diagram) 通信图(Communication Diagram)
专门的图
时间图(Timing Diagram) 交互纵览图(Interaction Overview Diagram)
交互片断
consider
表示只允许出现列表中的消息
交互片断
Break
通常break用来定义一个含有监护条件的子片断。 如果监护条件为“真”则执行子片断,而且不执行包 “ ” 含子片断的图中 其它交互;如果 监护条件为“假”, “ ” 那么执行将正常 地继续进行
22
交互片断
Critical
表示该子片断是“临界区域”,在临界区域中生命线 “ ” 上的事件序列不能够和其它区域中的任何其他事件 交错。通常用来表示一个原子性的连续操作,例如 事务性操作
练习
3、管理员通过课程管理器打印所有课程信息
作业
问题: 软件学院打算开发一个学生选课系统。 新的系统允许学生利用局域网上的PC机来注册本学期的课程,并可以查看自 己已学的所有课程的所有成绩。新的系统允许教师决定要教哪些课程,并通过管理员 更新数据库,教师在学期末登记自己教授的课程的成绩。 学院已有课程目录(course catalog)数据库部分,课程目录数据库中保存了所有 的课程信息新的学生注册系统将读取课程目录数据库中的课程信息,但不会修改数据 库中的课程信息。管理员通过其它系统来维护课程信息 在每个学期初,学生可以获取这个学期所开设的所有课程的目录,在课程目录 中包含每门课的详细信息,如professor(讲课教师,因为后面约定老师可以有教授、 副教授和讲师3种类型), department, prerequisite等。 每个学生在一个学期,根据自己所在系的培养计划,必修课必须选,选修课自 愿,但一学期不可超过8门课程,不少于3门课程。(第8周周二到周五可以退课,但 必须保证本学期课程不少于3门,退课需交纳50/门的费用,由计费系统扣费,扣费成 功后,该门课程从学生的选课计划中删除,否则,退课不成功) 每门课的学生人数最多为200人,最少为30人,如果选修课学 生人数少于30人,该门课将被取消,必修课无最低人数限制。 在每个学期,有一个选课期,在这个时间段内, 学生可以改变他们的选课计划 (Schedule),注册系统允许学生在这段时间内可以增加或删除所选课程,选课最后一 天只能选课,不可退课,在学期结束的时候,学生可以通过系统查询成 绩,由于学生 成绩属于敏感信息,因此系统要有 安全措施来防止非授权的存取。(学生查询成绩 前,需要先评教)。 教师可以读取系统来获取他们所教的课程的信息,可以了解哪些学生选了他们 的课,也可以登记该门课程的学生成绩。 教师分为讲师、副教授、教授。 此系统涉及到得参与者有:①学生;②教师;③管理员;④课程目录数据库;⑤计费系统。
确定交互的范围; 识别参与交互的对象和活动者; 设置对象生命线的开始和结束; 设置消息; 细化消息;
分析级
可以用来概要描述交互的场景(考虑分析)
设计级
练习
1、用户打印文件,计算机向打印服务器发送打 印命令,打印机如果空闲,则直接打印,否则 把打印文件存储在打印队列中。
32
练习
练习
2、管理员通过课程管理器打印课程UML的信 息;
getteacher () : void addschedule () : void getcshedule () : void deleteschedule () : void getID () : int getname () : std::string getage () : int getsex () : char 0..1
消息
自调用(Self Call)
UML 标记
消息
格式:
交互片断
Alt (条件)
表示多条件的分支结构(选择结构) 虚线分隔区域,每一个区域设置一个监护条件,代 表一个分支
交互片断
Opt (可选)
表示满足条件则执行分支结构
交互片断
loop (循环)
表示该片断执行多次
交互片断
assert
用来表示内容所描述的行为是执行过程中那个时刻 唯一的有效行为。如果 执行到这个片断的前面, 则说明该片断就一定会 发生。它通常和ignore 或consider一起使用, 以断言某种特定种 类的消息行为
交互片断
Par
用来表示“并行”的,也就是用来表示两个或多个并 “ ” 发执行的子片断,并行子片断中单个元素的执行次 序可以以任何可能的顺序相互操作
交互片断
Ref
在一个交互图中,我们可以引用其它的交互图,其 表示的方法是用一个矩形,加上ref操作符,并写明 引用的交互图名称即可
时间约束
26
建立顺序图步骤
teacher + + + + + name ID kinds phone : : : : std::string int std::string int std::string int int void int
0..* course Cname CID Cnum Cteached Cgoals Ctime : : : : : : std::string int int std::string int int 0..*