UML之类图(Class Diagram)

本文介绍了UML类图的基本概念,包括类的描述和类之间的三种主要关系:继承、关联和依赖。类图用于描述类的静态结构,通过名字、属性和操作来定义类。继承使用单向三角箭头表示,关联用有向单箭头表示,而依赖则用虚线箭头表示。类图是程序员的沟通工具,掌握基本元素和关系对于理解和设计系统至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

类自身的描述

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


类之间的关系

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

继承(Generalization, Extends)

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


关联(Association)

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


依赖(Dependency)

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


小结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值