第三章 类图
目录:
3.1 类的表示
1.类图
类图是描述类、协作(类或对象间的协作)、接口及其关系的图。与所有UML的其它图一样,类图可以包括注释、约束、包。
类图中的关系包括:依赖关系(Dependency)
泛化关系(Generalization)
关联关系(Association)
实现关系(Realizetion)
图3-1 电子商务网站的对象模型
2.类图的作用
(1)为系统词汇建模型
(2)模型化简单的协作
(3)模型化一个逻辑数据库模式
(4)类图的组成元素
类图中的元素有类、接口、协作、关系、注释、约束、包。关系把类、协作、接口链接在一起构成一个图。注释的作用是对某些类和接口进行注释,约束的作用是对某些类和接口进行约束。
3.2 类图中的关系
3.2.1 类的表示
UML中,表示一个类,主要是标识它的名称、属性和操作。如图3-2所示,类由一个矩形表示,它包含3栏,在每栏中分别写入类的名称、属性、操作。
图3-2 Order类
1.名称
类名称不可同名。名称(Namre)是一个文本串。
2.属性
属性描述了类的静态特征,在面向对象编程中,把属性表示为成员变量。在属性的面前有一个修饰,用来表示属性的可见性,属性的可见性一般都是private,这样才符合面向对象的“封装”思想。
3.操作
操作是类所提供的服务,通俗的说,操作就是定义了对象所能做的事情。在面向对象编程语言中,它通常表示为成员方法。
4.职责
职责指类承担的责任和义务。在矩形框中最后一栏中写明类的职责。
图3-3 职责的表示
5.约束
约束指定了类所要满足的一个或多个规则。在UML中,约束是用花括号括起来的自由文本。
图3-4 约束的表示
3.2.2 类的种类
1.抽象类
在进行类设计时,如果一些具体类具有相同的方法或属性,我们可以把这些相同的方法或属性从这些具体类中抽取出来,把它们封装到一个抽象类中,然后扩展抽象类,重新定义这些具体类。
抽象类是一种不能直接实例化的类(不能用抽象类创建对象)
在UML中,抽象类和抽象方法的表示是将其名字用斜体表示。草图中用《abstract》构造型来表示。
图3-5 抽象类的2种表示方法
2.接口
接口是一种类似于抽象类的机制,接口中的方法都是抽象方法。在UML中,接口有两种表示方法,如下图所示
3.关联类
在应用当中,我们发现两个类之间具有多对多的关系,并且有些属性不属于关联两端任何一个类,例如,在某个应系统中有两个类:person(人)和institute(协会),显然persong可以属于多个institute,而每个institute肯定会吸纳很多person。因此它们之间很显然就是一个多对多的关系。
如果要记录每个person在所属的institute所担任的职务,应该把这个职务属性放在哪个类中呢?这个属性既不属于person,也不属于institute。显然,这个属性应该放在关联类中(Role),如图3-6所示。
图3-6 关联类Role
4.模板类
在注入c++这样语言中,提供了一种叫做参数化类(parameterized class)的机制,或叫做模版(template)。例如,我们需要一些能过处理整型、浮点型、字符串的数组,普通的做法是为它们各创建一个类,这三个类除了数据类型不同之外,其他的都是相同,但是仍然要定义三次。
模版就是用来解决这个问题,可以根据占位符或者参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型。通过实际值代替占位符即可创建新类。这样,就可以采用如图3-7所示的设计方案