UML交互图
- 格式:ppt
- 大小:1.49 MB
- 文档页数:33
程序员必备画图技能之——时序图什么是时序图时序图(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类图,有的读者反馈看不懂了,我们今天就来解决⼀哈。
什么是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九种建模图--顺序图概述顺序图是⼀种交互图(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交互图目录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交互图(顺序图、通信图、鲁棒图、定时图)交互与交互图交互的概念一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为消息UML中的4种交互图顺序图:顺序图是一种强调消息时间顺序的交互图,为读者提供了控制流随着时间推移的清晰的可视化轨迹通信图:UML 2.0中的通信图实际上就是UML1中的协作图,它强调的是参加交互的对象的组织,为读者提供了在协作对象结构组织的语境中观察控制流的一个清晰的可视化轨迹定时图:采用了一种带数字刻度的时间轴来精确地描述消息的顺序交互概述图:是交互图和活动图的混合物如何阅读交互图阅读顺序图顺序图的主要元素对象与角色:最顶上一排矩形框。
在交互图中,参与交互的对象既可以是具体的事物,又可以是原型化的事物。
作为具体的事物,一个对象代表现实世界中的某个东西。
例如,aOrder作为类Order的一个实例,可以代表一个特定的订单;而如果作为一个原型化的事件,则aOrder可以代表类Order 的任何一个实例。
生命线与控制焦点:每个对象都有自己的生命线,对象生命线是一条垂直的虚线,用来表示一个对象在一段时间内存在消息:用来描述对象之间所进行的通信的,该信息带有对将要发生的活动的期望。
当传送一个消息时,它所引起的动作是用一个通过对计算过程的抽象而得到的可执行语句(就是方法头)。
消息分为五种:调用、返回、发送、创建和销毁调用:表示调用某个对象一个操作顺序编号(第几步的编号):整个消息的传递过程就形成了一个完整的序列,因此通过在每个消息的前面加上一个用冒号隔开的顺序号来表示其顺序。
除了顺序编号之外,还可以采用嵌套方案:读图小结第1步在dispatchForm(分发窗体)中,对于某个已支付的Order进行分发时,就会调用该订单(一个Order类的实例对象aOrder)的dispatch()方法。
1.1 dispatch()方法将逐个调用[for each orderitem]该Order对应的所有OrderItem对象的getPeddleryId()方法获取供应商ID 1.2(PeddleryId),1.1.1而OrderItem对象则是通过其所对应的Product对象来的getPeddleryId()方法来获取供应商ID。