从本节开始,我们正式开始课程第一部分UML的学习。我们要学到的第一个图形是类图,类图可能是我们在各种文档里见到过的最多的一种UML图,许多人一提UML首先想到的也是类图。
在各种系统的技术文档里,描述系统或者模块的核心类和业务概念时都会用到类图,比如下面这个呈现了电商系统订单模块的关键业务概念的类图。
通过这个类图我们就能清晰地看到系统中都有哪些关键类,以及他们相互之间是怎么整合在一起的。 除了这种相对宏观的类图,再有就是相对微观的描述某个功能的实现的类图,比如下面这个关于支付策略功能是怎么设计实现的类图。
像设计模式的资料里,描述模式中各个类的功能和相互之间的关系时都会用到类图。
类图是最常用的一种UML图,也是学习其他UML的基础。同时还是锻炼自己文字表达能力、抽象提炼能力的一个非常好的方法。你想当你在接触到一个需求或者系统后,只有把里面的业务抽象提成成一个个类,才能进一步绘制出类之间的关系(结构),然后才是分析流程的交互,这在UML里分别叫做结构建模和行为建模。
说到了用UML类图,我也说说我当初在写毕业论文或者技术文档时的困惑:
怎么从需求提炼出类?
类图必须把类的属性和方法都画出来吗?
各种继承、实现、依赖、组合关系用类图怎么表达,他们的区别是什么?
各种类关系怎么用代码实现?
我相信大家也有同样的困惑,那么在这篇文章中我会带大家循序渐进的掌握前三点,先让大家能动手实践起来,能做到把需求分析提炼成类图,到下一节我们再结合着代码阐明这些类关系在面向对象编程里对应着什么样的代码结构。
类图有什么用
项目初期我们往往对业务一无所知,这时最急迫需要解决的问题就是理清楚这些业务的概念以及它们的关系。 每个软件系统都会涉及到很多角色(人)、业务概念、物品等,这些东西之间可能会有很多关系,发生很多事情。类图能帮助我们识别出这些角色、业务概念、物品和事情等,并理清楚它们的关系。这个过程叫做业务的结构建模。
什么是类
将某类东西归纳在一起,可以称为一个类。 比如假设我们的课程--程序员的全能画图课--是一本书,这本书的读者,可以按照男人、女人来分类,也可以按照读者是学生还是在职人员来分类。 不过将读者分为男人和女人看起来没有什么效果,男人和女人在看书的时候有什么差异吗? 类有很多种提炼角度,我们需要根据系统的目标、业务场景等,选取合适的角度对事物进行归纳。
如何识别出类
在需求分析的过程中用类图做业务结构建模的大致步骤如下:
识别出类。
识别出类的主要属性。
描绘出类之间的关系。
对各类进行分析、抽象和整理
看一个例子: 假设要做一个在线课堂的系统,我们尝试用类图识别出在线教室里有哪些人以及这些人的关键属性。 提到在线课堂,首先我们能想到肯定有两类角色,一类是学生还有一类是老师,所以我们先画出这两个识别出的类。
接下来我们再来想他们应该具备什么属性。
这个步骤的要点是:需要做一个在线课堂,所以在识别类和他们的属性的时候务必从业务角度出发。 如果你识别出来的类是男人和女人,没什么意义。同样的,如果识别出来的类的属性是身高、体重,这些属性无论是属于学生还是老师,对于在线课堂系统来说也没什么价值。 所以思考识别出来的类的属性也能帮我们判断这个类是否贴合实际,是否贴合业务场景。
类的识别,要和需求调研中了解到的所有业务对象有关,每个类要画出能表达它核心业务特点的关键属性,一般无特别意义的属性,不必标记进去。
这里也回答了我们上面提到的类图使用中的第二点困惑:用类图做需求分析或者是后面做程序设计时,没有必要把所有的类属性和方法都列到这里,只列出能表达类的业务特点的关键属性即可。
在继续本节的内容前再提醒一下苹果手机的用户,因为苹果税的存在本专栏在微信直接订阅,价格会高于安卓用户,所以专栏在小报童同步更新,苹果手机用户可以通过扫描二维码在小报童订阅阅读,规避额外开销。
UML 怎么表示类图
接下来我们介绍使用UML类图时需要掌握的基本语法。