俗话说:“万事开头难”,小编画用例图用了2,3天的时间,有点无从下手,通过同学指导,查询博客等各种方法进行了解,站在巨人的肩膀上确实会让我们自己成长的更快。那么有了画第一个图的经验,我便开始了画图学习的征程。
咱们今天重点来讨论一下静态图的大兄弟——【类 图(Class Diagram)】
类图:描述系统中的静态结构,它不仅定义系统中的类,表示类之间的关系,如关联、依赖、聚合等,还包括类的内部结构(类的属性和操作)。
一、类:什么是类?
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
类是对现实生活中一类具有共同特征的事物的抽象。
简单来说:
- 类是对一组具有相同属性,行为,关系和语义的对象的描述。
- 一个对象是一个类的实例。
二、类的关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
1.泛化(Generalization):
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:马是动物的一种,即有马的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类。
2. 实现(Realization):(实现接口)
【实现关系】:是一种类与接口的关系,它表示不继承结构而只继承行为,是类与接口之间最常见的关系。准确的说,类不是继承(inherit)接口,而是实现(implement)接口。
例如:查询到数据之后导出Excel表。
【箭头指向】:带三角箭头的虚线,箭头指向接口。
3.关联(Association):
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,
【箭头及指向】:单向关联为带普通箭头的实心线,箭头从使用类指向被关联的类。 可以是单向和双向。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
4.聚合(Aggregation):
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
例如:车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。 或者:大雁聚合成雁群,大雁离开雁群依然存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【箭头及指向】:带空心菱形的实心线,菱形指向整体
5.组合(Composition):
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。(不可分)
例如:一个人是由四肢和头组合(不可分)
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【箭头及指向】:带实心菱形的实线,菱形指向整体。
6.依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
例如:学生上机依赖卡号。
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化(类与继承关系)is-a = 实现(类与接口关系) > 组合(整体与部分的关系) > 聚合(整体与部分的关系) > 关联(拥有的关系) > 依赖(使用的关系)
口诀:
虚线箭头指向依赖;
实线箭头指向关联;
虚线三角指向接口;
实线三角指向父类;
空心菱形能分离而独立存在,是聚合;
实心菱形精密关联不可分,是组合;
下面这张UML图,比较形象地展示了各种类图关系:
三、机房收费系统的类图: