UML定义
UML语言是一种典型的面向对象建模语言,其重要内容是各种类型的图形,分别描述软件模型的静态结构,动态行为以及模块组织和管理,在C++中UML主要用来描述软件中类和对象以及它们的静态关系
UML类图
类图的基本内容
一个类图是由类和与之相关的各种静态关系共同组成的图形,类图展示的是软件模型的静态结构,类的内部结构以及和其他类的关系
类图中最基本的是要图形化描述类,要表示类的名称、数据成员(UML中称之为属性)、函数成员(行为,UML中称之为操作)
如何画类图
在UML中用一个由上到下分为3段的矩形来表示一个类:
类名写在顶部区域
数据成员在中间区域
函数成员在底部区域
UML规定数据成员的语法为:
[访问控制属性] 名称 [重数] [:类型] [=默认值][{约束特征}]
访问控制属性:
- public: +
- private: -
- protected: #
重数:可以是名称后面的方括号内添加属性的重数(多重性)
类型:可以是基本数据类型,也可以是自定义类型
约束特征:用户对该数据成员性质约束的说明,例如{只读}说明它具有只读的属性
UML规定函数成员的语法为:
[访问控制属性] 名称 [(参数表)] [:返回类型] [约束特性]
返回类型:可以是基本数据类型,也可以是自定义类型,也可以是一个类,还可以是上述类型的指针
画图注意要点:
-
类图中的名称应该是有意义的描述,并且是面向系统的。
-
画类图前应先确定每个元素之间的关系。
-
类图中的每个类职责(属性和方法)应该清晰标明。
-
对于每个类的属性的最小数量应符合规定,不必要的属性将使图表复杂。
-
使用了以下注释有否要求来描述图中的某些方面。因为上面的附图,它应该是可以理解的开发者/编码器。
-
最后,在最终版本之前,该图应绘制在普通纸上尽可能多次,使其纠正和返工。
类图的关系
- 依赖关系
描述一个事物的变化可能会影响到使用它的另一个事物,反之不成立
当描述一个类使用另一个类作为它的函数成员参数时,就使用依赖关系
特征:
一个类的方法的参数的数据类型是另一个类的定义
一个类的方法使用了另一个类的属性
一个类的方法调用了另一个类的方法
例:
- 作用关系——关联
用于描述一个类的对象和另一个类的对象之间相互作用的连接,用实现来表示的两个类(或用一个类)之间的关联,在线段两端通常包含多重性(或称重数),多重性表示关联另一端类的对象要求与本端类的多少个对象发生作用
特征 均为属性上的关系
1、一个类的属性的数据类型是另一个类的定义;
2、一个类的部分对象与另一个类的部分对象存在属性值上的联系;
3、关联关系一旦建立,系统运行与否它都存在。
例:
重数A决定了B的每个对象与A的多少个对象发生作用
重数B决定了A的每个对象与B的多少个对象发生作用
重数的形式与含义:
- 包含关系——聚集和组合
是一种特殊的关联
聚集:表示的是整体与部分的关系,分为共享聚集和组成聚集
共享聚集:一个整体包含多个部分,但多个部分又可以是另外一个整体的部分
组合:组成聚集,即整体拥有各部分,部分与整体共存,且部分不为另外的整体所拥有
例:
- 继承关系——泛化
类之间的继承关系
特征:
一般类定义了共同的属性和方法
特殊类继承了一般类的属性和方法
特殊类还可以定义自己的属性和方法
例:子类1说明单继承,子类2说明多继承
UML对象图
对象图的基本内容
UML对象图和类图一样反应系统的静态过程,显示的是某时刻对象和对象之间的关系,一个UML对象图可以看作类图的一个实例,实例和类在其中显示,由于对象存在生命周期,所以UML对象图只能在某一时间段存在
如何画对象图
在UML中用从上到下分为两段的矩形来表示一个对象:
对象名:顶部区域
对象属性:底部区域
表示法:在对象名后跟一个冒号加上类型名,并且使用下划线与类进行区分。
如:
标准表示法:stu:Student
建模步骤:
- 确定对象及对象状态(从类图中来)
- 建立链(从类图中来)
对象图的组成元素——链:
Object1 ——Object2
- 链是关联关系的实例,是两个或多个对象之间的独立连接。因此,链在对象图中的作用就十分类似于关联关系在类图中的作用。
- 在UML中,链同样使用一根实线段来表示。
- 链主要用来导航。链一端的一个对象可以得到另一位置上的一个或一组对象,然后向其发送消息。链的每一端也可以显示一个角色名称,但不能显示多重性。
画图注意要点
- 对象图的主要内容是对象。
- 对象图中的链接是用来连接对象。
- 对象和链接的两个要素,用于构造一个对象图。
- 对象图的名称要有意义,以表明其目的。
- 最重要的要素是要确定。
- 对象之间的关联,应该予以明确。
- 不同元素的值需要捕获包含在对象图。
- 添加适当的注释,需要更清晰点。