3.2 类图的基础知识
类图有什么用? 某项目客户提供的原始需求文档中,有下面这样的一段话,请你仔细阅读,看看能不能将你搞晕? “本项目是在一期的基础上增加对电缆、通讯工程的管理和施工详细数据的记录和统计,使整个系统更好的管理各工程项目从中标开始到竣工验收的全部过程和资料和分析施工过程的数据。 本系统将一条或一个标段的架空电力线路工程定为一个单位工程,即系统中的一个工程项目;每个单位工程分为若干个分部工程;每个分部工程分为若干个分项工程;每个分项工程中又分为若干相同单元工程。” 这段话中带下划线的文字,可能是本系统的一些关键业务概念。 如果你还没有晕的话,请回答下面的问题: 1) 你能用一句话描述这个系统是做什么的吗? 2) 这段话有什么业务概念?每个业务概念是什么意思? 3) 这些业务概念之间是怎样的关系? 上面那段文字充斥了大量的术语、概念(带下划线的字),如果你不是专业人士,恐怕难以读懂上述文字。项目初期,我们往往对业务一无所知,我们最急迫需要解决的问题就是理清楚这些业务概念以及它们的关系。 每个软件系统都会涉及到很多人、业务概念和物品等,这些东西之间可能会有很多关系,发生很多事情。类图能帮助我们识别出这些人、业务概念、物品和事情等,并理清它们的关系。 什么是类? 你大概了解了类图的用途了吧?我们暂时不去深究那段让人头晕的业务描述,我们先看看什么是类? 需求中提到的各种业务概念、人物等,经过抽象后我们都可以视之为类。为了更好地体验什么是类,请看下面这个练习。 练习:如果对本书的读者进行分类,你会如何分类呢? 强烈建议你先思考写下答案后才继续往下看。 男人、女人? 人无非就是男人和女人两种,所以本书的读者不是男人就是女人。这样分类合适吗? 男人和女人在看这本书的时候,会有什么差异吗?将书的读者分为男人和女人,有什么好处? 如果不分为男人和女人,分为老人与年轻人,这样合适吗? 学生、在职人员? 学生和在职人士读本书的时候应该是有所差异的,毕竟两者的基础不太一样。如果你是本书的作者,你觉得本书的目标读者是谁呢?编写本书时,你会更照顾学生还是在职人士呢?我们对读者进行分类,并不是为了分类而分类,而是希望通过对读者这个群体进行分析,写出一本内容更精彩销量更好的书。 将某类东西归纳为一起,可以称为一个类。类有很多种提炼角度,我们需要根据系统的目标、业务的场景等,选取合适的角度对事物进行归纳。 什么是类图? 只有一个类的类图,可能就是最简单的类图了,请看下图: 图 3.1 只有一个类的类图 一个类就是一个矩形的方框,最上面是类的名字,中间是属性(Attribute),最下面是操作(Operation)。表示一个类时,可只显示类名,也可以只显示类名和属性,或者是类名和操作。 我们看看这个属性:+属性1:int。 前面的“+”号表示这个属性是public类型的,实际上在需求分析时,不需要管属性是public还是private,全部画成public就可以了。 冒号后面的int,表示属性的类型是int型(整数型),往往在需求分析初始阶段,可不必标识属性的类型。 至于操作,用类图进行业务建模时,一般不需要标识出来。 一个类图通常不止有一个类,有多个类时,我们还需要表达出类之间的关系,后面我们将介绍类之间的关系。 如何识别类? 用类图获取需求的大致步骤如下: 1) 识别出类。 2) 识别出类的主要属性。 3) 描绘出类之间的关系。 4) 对各类进行分析、抽象、整理。 我们通过下面这个练习来体验一下步骤1、2。 练习:你需要做一个培训管理系统,请你用类图识别出课室中有什么人?这些人有什么关键属性? 强烈建议你先独立完成才继续阅读下文。 课室中有以下两类人: 图 3.2 学生与讲师1 说明:该图是类图的简单画法,只表达了类名。 这两个类有这样的关键属性: 图 3.3 学生与讲师2 说明:上面的类图同时表达了类名和类的属性。属性没有标记public还是private,也没有被标记属性的类型。业务建模时类图的属性可以看成全部是公开的,也不必标记属性的类型。 这个练习的场景是:你需要做一个培训管理系统,所以你识别出类以及他们的属性的时候,务必从这个角度出发。如果你得到的类是男人和女人,那就可能没有什么意义了。 如果你识别出来的属性是身高、体重,这些属性无论是属于学生还是老师,对于培训管理系统来说,可能是没有什么价值的。思考你识别出来的类的属性,能帮助你判断这个类是否合适。每一个类应该具备能表征它核心特点的关键属性,而一般的无特别意义的属性,可不必标记进去。 类图的基本语法是很简单的,但要体会什么是类,准确识别出类就不是那么简单了。实际工作中,我们需要将需求调研中了解到的所有业务对象、人物等列出来,画出他们的关系,反复推敲,逐步才能得到合适的业务模型。下面我们将开始学习类之间的关系。 |