1. UML的模型图
UML 的模型图能够将被建模的系统的某一个方面的某一部分以图形的方式表示出来,不同的视图通过将多个不同的模型图有机组合在一起就能够描述系统模型的某方面的特征。UML的模型图是有模型元素构成的,模型元素以图标的形式直观形象的表达各种概念。有的模型元素可以在多个模型图中使用,如注释和注释连接可以在任何模型图中使用,用于给其他的模型元素进行注释。各种模型图能使用的模型元素集合也不相同,在介绍各种模型图的时候会有具体的说明。
UML 定义了九种模型图:用例图(Use Case View)、类图(Class Diagram)、对象图(Object Diagram)、构件图(Component Diagram)、部署图(Deployment Diagram)、状态图(StateChart Diagram)、活动图(Activity Diagram)、序列图(Sequence Diagram)以及协作图(Collaboration Diagram)。这九种模型图各有侧重,如用例图侧重描述用户需求,类图侧重描述系统具体实现;描述的方面都不相同,如类图描述的是系统的结构,序列图描述的是系统的行为;抽象的层次也不同,如构件图描述系统的模块结构,抽象层次较高,类图是描述具体模块的结构,抽象层次一般,对象图描述了具体的模块实现,抽象层次较低。
在有的文献书籍中,将这九种模型图分为三大类:结构分类、动态行为和模型管理,结构分类包括用例图、类图、对象图、构件图和部署图,动态行为包括状态图、活动图、顺序图和协作图,模型管理则包含类图。本文则从动态和静态的角度分别介绍UML的九种模型图。
2. 静态模型图
结构分类模型图描述了的是系统的与时间不相关的属性和行为。静态模型图包括类图、对象图、构件图和部署图。
结构分类模型图描述了的是系统的与时间不相关的属性和行为。静态模型图包括类图、对象图、构件图和部署图。
2.1 类图
类图描述的是类和类之间的相互关系。类在UML中的是用矩形表示,矩形中可以有三个区域,最上方的区域是名字域,用来显示类名,中间的区域是属性域,用来显示类所具有的属性列表,最下方的区域是操作区域,显示定义的操作列表,如图2.2.1所示。
类图描述的是类和类之间的相互关系。类在UML中的是用矩形表示,矩形中可以有三个区域,最上方的区域是名字域,用来显示类名,中间的区域是属性域,用来显示类所具有的属性列表,最下方的区域是操作区域,显示定义的操作列表,如图2.2.1所示。
图2.2.1 中,属性自己也含有属性,如名字,类型,可见性等,属性的名字就是标识属性的名称,属性的类型就是属性所属于的数据类型,属性的可见性标识属性是否能被所属类之外的类直接访问,属性的可见性分为三种:public,protected和private。public标识的是对应属性可以被所属的类和其他类直接访问;protected标识的是对应属性可以被与所属类相关的一系列类的访问,这些类的相关性不同的面向对象程序设计语言有不同的定义,如C++中 protected是标识的是属性能够被以public方式继承的子类访问,在JAVA中则是标识属性可以被在同一个包(package)的所有类访问; private标识的是属性只能被所属类访问。操作的属性有名字、返回类型、参数类型以及可见性等,名字是操作的名称;返回类型是操作的返回值的类型;参数类型是传入操作的参数类型;可见性标识的是操作是否能被被所属类之外的类直接访问,也分为:public、protected和private。有时为了表达简洁,可以省去显示类的各种属性和操作。
类之间的相互关系包括:关联(Association)、依赖(Dependency)、泛化(Generalization)以及实现(Realize)。
关联描述的是类的对象之间逻辑上的关系,这些对象可以是同类的,也可以不是,关联的两端称为角色,如客户和订单就存在一种关联。在UML中关联主要有三种形式,一种是用一条线段标识双向的关联,称为关联(Association);第二种是用一个有箭头的线段标识单向的关联(Unidirectinal Association);第三中是用一个菱形为头的线段表示关联的两端的类是整体和部分的关系,这种关联也称为聚合(Aggregation),例如:一个对象a包含另一个对象b的引用,则菱形的一端连接的是对象a,另一段连接的是对象b。聚合又分为。图2.2.2显示了这三种关联的图形表示。
300)this.width=300" align="center" border="0" height="100" width="200">
图 2.2.2 三种关联
从图2.2.2中可以看到,NewClass2和NewClass4之间的关联两端都有星号,那是用于标识关联的角色的多重性,如一对一、一对多、多对多等,这里标识的是NewClass2和NewClass4是多对多关联。
依赖表示的是模型元素间的依赖关系,依赖关系两端的模型元素,一端是独立的,另一端需要依赖这个独立的元素。依赖关系用带箭头的虚线段表示。
泛化表示的是模型元素之间抽象和具体的关系,也就是模型元素之间的继承关系。继承者具有被继承者相同的特性,同时还能在被继承者的基础上进行扩展,如:人和中国人的关系就是泛化关系,中国人是人,同时具有人的特征,也有自己扩展了的特征。在面向对象中,被继承者称为父类,继承者称为子类。泛化用一个带有空心的三角箭头的线段表示,三角箭头指向父类,另一端连接子类。
实现关系表示一个模型元素实现了另一个模型元素定义的操作,一般是指一个类实现了一个接口(Interface)定义的方法,在面向对象的概念中,接口就是只定义方法,并不实现这个方法,用来给别的类继承它,并用类的操作实现它定义方法,通过这样的方法就能够将定义和抽象分开,利于代码的维护。实现关系用一条带有空心三角箭头的虚线段表示,三角形接口指向接口,虚线段另一端连接实现类。
表达实现关系除了上面的这中表示外,UML还提供了另一种简洁的表示方式,用一个圆圈表示接口,上面没有接口定义的方法,通过用一条实线段将其与一个类相连,就能表示了接口和实现类的关系。
泛化和实现关系都是描述一般和具体的关系,但是两者还是有区别:泛化实在同一个抽象层次上的一般和具体的关系,而实现是在不同抽象层次的一般和具体的关系,接口的抽象层次较高。
2.2 对象图
对象图描述的是对象之间的关系,也可以理解为系统在某一个时刻的图像。对象图是在比较具体的层次上描述,比如描述一个系统的各个类的对象是如何组合的。对象图没有类图那么复杂,对象的表示和类相似,只是在名字域要标明对象名和所属类名,两者用冒号分隔,属性域要标识出属性的具体值,对象之间的关系都是用实线段相连。现在很少将对象图独立画出来,一些CASE工具,如Rational Rose 2002就没有提供对象图。对象的概念更多的是用在动态的模型图中。
对象图描述的是对象之间的关系,也可以理解为系统在某一个时刻的图像。对象图是在比较具体的层次上描述,比如描述一个系统的各个类的对象是如何组合的。对象图没有类图那么复杂,对象的表示和类相似,只是在名字域要标明对象名和所属类名,两者用冒号分隔,属性域要标识出属性的具体值,对象之间的关系都是用实线段相连。现在很少将对象图独立画出来,一些CASE工具,如Rational Rose 2002就没有提供对象图。对象的概念更多的是用在动态的模型图中。
2.3 构件图
构件图描述系统中的构件以及构件之间的依赖关系,构件图是在很具体的层次描述系统的物理结构。
构件图描述系统中的构件以及构件之间的依赖关系,构件图是在很具体的层次描述系统的物理结构。
构件图有一下几个主要的模型元素:构件、接口、依赖关系。构件就是定义了良好接口的实现代码单元,已经成为系统的一部分。构件并不依赖于其他的构件,只依赖于其所支持的接口,因此,构件是可替换的,只要新的替换构件支持相同的接口就可以,构件用一个左边有两个小矩形的大矩形表示;接口用于描述构件定义的接口,用一个圆圈表示,它与构件是用实线段相连;依赖关系描述的是构件之间的依赖关系,用带箭头的虚线段表示,箭头一段的是被依赖的构件。
2.4 部署图
部署图描述任何基于计算机的应用系统的物理或逻辑的配置。它可以描述系统硬件的物理拓扑结构和在此结构上执行的系统软件,也能描述系统节点的拓扑结构和通信路径、节点上运行的构件、构件中的逻辑单元等。
部署图描述任何基于计算机的应用系统的物理或逻辑的配置。它可以描述系统硬件的物理拓扑结构和在此结构上执行的系统软件,也能描述系统节点的拓扑结构和通信路径、节点上运行的构件、构件中的逻辑单元等。
部署图中有以下几个主要的模型元素:节点、构件、对象、接口、连接和依赖关系。节点描述一个物理设备以及在其上运行的软件系统,用一个立方体来表示。连接是节点之间的通信路径,用实线段来表示。构件、对象、界面和依赖关系同之前的介绍相同。
3. 动态模型图
动态行为模型图描述了系统随时间变化的行为。动态模型图包括:用例图、状态图、活动图、顺序图和协作图。
动态行为模型图描述了系统随时间变化的行为。动态模型图包括:用例图、状态图、活动图、顺序图和协作图。
3.1 用例图
用例图从用户的角度来描述系统的行为和特征。用例图一般是用来进行系统的需求分析的工具。
用例图从用户的角度来描述系统的行为和特征。用例图一般是用来进行系统的需求分析的工具。
用例图中首先要明确的概念就是用例。用例是系统的一个功能单元,描述了参与者与系统发生的一次交互行为。例如:银行的ATM自动提款机系统,用户提款就是一个用例。
用例图有以下几种模型元素:用例(Use Case)、参与者(Actor)、关联关系(Association)、包含关系(Include)、扩展关系(Extend)以及泛化关系(Generalization)。用例是以一个椭圆形来表示,椭圆中心是用例的名称;参与者就是与所要建模的系统交互的外部用户、进程或其他系统,参与者是以一个人形的图标表示;关联关系描述参与者与其需要交互的用例之间的通信路径,用一条实线段表示;包含关系描述一个用例利用另一个用例完成某个过程,用一个带箭头的虚线段并在虚线段上以“《include》”作为标识来表示,箭头指向被包含的用例;扩展关系描述一个用例在原有的另一个用例的基础上,扩展了那个用例的部分功能,和包含关系类似,也是以一个带箭头的虚线段表示,不同的是虚线段上显示的是“《extend》”,箭头指向被扩展的用例;泛化关系描述用例之间的一般和特殊的关系,特殊用例是在继承了一般用例的特性的基础上添加了新的特性,泛化关系和扩展关系有相似之处,不同的是扩展关系的需要明确标明被扩展用例的扩展点,扩展用例只能扩展这些扩展点,泛化关系用一个带有空心三角箭头的实线段表示。
3.2 状态图
状态图以状态的概念描述对象、子系统、系统在生命周期中的各种行为,简单的说就是一个状态图只描述某一个对象(可以是类、程序模块、系统)的行为。通过状态图可以知道一个对象、子系统、系统的各种状态及其收到的消息对其状态的影响。世界万物都有可以描述的状态,因此都可以通过状态图来描述他们的行为,状态图具有很强的表达能力。
状态图以状态的概念描述对象、子系统、系统在生命周期中的各种行为,简单的说就是一个状态图只描述某一个对象(可以是类、程序模块、系统)的行为。通过状态图可以知道一个对象、子系统、系统的各种状态及其收到的消息对其状态的影响。世界万物都有可以描述的状态,因此都可以通过状态图来描述他们的行为,状态图具有很强的表达能力。
状态图有以下几种常用的模型元素:状态(State)、转换(Transition)、起始状态(Start State)、终止状态(End State)。状态描述一个对象的生命周期中某个时间段的特征,状态是用圆角的矩形表示;转换描述状态间的转移,用一个带箭头的实线段表示,还可以给转换添加标注,通过标注来描述引起状态转移的事件、条件和要执行的操作,标注的格式为:事件名[条件]/操作,标注的每个部分都可以省略;起始状态描述对象生命周期的开始阶段,用一个黑色的圆表示,有时为了表述清楚,在不产生混淆概念的情况下,可以省去起始状态;终止状态描述对象生命周期的终止阶段,用一个带圆形外框的黑色圆表示,一个状态图可以有多个终止状态,有时为了表述清楚,在不产生混淆概念的情况下,可以省去终止状态。
3.3活动图
活动图是通过一系列活动描述对象的行为,对象可以是程序、模块、子系统、系统。通过活动图,可以了解所描述对象的要进行的各种任务和过程。
活动图是通过一系列活动描述对象的行为,对象可以是程序、模块、子系统、系统。通过活动图,可以了解所描述对象的要进行的各种任务和过程。
活动图常用的模型元素包括:活动(Activity)、起始点(Start)、终止点(End)、转换(Transition)、对象(Object)、条件判断(Decision)、同步条(Synchronization Bar)、信息流和泳道(Swinlane)。活动描述的是系统要完成的一个任务或要进行的一个过程,是活动图中的一个原子活动,活动用一个圆角的矩形表示,并标上活动名;起始点描述活动图的开始状态,与状态图类似,用一个黑色的圆标识,活动图可以有多个起始点;终止点描述活动图的终止状态,与状态图类似,用一个带圆圈的黑色圆表示,活动图可以有多个终止点;转换描述活动之间的转换,也就是被描述对象的控制流,转换用带箭头的实线段表示,箭头指向转向的活动,可以在转换上用文字标识转换发生的条件;对象是活动图中参与的对象,它可以发送信号给活动或是接收活动的信号,也可以表示活动的输入/输出结果,对象的表示和对象图中的表示相同;条件判断描述活动间转换的分支,只有一个流入的信息流,不同的条件下输出的信息流有不同的流向,条件判断用一个菱形表示; 同步条描述活动之间的同步,一般有多个信息流流入,多个信息流流出,必须是流入的信息流都到达,流出的信息流才能同时流出,同步条用一条较粗的水平的或是垂直的实线段表示;信息流描述活动和对象的交互关系,对象可以作为活动的输入/输出,也可以作为一个实体,接收活动的信号或是向活动发送信号,信息流用带箭头的虚线段表示,箭头标识信息流的方向;泳道描述的是活动图中的活动的分组,通常,可以将活动按照某种标准分组,泳道在UML活动图中的表示就是在横向上将活动图划分出一个纵向的区域,同组的活动和对象都在这个区域中,区域之间用虚线分隔。
3.4 顺序图
顺序图通过描述对象之间的交互来表达被描述对象的行为。顺序图重点强调对象交互的时间性顺序性。与前面介绍的模型图可以随意组织模型元素不同,顺序图有一定的结构,可以将顺序图看成一个二维坐标,纵向上表示的是不同的对象,横向上是顺序的时间
顺序图通过描述对象之间的交互来表达被描述对象的行为。顺序图重点强调对象交互的时间性顺序性。与前面介绍的模型图可以随意组织模型元素不同,顺序图有一定的结构,可以将顺序图看成一个二维坐标,纵向上表示的是不同的对象,横向上是顺序的时间
顺序图常用的模型元素有:对象(Object)和消息(Message)。对象是顺序图描述的对象中的一个子对象,对象的表示和对象图的类似,但是顺序图中的对象只放置在图中对象所在的纵向区域的顶端,同时有一条向下延伸的虚线,表示对象的生命线,在对象正在执行动作(如向其它对象发送消息)的区间,生命线的虚线就被一个矩形方块代替,用来表示此时对象处于激活状态,在对象生命线末尾用一个“×”标识对象生命期的结束;消息是对象间通讯的信息,可以是控制信息、数据信息等,消息可以分为简单消息、同步消息、异步消息和返回消息,简单消息标识对象间的一般消息,没有具体的细节,只描述了对象间的一次通讯,简单消息用一个带箭头的实线段表示,同步消息描述的是消息的发送方发送了消息之后,必须收到回复消息才能进行后续的动作,同步消息用带实心三角箭头的实线段表示,异步消息描述的是消息的发送方在发送了消息之后就能进行后续动作,不需要等待回复消息,返回消息描述的是从同步消息激活的动作返回到同步消息发送者的消息,返回消息用带箭头的虚线段表示。
3.5 协作图
协作图描述在一定的语境中一组对象以及用来实现某些功能的对象之间的相互作用和对象之间的关系。协作图可以看成是在对象图的基础上,加入了对象之间的消息通讯以描述对象之间的交互。与顺序图不同,协作图重点是在空间上描述对象的交互。
协作图描述在一定的语境中一组对象以及用来实现某些功能的对象之间的相互作用和对象之间的关系。协作图可以看成是在对象图的基础上,加入了对象之间的消息通讯以描述对象之间的交互。与顺序图不同,协作图重点是在空间上描述对象的交互。
协作图除了具有对象图的模型元素之外,就是加入了消息(Message),消息是对象之间的通讯,从而实现对象的交互,消息可以分为:指向源的简单消息、指向目的的简单消息、指向源的异步消息、指向目的的异步消息、指向源的同步消息、指向目的的同步消息,指向源和指向目的都是表示简单消息的流向,只是图形表示的指向不同而已,指向源的简单消息和指向目的的简单消息都用带箭头的线段表示,指向源的简单消息只指向左边边,指向目的的简单消息只指向右边,指向源的异步消息用带有下半个箭头的实线段表示,指向目的的异步消息用带有上半个箭头的实线段表示,指向源的同步消息和指向目的的同步消息用带实心三角箭头的实线段表示,指向源的同步消息只指向左边,指向目的的同步消息只指向右边。
300)this.width=300" border="1">
图 2.2.1 类的表示