这个学期有幸选到章老师的UML精品课程,虽然到目前仅仅上课两周,但是收益匪浅。尽管在本科接触过UML,却没有非常详细的对其进行深入的了解,只是对一些图的名称有所耳闻,没有深究其功能。
就最近所学知识,谈一下我对uml统一建模语言的一个总体认识,软件工程作为一门工程类学科,如同建筑类学科一样,当我们需要搭建一所建筑时,我们都需要对其进行需求和设计,在施工的时候,我们就需要一些设计图纸,例如各个房间的具体设计、三维视图等,通过这些图纸进行施工。软件工程也是如此,当我们拿到一个项目时,并不是直接开始编码,而是在此之前进行一系列的需求分析和详细设计,UML在详细设计中得到了广泛的应用,我们使用UML绘出的类图、用例图、时序图、部署图等作为依据,以及按照这些图表实现相应的编码,这些用UML语言绘制的图形就好比建筑行业中的设计图纸,以这些图纸为标准,进行coding。UML绘图工具主要有 Visio 2007,开发工具主要有:Star UML,IBM Rational Rose,RSA等。
下面对一些比较常用的UML图进行一些详细的介绍(本次博文重点介绍一下类图):
一、 类图
我们知道面向对象主要有三个特征:封装(抽象)、继承以及多态,对象作为类的实例化,这些特征用类图可以很好的表示出来,类图也是最常用的UML图,通常看到类图就能了解各类之间的关系以及每个类中所具有的属性,在一些软件中,可以通过类图生成生成相应的代码。所以类图在软件工程中应用非常广泛。下面介绍一些类图的基本用法,
1、 类
如图所示,一个类主要由三部分组成:类名、属性、方法组成。其中属性和方法都有一定的作用域,public用+表示,private用-表示,protect用#表示,package用~表示。
2、 类与类之间的关系
1) Association(关联关系)
通常用直线(相互关联)或者 (直接关联)表示,相互关联和直接关联有一定的区别,比如A B 可以表示A类知道B类的属性和方法,同时B类也可以知道A类的属性和方法,但是直接关联AB 中A可以知道B类的属性和方法,但是通过B不能知道A的属性和方法,是单向关联,相互关联的实现可能需要使用指针来实现。
2) Aggregation(聚合关系)
聚合可以看做是一种强度关联,用于描述总体到局部的关系。当我们不知道两个类之间的到底是关联关系还是聚合关系时,一般使用关联关系。表示符号为:
或者
3) Composition(组合关系)
组合关系的强度强于聚合关系,比如车由引擎等组成,引擎作为车的一部分,可以看出子类实例的生命周期依赖于父类的生命周期。表示符号为:
或者
4) Generation(一般化)
一般化关系表示类与类之间的继承关系,是由子类指向父类,如animal类可以一般化出cat类,cat类是animal类的一个继承。表示符号为
5) Dependency(依赖关系)
顾名思义,依赖表示的一个类依赖另一个类的定义,所以依赖关系时单向的。表示符号为:
6) Realization(实现)
主要针对interface,类似于继承关系。表示符号为:
类与类之间主要有这六种关系,我们根据类之间的实际情况去判断到底使用那些关系,如果有些关系不太确定,我们在设计类图时可以先设定成关联关系,然后在后期进行相应的修改,除此之外我们可以在这些关系上设定实例化对象之间的对应关系。
如图:
0..1 |
0个或1个 |
1 |
只能1个 |
0..* |
0个或多个 |
1..* |
1个或多个 |
最后,向大家推荐一本参考书《UML2 and the Unified Process: Practical Object-Oriented Analysis and Design》另附上课上速记的学习笔记(速记只有部分重点>_<):