当前位置:首页 > 公众号精选 > 码农爱学习

前面介绍的用例图和活动图,都是为了捕获用户的需求。

需求明白了之后,就要开始设计。

而类图,就是用来进行软件设计的一种图。类图是一种静态图。

1 类图的定义与面向对象

1.1 类class

类的具有相同属性、操作、方法、关系或者行为的一组对象的描述符。

类是真实世界事物的抽象。

1.2 对象object

类的实例,被称为对象。

同一个类的各个对象具有:

  • 相同的属性,但属性的取值可以不同
  • 提供相同的操作、有相同的语义

综上,把类相关的元素画在一起,即为类图。

1.3 面向对象设计要解决的问题

在设计一个较为复杂的软件系统时,往往需要进行建模,是使用类图建模时,需要考虑:

  • 这个系统有多少个类?
  • 每个类需要定义多少个属性?
  • 每个类需要定义多少个操作/方法?
  • 类与类之间的关系是怎样的?
  • 类之间的信息交互、如何完成复杂功能的?

2 UML中类图的元素介绍

2.1 类的表示

类的图形表示可由4个部分组成:

  • 名称
  • 属性
  • 操作/方法

此外,在类的图形最下面,还可以再加一个职责的描述,用来对这个类的功能进行说明。

在显示时,只有名称是必须的,其余部分可以隐藏,不展示。

2.2 类之间的关系

2.2.1 继承/泛化(实线+空心三角箭头)

继承,也可称作泛化,表示一般与具体的关系。

2.2.2 实现(虚线+空心三角箭头)

类与接口的关系。

2.2.3 依赖(虚线+箭头)

某个类的功能依赖另一个类

2.2.4 关联(实线/实线+菱形)

关联的修饰,包括名称、角色、多重性、聚合/组合,后面小节具体介绍

2.3 类元素的命名

2.3.1 类

类名的每一个词的首字母大写,如:Student

2.3.2 属性

属性名除第一个词之外的每个词的首字母大写,如:stdNumber

2.3.3 操作/方法

操作名除第一个词之外的每个词的首字母大写,如:selectCourse();

3 关联关系的修饰

3.1 名称及其方向

  • 名称:即描述关联的词,如老师教(teaches)课程
  • 方向:用箭头表示关系的指向,比如在下图中,可以在teaches右边补充一个向右的箭头,表示是左边的老师讲授右边课程

3.2 角色

角色,就是关联中对象扮演的角色,比如公司扮演雇主,人扮演雇员。

3.3 多重性

指定在任何时间点关系中可以涉及的对象数。

无默认多重性 如果未明确说明多重性,则为未定。

装饰语义
0..10个或1个
11个
0..*0个或无数个
1..*1个或无数个
1..3,7..101个到3个,7个到10个
*0个或无数个

来看下面这个例子:

从图中可以看出:

  • 一个公司有7个雇员,1个人可以被一个公司雇佣。
  • 一个银行账户对应一个拥有者;一个银行账户又可以有多个操作者。
  • 一个人可以有0到多个银行账户;一个人又可以操作0到多个银行账户。

3.4 聚合/组合

聚合和组合,都是表示部分与整体之间的关系。

  • 聚合:"整体"有管理“部分”的特有的职责,例如,学校和学生
  • 组合:“整体”拥有“部分”的生命,例如,手机和屏幕

3.5 关联类

关联类,是一种特殊的类,既能当关联使用,又有类的特点。

例如,公司与个人这两个类,仅靠普通关联可能无法描述清楚其关系,这个时候就可以使用关联类,它能定义关系的属性、操作等等。

4 类图实例

4.1 实例一

如下图:

  • 电视机依赖插座
  • 发电厂实现插座的供电功能
  • 屏幕是电视机的一部分,是组合关系
  • 火力发电厂是发电厂的一种,是泛化关系
  • 发电厂由发电设备,工厂工人等来维持正常运作,是聚合关系

4.2 实例二

如下图:

  • 学校里有学生,是聚合关系,并且学校可以有1个至多个,对应的学生可以有任意个
  • 学校里有各个部分,是组合关系,一个学校可以有多个部门/学院
  • 学生可以选课,1个学生可以选多个课程,1个课程也可以被多个学生选
  • 1个部门/学院可以开设多个课程
  • 1个课程可以由多个教师来讲授
  • 1个部门/学院可以多个教师,是聚合关系

5 总结

本篇介绍了UML中的类图,主要包括类图的各种元素,类之前的各种关系等等。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭