1、什么是类图
类图(Class diagram)主要用于描述系统的结构化设计。类图也是最常用的UML图,用类图可以显示出类、接口以及它们之间的静态结构和关系。
2、类图的元素
在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联(Association)关系、聚合关系(Aggregation)、组合关系(Composition)和实现(Realization)关系。
2.1 类(Class)
·属性规格说明格式:
可见性属性名称:类型〔多重性]:默认值{特性字符串}
·操作规格说明格式:
可见性操作名称(参数名称:类型):返回值{特字符串}
在面向对象(OO) 编程中,类是对现实世界中一组具有相同特征的物体的抽象。
可 以 指 定 利 用 以 下 的 符 号 指 定 相 应 元 素 的 可 见 性
· 公 有 可 见 性 ( + ) 对 能 看 到 这 个 类 的 任 何 元 素 都 可 见
保 护 可 见 性 ( # ) 对 这 个 类 及 其 子 类 的 其 他 元 素 可 见 ;
私 有 可 见 性 ( -) 对 这 个 类 的 其 他 元 素 可 见 :
包可见性(~)对同一包中的其它元素可见。
2.2 接口(Interface)
接口是一种特殊的类,具有类的结构但不可被实例化,只可以被实现(继承)。在UML中,接口使用一个带有名称的小圆圈来进行表示。
2.3 关联(Composition)关系
关联关系是类之间一种相互影响的关系,是一种粒度较大的语义关系,影响的方向就是关联的方向(双箭头有时省略)。体现了一种语义关系,在UML类图中,组合关系用实线箭头来表示。其它基本类关系是对一般关联图标的精化。在开发后期常精化为更准确的的泛化,聚合和组合关系。
关联通常用名词词组来标识,以说明关系的实质。类可能与它自己有关联(称为自关联),类的实例之间的协作。下图同时使用了关联端名称和关联名称,目的是也有可能在同一对类之间存在多个关联,关联可以进一步通过多重性来修饰。
关联关系具有多重性和可见性的特征,还可以具有方向性。在精化中常常需要将关联关系精化为一个几个其它的关系。
类或对象间的关联或链接的端点的名称表示了对象或者类的扮演的角色,而关联的名称表明了两者间存在的事件名称
较具体的关联关系
粒度较大的关联
2.4 泛化(Generalization)关系—是基本的类继承
简单的讲就是类之间的继承关系。在UML中,泛化关系用空心三角形+实线来表示,箭头指向为父类。泛化意为一般化,父类是子类的一般化(泛化),反之是特化
2.5 聚合(Association)关系
聚合关系是类之间的一种较弱的耦合关系,如一个字符串数组和一个字符串就是一种聚合关系。在UML中类图中,聚合关系用空心的菱形+实线箭头来表示,箭头指向为被聚合的类。
表示一片森林由n个树木聚合而成,少几颗树林仍然为森林
2.6 组合(Aggregation)关系
组合关系是类之间一种整体与部分之间的关系,如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系。在UML类图中,组合关系用实心的菱形+实线箭头来表示,箭头指向为被组合的类。
表示一颗树由n个树叶和n个树支组成,但少了树叶就不能成为树。
2.8 实现(Realization)关系
一般来讲实现关系是针对类与接口之间的关系而言的。在UML类图中,实现关系用空心三角形+虚线来表示。
树枝,树叶的接口有生成等
3. 简单的类图示例
树叶,树枝可以有一样的接口例如 生长,树叶树枝的生长是不同的,它们都在各自方法中实现生成这个接口。而树叶树枝本身也是虚类型
- 关于依赖(Dependency)关系
依赖关系并非基本的类关系,而是一种粒度较大的语义关系。常用于组件或者包级别间,在类间常常细化为其它关系。
依赖关系是指两个或多个类之间的依存关系,如植物类依赖于土壤类。 依赖关系还可以再细分为5种类型,分别是绑定(Binding)依赖、实现(Realization)依赖、使用(Usage)依赖、抽象(Abstraction)依赖和授权(Permission)依赖。依赖倒置原则说明应尽量减少直接依赖的内容,减少耦合度.
依赖关系的代码表现,局部变量、方法的参数或者对静态方法的调用
依赖关系用虚线箭头来表示,箭头指向为依赖的方向。
- 各种语义关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 ,依赖
依赖和关联都是语义最弱的关系,它们是粒度较大,随着真正设计的进行会转化为更为具体的语义更强的关系或多个关系。
6. 实线箭头和虚线箭头,双向和单向箭头的区别
实线箭头表示单向关联,即:关联类知道被关联类的公共属性及操作,但被关联类 并不知道关联类的公共属性及操作。
关联单向、双向之分。双向关联用没有箭头的实线表示 ,实线箭头表示Object Message,也就是类间的消息发送,
比如:方法调用和请求等等,这些都是从一方向另一方主动发出信息。
虚线箭头表示两个类之间存依赖关系。即:一个类引用另一个类。只存在单向依赖。 虚线箭头表示Return Message, 一般用于表示方法调用后的返回信息
实线代表有引用的关联,一般代码中会直接有关联的类的引用,但虚线就没有,一般知识方法上的调用关系。如是而已。