1.1UML简介:UML全称统一建模语言,它是为面向对象软件提供统一的、标准的、可视化的建模语言。
UML提出了一套标准的建模符号,通过这些符号可以方便使用者进行阅读和交流系统架构和设计规划。UML支持面向对象的技术,能够准确的方便地表达面向对象的概念,体现面向对象的分析和设计风格。UML统一了Booch、OMT、OOSE面向对象方法所涉及的基本概念和建模符号。
Booch最先描述了面向对象的软件开发的方法的基础问题,指出面向对象开发是一种根本不同于传统的功能的分解的设计方法。
Coad方法是通过多年来大系统开发的经验与面向对象概念的有机结合,在对象、结构、属性和操作的认定方面,提出了一套系统的原则。
OMT方法是一种新兴的面向对象的开发方法,开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计。
OOSE这是一种在OMT Object Modeling Technology的基础上用于对功能模型进行补充指导系统开发活动的系统方法。
1.2UML能做什么
我们在进行项目的时候,通过使用UML面向对象图的方式来更明确、清晰的表达项目中的架设思想、项目结构、执行顺序等一些逻辑思维
1.3UML模型的构成
1)UML由三个部分构成:
事物(Things):UML模型中最基本的构成元素,具有代表性的成分的抽象
关系(Relationship):关系把事物紧密联系在一起
图:图是事物和关系的可视化表示
2)UML事务
UML包含了四种事务:结构事务、行为事务、分组事务、注释事务。
结构事务 UML模型的静态部分,描述概念或物理元素。它包含以下6种(1)类:具有相同属性、操作和关系的对象的描述。(2)接口:描述元素外部可见行为,即服务集合的定义说明。(3)协作:描述了一组事物间的相互作用的集合,定义元素之间的相互作用。(4)用例:使用案例、用况代表一个系统或系统的一部分行为,是一组动作序列的集合。User Case就是对系统功能的描述。(5)构件:系统中物理存在,可替换的部件。组件描述物理系统的一部分。(6)节点:运行时存在的物理元素
行为事务 UML模型图的动态部分,描述跨越空间和时间的行为,代表语句里的动词,表示模型里随时空不断变化的部分。它包含两种:(1)交互:实现某功能的一组构件事物之间的消息的集合,涉及消息,动作序列。交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。-Message(2)状态机:描述事物或交互在生命周期内响应事件所经历的状态序列。状态机由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的.-state
分组事务 UML模型图的组织部分,描述事物的组织结构,可以把分组事务看成一个盒子。模型可以在其中被分解。目前只有一种分组事物,即包(package)。(1)包:把元素组织成组的机制
注释事务 UML模型的解释部分,用来对模型中的元素进行说明与解释 (1)注释:对元素进行约束或解释的简单符号。-note
3)UML关系
在UML类图中,常见的有以下几种关系: 依赖(Dependency), 关联(Association) , 泛化(Generalization), 实现(Realization),聚合(Aggregation),组合(Composition),
关系是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能。在UML中常见的有以下几种关系
(1).依赖(Dependency)-使用的关系-虚线箭头表示
对于两个对象X、Y,如果对象X发生变化,可能会引起对另一对象Y的变化,则称Y依赖于X
依赖是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,会影响到另一个事物(依赖事物)的语义,是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要用双向的互相依赖。
对于两个相互独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
表示方法:依赖关系用虚线箭头表示
(2).协作(关联)Association关联/双向关联-拥有的关系-用实线箭头表示
一种描述一组对象之间连接的结构化关系,指一个事物的对象与另一个事物的对象间的联系;如聚合关系描述了整体和部分间的结构关系。
是一种拥有的关系,它使一个类知道另一个类的属性和方法;如老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
给定关联的两个类,可以从其中的一个类的对象访问到另一个类的相关对象
表示方法:关联关系用实线箭头表示
老师与学生是双向关联的,老师有多名学生,学生也可能有多名老师。但学生与课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不能拥有学生。
(3).泛化关系(Generalization)-继承关系- 继承使用空心三角形+实线表示
泛化是一种特殊/一般的关系,也可以看作是常说的继承关系。泛化表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
继承表示是一个类(称为子类、子接口)继承另外的一个类(称之为父类、父接口)的功能,并可以增加它自己的新功能的能力。
表示方法:继承使用空心三角形+实线表示
例如:老虎是动物的一种,即有老虎的特性也有动物的特性。
定义了一般元素和特殊元素之间的分类关系,与和C++及JAVA 中的继承关系有些类似
(4).实现关系(Realization)- 空心三角形+虚线表示
实现是类元之间的语义关系,其中的一个类元指定了由一个类元保证执行的契约。是一种类与接口(I)的关系,表示类是接口所有特征和行为的实现。
表示方法:空心三角形+虚线表示
(5)聚合关系(Aggregation)-弱拥有- 两个对象具有各自的生命周期。
聚合关系是关联关系的一种特例,它体现的整体与部分,是一种“弱拥有”的关系,部分可以离开整体单独存在,即has-a的关系,如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
表示方法:带空心菱形的实心线,菱形指向整体。
(6)组合关系-包含关系-强耦合- 部分和整体的生命周期一样。
组合关系是关联关系的一种特例,他体现的是一种contains-a包含的关系,这种关系比聚合更强,也称为强聚合,整体和个体不能独立存在,一定是在一个模块中同时管理整体和个体,生命周期必须相同(级联)。比如你和你的大脑。
表示方法:在UML类图中,组合通常使用实心菱形+实线箭头表示
聚合与组合的区别
《大话设计模式》书中大雁的例子
大雁与雁群聚合关系,大雁与雁翅的关系就叫做组合(包含)
聚合关系明显没有组合关系亲密,大雁不会因为它们的群主将雁群解散而无法生存,而雁翅就无法脱离大雁而单独生存
组合关系的类具有相同的声明周期
二、UML图
2.1UML图分类
1.类图:类图描述系统所包含的类、类的内部结构及类之间的关系
2.对象图:对象图是类图的一个具体实例
3.用例图:用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系。
4.顺序图:顺序图表示对象之间动态合作的关系
5.协作图:协作图描述对象之间的协作关系
6.活动图:活动图描述系统中各种活动的执行顺序
7.状态图:状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件
8.部署关系图:部署关系图定义系统中软硬件的物理体系结构
9.组件图:组件图描述代码部件的物理结构以及各部件之间的依赖关系
2.2用例图
用例图:从用户角度描述系统功能,是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元,它描述了一组用例,参与者以及它们之间的关系。它包含了以下3个方面的内容。
参与者:是系统外部的一个实体(可以是任何的事物或人),它以某种方式参与了用例的执行过程。参与者可以是真实的人,也可以是其它系统。
用例:是对系统的用户需求(主要是功能需求)的描述,用例表达了系统的功能和所提供的服务。
参与者和用例之间包含了4种关系-关联关系、泛化关系、包含关系、扩展关系
1)关联关系
图书借阅者-借阅读书、归还图书
2)泛化关系
管理员-查询用户-查询老师,查询学生
一个用例可以被特别列举为一个或多个子用例,这被称为用例泛化。子用例表示父用例的特殊形式,子用例从父用例处继承行为和属性,还可以添加行为或覆盖、改变已继承的行为。
3)包含关系
管理员-修改用户信息、管理用户详细信息、删除用户信息-查询用户
包含指的是其中一个用例(称作基础用例)的行为包含了另一个用例(称为包含用例)的行为。基础用例可以看到包含用例,并依赖于包含用例的执行结果。但是二者不能访问对方的属性
4)扩展关系
管理员-借阅图书、归还图书、查询图书-缴纳罚款
一个用例也可以被定义为基础用例的增加量扩展,这称作扩展关系。如:如果一切顺利图书可以被归还,但如果借阅人所借图书超期,按规定就要交纳一定数额的罚金,这时就不能执行用例提供的常规动作。
用例图综合案例;校园机房上机
2.3类图
1.类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系,也包括类的内部结构(类的属性和行为)。类图是以类为中心来组织的,类其中的其他元素或属于某个类或与类相关联。
1)类图的表示
-表示private,私有的
+表示public,公开的
#表示protected,受保护的
~表示default,也就是包权限
_下划线表示static,静态
斜体表示抽象
2)类图中包含的元素:类、接口、依赖关系、泛化关系、实现关系、关联关系
3)类:具有相同的属性与行为的事物
动物 类名称
+生命 属性
+行动() 行为
+繁殖() 行为
4)接口包含属性但是不包含方法
动物 (依赖关系)+红色
+生命
+行动()
+繁殖()
2.依赖关系:表示两个或多个模型元素之间语义上的关系,它表示了这样一种情形,对于一个元素(提供者)的某些更改可能会影响或提供信息给气体元素(客户),即客户以某种形式依赖于其他类元。如:人依赖水
人类 (依赖关系)水 +成分 +使用方式()
+姓名
+性别
+吃饭()
+工作()
3.泛化关系:泛化关系只使用在类型上,而不是实例上,如一个类可以继承另一个类,但是另一个对象不能继承另一个对象。 在UML图中,泛化关系用空心三角形和实线组成的箭头表示,从子类指向父类,在JAVA代码中,对象之间的泛化关系可以之间翻译为关键字extends。
4.关联关系:单向关联和双向关联。两个对象都知道(可以调用)对方的公共属性和操作,双向关联。只有一个对象知道(可以调用)另一个对象的公共属性和操作,单向关联。大多数关联都是双向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类。
在UML图,双向关联关系用双箭头的实线或者无箭头的实线双线表示。单向关联用一个带箭头的实线表示,箭头指向被关联的对象,这是导航性。
一个对象可以持有其它对象的数组或者集合,在UML中,通过放置多重性(multipicity)表达式在关联线的末端来表示,多重性表达式可以是一个数字、一段范围或者是它们的组合。
多重性允许的表达式示例:
*或者0..* 表示0到多个
0..1 表示0或者1个,在JAVA中经常用一个空引用来实现
1..* 表示1到多个
5.实现关系:是指接口及其实现类的关系。在UML图中,实现关系用空心三角形和虚线组成的箭头来表示,从实现类指向接口,在JAVA代码中实现关系可以直接翻译为关键字implementas
2.4对象图
1)UML对象图是类图的实例,几乎使用与类图完全相同的标识。对象图表在某一时刻一组对象以及它们之间关系的图。对象图可以看作是类图在系统某一时刻的实例。在图形上,对象节点以及连接这些节点的连线组成,节点可以是对象也可以是类,连线表示对象间的关系。
对象图可以想象成正在运行的系统在某一时刻的快照。如:一个正在运行的列车
现在,如果运行一个单元列车运行,那么发现它具有以下静态图片:这是一个特别的运行状态;一个特定的乘客数量。如果捕捉在不同的时间,这将在不断改变。
2)UML对象图目的:对象图的目的与类图相似。
不同的是,一个类图代表一个抽象的模型,包括类和它们之间的关系。但是,由于对象存在生命周期,因此UML对象只能在系统某一时间段存在。
这意味着对象图更接近实际的系统行为。目的是在一个特定的时刻捕捉到静态的系统视图。
2.5顺序图
1)概念 时序图(Sequence Diagram)描述了对象之间传递消息的时间顺序,它用来表示用例中的行为顺序,是强调消息时间顺序的交互图。时序图描述类系统中类和类之间的交互,它将这些交互建模成消息交换
2)组成元素 对象、生命线、激活、消息
对象:将对象置于时序图的顶部意味着交互开始的时候就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的
生命线:生命线是一条垂直的线,表示时序图中的对象在一段时间内的存在。生命线是一个时间线,从时序图的顶部一直延伸到底部,所用的时间取决于交互持续的时间。
激活:激活代表时序图中的对象执行一项操作的时期。激活表示该对象被占用已完成某个任务、去激活指的是对象处于空闲状态,在等待消息。图中的矩形成为激活条或控制期。
消息:消息是两个对象之间的单路通信,从发送方到接收方的控制信息流。消息可以用于在对象间传递参数。消息可以实信号,即明确的、命名的、对象间的异步通信;也可以是调用,即具有返回控制机制的消息符号。
2.6状态图
UML状态图是图表本身的名称,主要用于描述对象具有的各种状态、状态之间的转换过程以及触发状态转换的各种事件和条件。状态图清晰地描述了状态转换时所必需的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。例如:动车发车最后15分组不允许售票,在状态图中就可以清晰地看到,可以提醒程序员不要遗漏这些限制条件
UML状态图的目的
UML状态图可以捕获对象、子系统和系统的生命周期,可以告知一个对象可以拥有的状态,并且事件(如消息的接收,时间的流逝、错误、条件为真等)会怎样随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标志状态和复杂行为的类;该图可以确定类的行为以及该行为如何根据当前的状态而变化,也可以展示哪些事件将会改变类的对象的状态。