1、UML -1-UML 基础教程基础教程UML -2-目录目录目录1. 前言1.1前言1.2UML概述1.3UML事物1.4UML关系1.5各 UML图及特征1.6各 UML图的关系1.7UML语法1.8习题2. 用例图2.1用例图概要2.2用例图中的事物及解释2.3用例图中的关系及解释2.4例子2.5习题3. 类图3.1类图概要3.2类图中的事物及解释3.3类图中的关系及解释3.4类图与代码的映射3.5类图例子3.6习题4. 顺序图4.1概要4.2顺序图中的事物及解释4.3顺序图与用例图和类图的关系4.4顺序图例子4.5 练习题5. 协作图5.1概要5.2协作图中的事物及解释5.3协作图中的关
2、系及解释UML -3-目录目录目录5.4对消息标签的详细讲解5.5协作图例子5.6协作图与顺序图的区别和联系5.7练习题6. 状态图6.1状态图概要6.2状态图的组成6.3状态图中的事物及解释6.4状态的可选活动表6.5简单的例子 :对象的状态图6.6复杂的例子 :网上银行登陆系统6.7练习7. 活动图7.1活动图概要7.2活动图事物7.3活动图关系7.4活动图实例7.5活动图练习8. 构件图8.1构件图概要8.2构件图中的事物及解释8.3构件图中的关系及解释8.4构件图的例子8.5习题9. 部署图9.1部署图概要9.2部署图中的事物及解释9.3部署图中的关系及解释9.4部署图的例子9.5关于
3、部署图与构件图9.6习题附录UML -4-1. 前言1.前言前言1.1 前言本资料对 UML1.5各种模型图的构成和功能进行说明,通过本资料的学习达到可以读懂UML模型图的目的。本资料不涉及模型图作成的要点等相关知识。1.2 UML概述1.2.1 UML简介UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。UML的定义包括 UML语义和 UML表示法两个部分。(1) UML语义 : UML对语义的描述使开发者能在语义上取得一致认识,消除了因人而异的表达方法所造成的影响
4、。(2) UML表示法 : UML表示法定义 UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。1.2.2 UML模型图的构成事物 (Things): UML模型中最基本的构成元素,是具有代表性的成分的抽象关系 (Relationships):关系把事物紧密联系在一起图 (Diagrams ):图是事物和关系的可视化表示UML -5-1. 前言1.前言前言1.3 UML事物UML包含 4种事物 : 构件事物 行为事物 分组事物 注释事物1.3.1 构件事物 : UML模型的静态部分,描述概念或物理元素它包括以下几种:类 :具有相同属性相同操作 相同关系相同语
5、义的对象的描述接口 :描述元素的外部可见行为,即服务集合的定义说明协作 : 描述了一组事物间的相互作用 的集合用例 :代表一个系统或系统的一部分行为,是一组动作序列的集合构件 :系统中物理存在,可替换的部件节点 :运行时存在的物理元素另外,参与者、信号应用、文档库、页表等都是上述基本事物的变体1.3.2 行为事物 : UML模型图的动态部分,描述跨越空间和时间的行为交互 :实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接状态机 :描述事物或交互在生命周期内响应事件所经历的状态序列1.3.3 分组事物 : UML模型图的组织部分,描述事物的组织结构包 :把元素组织成组的机制1.
6、3.4 注释事物 : UML模型的解释部分,用来对模型中的元素进行说明,解释注解 :对元素进行约束或解释的简单符号UML -6-1. 前言1.前言前言1.4 UML关系1.4.1依赖依赖 (dependency)是两个事物之间的语义关系,其中一个事物 (独立事物 )发生变化,会影响到另一个事物 (依赖事物 )的语义1.4.2关联关联 (association)是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系1.4.3泛化泛化 (generalization)是一种特殊 /一般的关系。也可以看作是常说的继承关系1.4.4实现实现 (realization)是类元之间的语义关系,其中
7、的一个类元指定了由另一个类元保证执行的契约UML -7-1. 前言1.前言前言1.5 各 UML图及特征1.5.1 用例图 ( Use Case Diagram ) 用例图是从用户角度描述系统功能, 是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元 类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构 (类的属性和操作 ) 类图是以类为中心来组织的,类图中的其他元素或属于某个类或与类相关联1.5.2 类图 (Class Diagram)LineDraw()RectangleDraw()GroupGraphicsDraw()Add
8、(g : Graphics)Remove(g : Graphics)GetChild(index : int)GraphicsDraw()Add(g : Graphics)Remove(g : Graphics)GetChild(index : int)+childrenUML -8-1. 前言1.前言前言1.5 各 UML图及特征1.5.3 对象图 ( Object Diagram ) 对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类1.5.4 顺序图 (Sequence Diagram) 顺序图显示对象之间的动态合作关系,它强调对
9、象之间消息发送的顺序,同时显示对象之间的交互 顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件UML -9-1. 前言1.前言前言1.5 各 UML图及特征1.5.5 协作图 (Collaboration Diagram) 协作图描述对象间的协作关系,协作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系. 协作图的一个用途是表示一个类操作的实现1.5.6 状态图 (State Chart Diagram) 状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状
10、态和连接这些状态的转换组成Available Locked Sold初始状态assigned tolocktime out unlockbuy状态exchange 转换触发器事件UML -10-1. 前言1.前言前言1.5 各 UML图及特征1.5.7 活动图 (Activity Diagram) 活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动 活动图描述了一组顺序的或并发的活动1.5.8 构件图 (Component Diagram) 构件图为系统的构件建模型 构件即构造应用的软件单元 还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影
11、响UML -11-1. 前言1.前言前言1.5 各 UML图及特征1.5.9 部署图 (Deployment Diagram)部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配类图 顺序图需求分析BDFD/DD类图 顺序图用例图 用例文档用例图 顺序图 主要图之间的关系1.6 各 UML图的关系UML -12-1. 前言1.前言前言1.7 UML语法描述NewClassInterfaceusecaseclasssuspend()flush()对象至少拥有一个进程或线程的类主动类是系统中物理的、可替代的部件构件在系统外部
12、与系统直接交互的人或事物参与者是对一组动作序列的描述用例定义了一个交互,它是由一组共同工作以提供某种协作行为的角色和其他元素构成的一个群体协作是描述了一个类或构件的一个服务的操作集接口对象是对一组具有相同属性、相同操作、相同关系和相同语义的对象的描述类一条实线,可能有方向关联一条带有空心箭头的实线泛化是在运行时存在的物理元素节点一条带有空心箭头的虚线实现一条可能有方向的虚线依赖是 UML模型的解释部分注释事物把元素组织成组的机制包它描述了一个对象或一个交互在生命期内响应事件所经历的状态序列状态机它由在特定语境中共同完成一定任务的一组对象间交换的消息组成交互actorNewProcessorst
13、ateNewPackagecomponetUML -13-1. 前言1. 前言前言1.8习题判断题1、 UML中一共有九种图:它们是用例图、类图、对象图、顺序图、协作图、状态图、活动图、构件图、部署图2、用例图是从程序员角度来描述系统的功能3、类图是描述系统中类的静态结构,对象图是描述系统中类的动态结构4、活动图和状态图用来描述系统的动态行为5、协作图的一个用途是表示一个类操作的实现选择题6、请在下面选项目中选出两种可以互相转换的图(a) 顺序图 (b)协作图 (c) 活动图 (d) 状态图7、下面哪些图可用于 BD阶段(a)用例图 (b)构件图 (c)类图 (d)顺序图答案: 1.正确 2.
14、错误 3.错误 4.正确 5.正确 6. (a)(b) 7.(a)(c)(d)UML -14-2.1 用例图概要2. 用例图2.用例图用例图系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达 。创建新用例,确认候选用例和划分用例范围的优秀法则 -“WAVE”测试 (见附录 ) 用例 (Use Case)在系统外部与系统直接交互的人或事物 (如另一个计算机系统或一些可运行的进程 )。我们需要注意的是:1.参与者是角色 (role)而不是具体的人,它代表了参与者在与系统打交道的过程中所扮演的角色。所以在系统的实际运作中,一个实际用
15、户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。2.参与者作为外部用户 (而不是内部 )与系统发生交互作用,是它的主要特征。3.在后面的顺序图等中出现的 “参与者 ”,与此概念相同,但具体指代的含义,视具体情况而定。参与者 (Actor)UML表示解释事物名称2.2 用例图中的事物及解释 用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。 ( UML参考手册 ) 用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行(或称为发起了哪个用例 )。 用例图多用于静态建模阶段 (主要是业务建模和需求建模 )。UML -15
16、-2. 用例图2.用例图用例图发出箭头的事物 “is a”箭头指向的事物。泛化关系是一般和特殊关系,发出箭头的一方代表特殊的一方,箭头指向的一方代表一般一方。特殊一方继承了一般方的特性并增加了新的特性。泛化参与者之间的关系箭头指向的用例为被扩展的用例,称为扩展用例;箭头出发的用例为基用例。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性;扩展用例在一定条件下才会执行,并且其执行会改变基用例的行为。扩展 include箭头指向的用例为被包含的用例,称为包含用例;箭头出发的用例为基用例。包含用例是必选的,如果缺少包含用例,基用例就不完整;包含用例必须被执行,不需要满足某种条件;其执行并
17、不会改变基用例的行为。包含用例之间的关系表示参与者与用例之间的交互,通信途径。(关联有时候也用带箭头的实线来表示,这样的表示能够显示地表明发起用例的是参与者。 )关联参与者与用例之间的关系图解释关系 extend2.3 用例图中的关系及解释UML -16-2. 用例图2. 用例图用例图实例 1 参与者之间的泛化关系参与者 :经理,安全主管,保安用例 :管理人事,批准预算,批准安全证书,监视周边在参与者之间不存在泛化关系的情况下,各个参与者参与用例的情况分别是:经理参与用例管理人事和批准预算;安全主管参与用例批准安全证书;保安参与用例监视周边。由于安全主管与经理,安全主管与保安之间泛化关系的存在
18、,意味着安全主管可以担任经理和保安的角色,就能够参与经理和保安参与的用例。这样,安全主管就可以参与全部 4个用例。但经理或者保安却不能担任安全主管的角色,也就不能参与用例批准安全证书。实例 2 用例之间扩展和包含关系用例的上下文是:短途旅行但汽车的油不足以应付全部路程。那么为汽车加油的动作在旅行的每个场景 (事件流 )中都会出现,不加油就不会完成旅行。吃饭则可以由司机决定是否进行,不吃饭不会影响旅行的完成。2.4 例子UML -17-2. 用例图2.用例图用例图实例 3. 航空售票的用例图参与者 (actor): clerk,监督员,信用卡服务商,信息亭用例 (use case): Buy t
19、ickets, Buy Subscription, Make charges, Survey sales参与者 Clerk参与 (或称发起 )Buy tickets和 Buy Subscription 两个用例 (关联关系 )。这两个用例的事件流都包含 Make charges用例 (包含关系 )。系统由: Buy tickets, Buy Subscription, Make charges, Survey sales组成。该系统主要包含: Buy tickets, Buy Subscription,Make charges, Survey sales这几个功能。该系统主要面向的用户 (参与
20、者 ): clerk,监督员,信用卡服务商,信息亭。信息亭 Clerk Buy tickets Buy Subscription信用卡服务商Make charges 监督员Survey sales 参与者 用例 Box Office 系统 关系 UML -18-2. 用例图2.用例图用例图1. 右图中的参与者有?(a) 1 (b) 2(c) 3 (d) 42. 右图中的用例有?(a) 1 (b) 2(c) 3 (d) 43. 2和 3之间是什么关系? 5和 6呢?(a) 扩展,包含 (b) 包含,扩展4. 5缺少了 3仍然是个完整的用例?(a) 是的 (b) 不是5. 4能够参与 2吗? 1能
21、够参与 5吗?(a) 可以,不可以 (b) 不可以,可以习题答案 :1、(a)(d) 2、(b)(c) 3、(b) 4、(b) 5、(b)2.5 习题UML -19-3. 类图3.类图类图Personname : stringUseComputer()Computercpu : stringmemory : stringrun()3.2 类图中的事物及解释3.2.1 类 从上到下分为三部分,分别是类名、属性和操作。类名是必须有的 类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等 类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见
22、性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等Account- balance : double = 1+ Deposit(am ount : double) : int+ Com puteInterest() : double可见性-代表 private+代表 public#代表 protected也可以使用 图形 表示返回值类型操作名称斜体为抽象操作缺省值类名斜体为抽象类属性名称参数列表3.1 类图概要 类图以反映类的结构 (属性、操作 )以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法 类图中的 “类 ”与面向对象语言中的 “类 ”的概念是对应的,是对现实
23、世界中的事物的抽象UML -20-3. 类图3.类图类图Shape(标准图形 )Shape+Draw ()(变体图形 )接口Vehicle fMaxSpeed : float+ Start() : int+ Stop() : int抽象类TStacksize : intPush(elem : T) : intPop() : intGetTop() : const Tvirtual int Stop() = 0;virtual int Run(float fSpeed) = 0;private:float fMaxSpeed;Java代码public abstract class Vehicle
24、public abstract int Start();public abstract int Stop();public abstract int Run(float fSpeed);private float fMaxSpeed;Vehicleabstract fM axSpeed : float+Start ()Stop ()Run (float fS p eed): int: int: int3.4 类图与代码的映射3.4.1 类的映射UML -24-3. 类图3.类图类图3.4.2 关联关系的映射C+代码class Dialog private:Button btnOK;Button
25、 btnCancel;TextBox txtInfo;class Button;class TextBox;组合关系,代码表现为 Dialog的属性有Button和 TextBox的对象TextB oxB utto nDialog- btnO K : B utton- btnCancel : Button- tx tInfo : Tex tB ox3.4.3 泛化关系的映射Java代码public class SavingsAccount extends Account Accountbalance : double = 1Deposit(am ount : double) : in tC o
26、mputeInterest() : doubleSavingsAccountCom puteInterest() : doubleC+代码class SavingsAccount : public Account ;UML -25-3. 类图3.类图类图C+代码class Shape public:virtual void Draw() = 0;class Circle : public Shapepublic:void Draw();private;Point ptCenter;int nRadius;Java代码public interface Shape public abstract
27、void Draw();public class Circle implements Shapepublic void Draw();private Point ptCenter;private int nRadius;Shape+ D raw ()CircleptCenternRadius: Point: int+Draw ()RectangleptUpperLeftnWidthnHeight: Point: int: int+ Drarw ()在 C+语言里面,使用抽象类代替接口,使用泛化关系代替实现关系在 Java语言里面,有相应的关键字interface、 implements3.4.
28、4 实现关系的映射3.4.5 依赖关系的映射绑定依赖TStack- size : int+ P us h(e le m : T ) : int+ Pop() : int+ G e tT o p () : c o ns t Tpublic:int Push(T elem);int Pop();const T;typedef Stack FloatStack;C+代码 (编译器生成 )class FloatStack private:int size;public:int Push(float elem);int Pop();const float;UML -26-3. 类图3.类图类图Graph
29、ics: 基本图形和组合图形的父类,声明了所有图形共同的操作,如 Draw;也声明了专用于组合图形管理子图形的操作,如 Add、 RemoveLine、 Rectangle: 基本图形类GroupGraphics: 组合图形类,与父类有组合关系,从而可以组合所有图形对象 (基本图形和组合图形 )LineDraw()RectangleDraw()GroupGraphicsDraw()Add(g : Graphics)Remove(g : Graphics)GetChild(index : int)GraphicsDraw()Add(g : Graphics)Remove(g : Graphics
30、)GetChild(index : int)+children泛化组合组合模式3.5 类图例子3.5.1 图形编辑器 图形编辑器一般都具有一些基本图形,如直线、矩形等,用户可以直接使用基本图形画图,也可以把基本图形组合在一起创建复杂图形 如果区别对待基本图形和组合图形,会使代码变得复杂,而且多数情况下用户认为二者是一样的 组合模式可以用相同的方式处理两种图形UML -27-3. 类图3.类图类图3.5.2 演出售票系统在用例驱动的开发过程中,通过分析各个用例及参与者得到类图。分析用例图的过程中需要根据面向对象的原则设计类和关系,根据用例的细节设计类的属性和操作在这里只考虑以下三个用例:Buy
31、tickets: 买个人票Buy Subscription: 买套票Make charges: 信用卡付款信息亭ClerkBuy ticketsBuy Subscription信用卡服务商Make charges监督员Survey sales参与者用例Box Office关系SubscriptionSeriesseries : intIndividualReservationTicketno : int3601101Reservationdate : DateCustomername : stringphone : string1*1Seatno : intcolomn : introw :
32、intavailable : bool11Performanceno : intdate : Datetime : Time0*1CreditCardServiceCharge(cardnumber, cost)kjoskShowAvailability(seatlist)DemandPayment(cost)PrintTickets(performance, seats)EjectCard()BoxOfficeRequest(count, performance)Select(seats)InsertCard(cardnumber, password)Authorized()用例图类图使用泛
33、化关系处理客户购买个人票和套票两种不同情况设计类的属性和操作UML -28-3. 类图3. 类图类图(1)哪两个类之间存在组合关系 Menu、 MenuItem MenuItem、 Command Command、 OpenCommand Command、 PasteCommand(2)OpenCommand和 PasteCommand是什么关系 组合 泛化 聚合 没关系Command+ E xecute()O penC om m and+ E xecute()PasteCommand+ E xecute()M e n u Ite m- com m and : Com mand*+ Click
34、()1*0*+e xe cutiveMenu+ A dd(item : MenuItem )(3)编辑菜单 (EditMenu)是一种菜单,下面哪个图较好的描述了二者之间的关系(4)下面哪份代码 (C+)最接近于图中对 MenuItem的描述EditMenuMenu+ A dd(item : MenuItem )Menu+ A dd(item : MenuItem )EditMenuEditMenuMenu+ A dd(item : MenuItem )Menu+ Add(item : MenuItem)EditMenuclass MenuItemprivate:virtual void Cl
35、ick() =0;public:Command* command;class MenuItempublic:virtual void Click() = 0;private:Command* command;class MenuItemprivate:virtual void Click() = 0;void undo();public:Command* command;class menuitempublic:virtual void Click() = 0;private:Command* command;3.6 习题 右图描述了菜单 (Menu)、菜单项 (MenuItem)、抽象命令类
36、 (Command)和具体命令类 (OpenCommand, PasteCommand)之间的关系,完成 1-4题UML -29-3. 类图3.类图类图 右图描述了图形接口 (Graphics)、线段 (Segment)、矩形 (Rectangle)、点(Point)和三维点 (Point3D)之间的关系, 完成 5-7题(5)下面哪个关系没有在图中出现关联 泛化 实现 依赖(6)下面对图中四处的多重性的描述哪个不正确 0.* 1 0.* 1(7)下面哪份代码 (Java)最接近于图中对 Segment的描述public class Segment implements Graphicspri
37、vatc void Draw();public Point ptStart;public Point ptEnd;public class Segment extends Graphicspublic void Draw();private Point ptStart;private Point ptEnd;public class Segment implements Graphicsprivate Point ptStart;private Point ptEnd;public void Draw();public class segment implements graphicspubl
38、ic void Draw();private Point ptStart;private Point ptEnd;Graphics+Draw ()SegmentptStartptEnd: Point: Point+Draw ()RectangleptUpperLeftnWidthnHeight: Point: int: int+Drarw ()Pointxy: int: int+Draw ()Point3Dxyz: int: int: int+Draw ()UML -30-4. 顺序图4.顺序图顺序图4.1 概要 顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一
39、个类操作或状态机中引起转换的事件。 顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。 顺序图属于动态建模。 顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的。表示了对象之间传送消息的时间顺序。 浏览顺序图的方法是:从上到下查看对象间交换的消息。4.2 顺序图中的事物及解释消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。消息符号坐标轴纵向的虚线表示对象在序列中的执行情况 (即发送和接收的消息,对象的活动 )这条虚线称为对象的 “生命线 ”。生命线顺序图的横轴上是与序列有关的对象。对象的表示方法是:矩形框中写有对象或类名,且名字下面有下划线。对象与系统、子系统或类发生交互作用的外部用户 (参见用例图定义 )。参与者图解释事物名称