类图和对象图(用户管理模块建模)
类图是逻辑视图的重要组成部分,用于对系统的静态结构建模,涉及到具体的实现细节,它定义系统中的类(属性和操作),描述系统中类之间的关系。
类图概述
类图描述了类和类间关系,它从静态角度来表示一个系统,因此类图属于一种静态图。
类图是UML建模中最基本和最重要的一类图。
在程序设计的不同阶段,类图的作用也不相同。在分析阶段,类图主要用于一些概念类的描述;在设计阶段,类图主要用于描述类的外部特性;在实现阶段,类图主要用于描述类的内部实现。
属性用来描述类的数据域,每个属性都必须有名字除此之外,有时还需要提供一些其他信息。
方法是用来描述类的行为和动作,每个类的方法可以有名字、参数和返回类型等信息。
类图是用来描述一个类的,它包括类的名字、属性、方法和类的可见性。
类名称
它用来唯一标识一个类。含义要清晰明了。这个名称既可以是英文的,也可以是中文的,它是图符中必需的部分。
如果只是为了描述一个类,不关心类的属性和方法,这时可以不标出类的属性和方法。
属性
用来描述该类的对象所具有的特征。描述一个类的属性可能很多,在实际建模过程中我们只抽取那些在系统中使用的特征作为类的属性。
在给出属性的名字的同时还可以给出每个属性的类型。
在描述类的属性时还可以写上该属性的初始值,但一般情况下不需要设计属性的初始值,只有需要强调某个属性需要设置特定的初始值时,才需要在设计过程中描述属性的初始值。
方法
类的属性列出了类的主要数据,类的方法则是对这些数据的处理过程。一般一个方法完成一个特定的动作或处理过程,所有的方法说明了该类能够完成的全部功能。和属性一样,一般类图中只列出类的主要方法。在分析设计的初期,类图中可以只列出方法名字,随着分析的深入,逐步增加方法的参数、返回类型和可见性等信息。
可见性
可见性有:公有(public)、私有(private)和受保护(protected),在UML中分别用“+”、“-”和“#”来表示。
其中公有的属性和方法(“+”)能够被系统中其它任何类的方法查看和使用;私有属性和方法(“-”)则仅在该类的内部可见,而且只有该类的方法才可以使用;受保护属性和方法(“#”)则不仅可以被该类内部的方法使用,也可以被该类的子类使用,但不能被其他类的方法使用。
在设计类时,类的属性一般都设计成私有的,类外的方法通过置取函数访问类的属性;类的方法根据是否需要提供给其他类进行使用来确定设置成私有还是公有。公有方法为其它类提供了访问接口,私有方法只有本类自己使用。为了方便一般子类使用父类的属性,同时保证类的封装性,把这样的方法设置为受保护的。
类间关系
类图描述包括两个部分类和类间关系,主要的类间关系包括:
关联(普通、聚合、组合)、泛化、依赖、实现
(1)关联
关联(association)描述了类和类之间存在着连接。
1、单向关联
A1->A2: 表示A1认识A2,A1知道A2的存在,A1可以调用A2中的方法和属性
场景:订单和商品,订单中包括商品,但是商品并不了解订单的存在。
2、双向关联
B1-B2:表示B1认识B2,B1知道B2的存在,B1可以调用B2中的方法和属性;同样B2也知道B1的存在,B2也可以调用B1的方法和属性。
场景:订单和客户,订单属于客户,客户拥有一些特定的订单。
如果想说明相关联的对象的数量,具体的说就是几个对象和几个对象相关联,可以在关联上标上关联数量,例如上例中类“人”和类“汽车”的带有数量的关联表示,如图所示。
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开,比如:电脑包括键盘、显示器,一台电脑可以和多个键盘、多个显示器搭配,确定键盘和显示器是可以和主机分开 的,主机可以选择其他的键盘、显示器组成电脑。
组合关系(Composition)也是描述整体与部分的关系,但是整体与部分不可以分开。例如:公司和部门,部门是部分,公司是整体,公司A的财务部不可能和公司B的财务部对换,就是说,公司A不能和自己的财务部分开。
聚合与组合关系
聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
(2) 泛化
在面向对象的分析过程中,先从一个一个具体的对象分析出类,再把一个一个具体类的共性抽取出来得到更抽象的类,这个过程叫泛化,得到的更抽象的类称为泛化类,泛化类和具体类之间的关系称为泛化关系。
一般将泛化类称为超类,将具体的类称为子类。
本质上, 泛化指的是类之间的继承关系,在UML中用带实线的三角形箭头表示。
场景:父与子、动物与人、植物与树、系统使用者与B2C会员和B2E会员的关系。
(3) 依赖
类A要完成某个功能必须引用类B,则A与B存在依赖关系,依赖关系是弱的关联关系。
场景:本来人与电脑没有关系的,但由于偶然的机会,人需要用电脑写程序,这时候人就依赖于电脑。在程序中一般为 using 引用。
(4) 实现
实现关系(Implementation)是用来描述接口和实现接口类的关系。
接口可以看成是一种特殊的类,它强调对外提供的功能和行为结果。
类图创建
构思用户管理模块的类
构思用户管理模块的类
对象图概述
在面向对象分析和设计中还会涉及到对象,UML中也提供了相应的描述方法,就是对象图。对象图(ObjectDiagram)描述了一组对象及对象之间的关系。
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图也是有生命周期的,它只能在系统某一时间段存在。
下图是两个类“人”和“汽车”对应的三个对象“张三”、“商务用车1”和“家用车1”,以及三个对象之间关系。对象图中所包含的都是一个个具体的对象,象类图一样对象图也包括三个部分,分别是对象的名字、对象的属性值和对象的操作方法。对象之间的关联在对象图中被称为“链”。
对象图应用
在面向对象分析与设计中,多数情况下都使用类图进行分析和设计,对象图使用较少。主要在以下两种情况下使用对象图来分析和描述一个系统。
第一种情况是在分析阶段的初期,用户在描述需求中同时会提到很多的对象和类,为了获取重要对象和他们之间的关联,需要使用对象图对这些对象进行描述。
第二种情况是在分析和设计过程中,需要对某些重要的对象进行重点的描述,这时会用到对象图,或者从对象图开始分析,逐步找出对象之间的关系,以及对象的动态特征。例如协作图和状态图都是以对象图为基础,进一步分析对象的动态特征的。
除此之外,对象图还用于描述对象之间的交互过程;描述对象的瞬时状态和状态变化;描述对象的数据结构等等。