1. 前言
1.2 UML概述
1.2.1 UML简介
UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。
UML的定义包括UML语义和UML表示法两个部分。
- UML语义:UML对语义的描述使开发者能在语义上取得一致认识,消除了因人
而异的表达方法所造成的影响。 - UML表示法:UML表示法定义UML符号的表示法,为开发者或开发工具使用这
些图形符号和文本语法为系统建模提供了标准。
1.2.2 UML模型图的构成
- 事物(Things):UML模型中最基本的构成元素,是具有代表性的成分的抽象
- 关系(Relationships):关系把事物紧密联系在一起
- 图(Diagrams ):图是事物和关系的可视化表示
1.3 UML事物
UML包含4种事物:构件事物 、行为事物 、 分组事物 、 注释事物
1.3.1 构件事物
UML模型的静态部分,描述概念或物理元素它包括以下几种:
- 类:具有相同属性相同操作 相同关系相同语义的对象的描述
- 接口:描述元素的外部可见行为,即服务集合的定义说明
- 协作:描述了一组事物间的相互作用的集合
- 用例:代表一个系统或系统的一部分行为,是一组动作序列的集合
- 构件:系统中物理存在,可替换的部件
- 节点:运行时存在的物理元素
参与者、信号应用、文档库、页表等都是上述基本事物的变体
1.3.2 行为事物:UML模型图的动态部分,描述跨越空间和时间的行为
- 交互:实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接
- 状态机:描述事物或交互在生命周期内响应事件所经历的状态序列
1.3.3 分组事物: UML模型图的组织部分,描述事物的组织结构
- 包:把元素组织成组的机制
1.3.4 注释事物: UML模型的解释部分,用来对模型中的元素进行说明,解释
- 注解:对元素进行约束或解释的简单符号
1.4 UML关系
-
1.4.1 依赖关系
依赖关系(dependency)是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,
会影响到另一个事物(依赖事物)的语义 -
1.4.2 关联关系
关联(association)是一种结构关系,它指明一个事物的对象与另一个事物的对象间
的联系 -
1.4.3 泛化关系
泛化(generalization)是一种特殊/一般的关系。也可以看作是常说的继承关系 -
1.4.4 实现关系
实现(realization)是类元之间的语义关系,其中的一个类元指定了由另一个类元保
证执行的契约
1.5 各UML图及特征
1.5.1 用例图( Use Case Diagram )
用例图是从用户角度描述系统功能, 是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元
1.5.2 类图(Class Diagram)
类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)
类图是以类为中心来组织的,类图中的其他元素或属于某个类或与类相关联
1.5.3 对象图( Object Diagram )
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类
1.5.4 顺序图(Sequence Diagram)->时序图
顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互
顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件
1.5.5 协作图(Collaboration Diagram)
协作图描述对象间的协作关系,协作图跟顺序图 相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系.
协作图的一个用途是表示一个类操作的实现
1.5.6 状态图(State Chart Diagram)
状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成
1.5.7 活动图(Activity Diagram)
活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动
活动图描述了一组顺序的或并发的活动
1.5.8 构件图(Component Diagram)
构件图为系统的构件建模型—构件即构造应用的软件单元—还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响
1.5.9 部署图(Deployment Diagram)
部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配
1.6 各UML图的关系
1.7 UML语法描述
2. 用例图
2.1 用例图概要
用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。 (《UML参考手册》
用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行(或称为发起了哪个用例)。
用例图多用于静态建模阶段(主要是业务建模和需求建模)。
2.2 用例图中的事物及解释
2.3 用例图中的关系及解释
2.4 例子
实例1 参与者之间的泛化关系
参与者:经理,安全主管,保安
用例:管理人事,批准预算,批准安全证书,监视周边
在参与者之间不存在泛化关系的情况下,各个参与者参与 用例的情况分别是:经理参与用例管理人事和批准预算;安全主管参与用例批准安全证书;保安参与用例监视周边。由于安全主管与经理,安全主管与保安之间泛化关系的存在,意味着安全主管可以担任经理和保安的角色,就能够参与经理和保安参与的用例。这样,安全主管就可以参与全部4个用例。但经理或者保安却不能担任安全主管的角色,也就不能参与用例批准安全证书。
实例2 用例之间扩展和包含关系
用例的上下文是:短途旅行但汽车的油不足以应付全部路程。那么为汽车加油的动作在旅行的每个场景(事件流)中都会出现,不加油就不会完成旅行。吃饭则可以由司机决定是否进行,不吃饭不会影响旅行的完成。
实例3. 航空售票的用例图
参与者(actor):clerk,监督员,信用卡服务商,信息亭
用例(use case): Buy tickets(个人买票), 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这几个功能。
该系统主要面向的用户(参与者):clerk,监督员,信用卡服务商,信息亭。
3. 类图
3.1 类图概要
类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法
类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象
3.2 类图中的事物及解释
3.2.1 类
从上到下分为三部分,分别是类名、属性和操作。类名是必须有的
类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等
类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等
3.2.2 接口
一组操作的集合,只有操作的声明而没有实现
3.2.3 抽象类
不能被实例化的类,一般至少包含一个抽象操作
3.2.4 模版类
一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类
3.3.1 关联关系
描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关 联关系语义较弱。也有两种语义较强,分别是聚合与组合
聚合关系
特殊关联关系,指明一个聚集(整体)和组成部分之间的关系
组合关系
语义更强的聚合,部分和整体具有相同的生命周期
3.3.2 泛化关系
在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间
3.3.3 实现关系
对应于类和接口之间的关系
类Circle、Rectangle实现了接口Shape的操作
3.3.4 依赖关系
描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式,
例如绑定(bind)、友元(friend)等
模板类Stack<T>定义了栈相关的操作;IntStack将参数T与实际类型int绑定,使得所有操作都针对int类型的数据
类Memento和类Originator建立了友元依赖关系,以便Originator使用Memento的私有变量state
总结:事物是什么?
答:事物:类、接口、抽象类、模版类(泛型)、属性、方法、返回值等等…
有哪些关系?
关系:很多种类型
第一种:依赖关系->Dependency->弱关系
定义两个类,一个A类,一个B类,然后A类引用了B类,这种关系称之为偶然性或者临时性。同时当我们的B类发生变化的时候,那么影响到A类,这个关系称之为依赖关系。
例如,
今天早餐去包子店买包子吃
今天我依赖于这个包子店
依赖关系条件一:临时性、偶然性
依赖关系条件二:B类发生变化的时候,那么影响到A类
第二种:关联关系
两种情况
1、单向关联-关联关系->Derected Association
依赖关系特殊情况
关联关系本质就是->依赖关系
两个类属于同级水平(比较强关系)
例子:人喝水
-
2、双向关联-关联关系
例如:用户和订单关系(用户对应订单,订单对应用户)
一对多:一个用户对应多个订单(我去天猫买衣服,下单,下多个订单,买西装,买很多次,买很多件)
多对多:一个订单可以对应多个用户(飞机票)
飞机票:一个订单最多对应5个用户
第三种:聚合关系
聚合关系:关联关系特殊情况(特殊场景)
特点:强调的是整体和部分关系
整体和部分可以分离,各自有各自生命周期,互不干扰,强调的是共享
例如:电脑和电池关系
整体:电脑(6年)
部分:电池(3年)
第三种(一):组合关系
组合关系:聚合关系特殊情况(关联关系中一种特殊情况)
特点:强调整体和部分
组合关系和聚合关系区别?
组合关系:整体和部分不能够分离,共享生命周期,整体的生命周期结束也就意味着部分生命周期结束。
例子:心脏和人关系
人:整体
心脏:部分
第四种:泛化关系
继承关系
第五种:实现关系
实现接口