首页 > 代码库 > UML之类图(Class Diagram)

UML之类图(Class Diagram)

类图是类的静态关系描述图,简单来讲有两个方面,有哪些类,这些类之间的关系是什么?需要注意的是类图描述的是静态关系,动态行为的如流程,判断,循环等类图无法描述,需要搭配其它UML图。

类自身的描述

生物由细胞构成,类图由类构成,我们先看看类长什么样,如何描述。首先类有一个唯一的名字,通常用手写字母大写的英文字母表示,一班名字应该用名词来表示。类的内部有两个部分构成,数据部门和操作部门。数据部门也叫属性(Property),存储一些数据、状态、关联等信息,操作部门表示的是该类能够执行的操作(Operation)。熟悉OOP的朋友会比较容易理解,前者就是类的全局变量,后者是方法(Method)。综上,类内部的图分为三个部分,上中下结构,上部为类的名字,中部存放属性,下部表示操作列表。三个部分都只有名字是必填项,格式可能比较复杂,不过常用的都很简单,再加上一些优秀的UML工具帮忙,还是比较容易上手的。


类之间的关系

类之间的关系种类归纳起来也就三种,事实上很好掌握,至少看得懂是很容易的。复杂的用法让专家去处理吧,不过话说回来,图的目的主要是沟通交流,太复杂了,哪来那么多专家交流。所以个人认为最简单的可用的系统,最可靠,最有效,类图也如此。

继承(Generalization, Extends)

继承是OOP的一个重要特性,合理的地方使用继承给系统的设计和实现带来非常大的好处。不过,使用过度也会让系统难以理解、维护、扩展,一个重要的判断标准是替换原则,任何使用父类的地方,替换为子类,正常运转。类图里面使用单向三角箭头的有向线表示继承。箭头的类型和方向我是这样记的,箭头最大(三角形)为继承,方向的话,父类不知道子类的存在,子类知道父类的所有信息,所以箭头是由子类指向父类。


关联(Association)

关联也是另外一种非常常见的类关系。稍微大一点的项目都会有不只一个类文件,所有的类需要关联起来,互相合作,才能完整的实现整个系统。理论上来说,一个含有String类型属性的类,与String类也存在关联的关系,但我们通常不会这样表示。这就引出一个比较有意思的话题,什么时候一个属性应该表示为数据,什么时候又应该表述为关联关系。完全同意Martin Fowler的观点,值得体现在类图上面的,重要的表示为关联关系,其它的都表示为数据。以上面String的例子来说,显然String不值得体现在类图上面,所以表示为数据。关联关系在类图里面用有向单箭头线表示。箭头小,指向被关联的类,我把它理解为链接(Link)的概念。


依赖(Dependency)

准确的说,应该是直接依赖。同上,保持类图的简单性,所以只标识重要的依赖关系。依赖的情况很多,不过设计良好的程序总结下来就只有一种API依赖,或者更直白一点就是方法调用依赖,方法签名改了,调用者也得跟着改变。可能的情况如,静态方法修改,参数对象对应类的借口修改等。类图里面依赖关系的表示和关联相似,只是线条变为虚线而已。


小结

UML图一般是用来沟通的,是程序员的统一语言,有它的普适性。一般情况下也无需绘制得多么的精确和完备,理论上只需要掌握一些基本的概念和知识即可,不要把它想得多么的高大上,事实上,常用的几个UML图,常用的一些画法比较容易掌握,值得学习。