UML详解(1):类的关系与如何绘制类图

本文主要介绍UML类图,它是面向对象系统建模常用且重要的图。详细讲解了类和接口的表示方法,如类的三行表示法、接口的两行表示法。还阐述了类之间的六种关系,包括继承、实现、聚合、组合、关联和依赖,并说明了各关系的表示符号和特点,最后给出记忆方法和完整实例。

        作为一个程序员,我们经常会使用UML来绘制各种图,类图就是其中常用之一。对于初学者来讲,如何读懂类图可能是一件有些困惑的事情,这里通过逐步梳理,帮助你详细了解类的关系,以及以后如何绘制类图。

 

1.0 定义

        类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的接口以及它们之间的静态结构关系的一种静态模型。

        这里要注意四个关键字:类、接口、静态结构、关系,接下来我们来逐一讲解。

 

1.1 如何表示一个类

通过UML工具拖动一个表示“类”的图形,你发现有很多种,常用的是这一种:

类图模型

第一行,表示类的名字,如 Person;

第二行,表示类的属性,如 name:string = "",格式为属性名:类型 = 默认值,其中可以不包含默认值;

第三行,表示类的方法,如 sayHello(name),格式为方法名(参数列表):返回值,其中可以不含参数,无返回值。

注意,+-表示属性是公开的还是私有的(public 或 private),此外还有#表示保护(protect),static静态方法。

 

1.2 如何表示一个接口

当然,你可能发现还有一个只有两行的图形,什么时候拖它呢?当你要表达一个接口的时候,就可以用它了。

接口类

第一行,明确写上<<接口>>的标识,然后换行写下接口名;

第二行,表示接口需要实现的类方法。

 

1.3 类的其他表达

        除了以上两种之外,我们可能会在UML绘制里还能找到以下几种:简单类、多例类、活动类等,这些在类图中并不常用,一般如何一个类只有方法没有属性,则第二行空着即可。

注释的表示

此外,常见的还有一种对象,那就是上图表示的注释。

 

2.0 关系

        表示类的关系总共有6种,这6种又可以分为3类

        第一类,泛化。泛化表达了is a的关系模型,当A以某种形式是一个B的时候,就是这种关系,包含了有2种关系:继承实现

        第二类,关联。关联表达了has a的关系模型,当A拥有一个B的时候,就是这种关系,包含了有3种关系:聚合、组合、关联

        第三类,依赖。依赖表达了use a的关系模型,当A使用了一个B的时候,就是这种关系,包含了1种关系:依赖

 

2.1 继承关系

继承关系

继承使用一个实线+空心三角箭头,从子类指向父类即表示一个继承,如:

继承关系示例

鸟类继承自动物类。

 

2.2 实现关系

实现关系的表达

实现使用一个虚线+空心三角箭头,从实例指向接口即表示一个实现,这里可以看到,泛化关系(继承、实现都是空心三角箭头,指向实体是实线、指向虚有的接口则是虚线),实现的一个实例如:

实现的实例

大雁实现了飞翔接口。

 

2.3 聚合关系

聚合关系的表达

聚合使用一个实线+空心菱形箭头,从整体指向局部即表示一个聚合,注意,聚合关系只是将一些对象聚集在一起,但他们的关联是相对较弱的,也就是说,局部对象是可以脱离整体对象而单独存在的,如:

聚合的实例

这里大雁聚集在一起形成了雁群,但是离开了雁群的大雁依然可以存在。

 

2.4 组合关系

组合关系的表达

组合使用一个实线+实心菱形箭头,从整体指向局部即表示一个组合,组合又叫合成,顾名思义是有局部合起来才成为了一个整体,他们是密不可分的,他们是强关联关系,局部脱离了整体就不存在了,如:

组合的实例

这里翅膀是组成鸟的局部,翅膀不能脱离一个整体(鸟)而单独存活(超市里单独卖的鸡翅膀可不是这里的概念哦)。

 

2.5 关联关系

关联关系的表达

当一个关系明显是has a的拥有关系,但不是聚合也不是组合那样来描述整体与局部的时候,就应该考虑使用关联关系来描述,事实上,前两者都是(更加准确的)关联关系,关联使用一个实线箭头,从拥有者指向被拥有者。其实,你会发现,所有的关联关系都是实线箭头,只是聚合()用了一个空心菱形,而组合()用了一个实心菱形。这里的关联是可以双向的,关联关系的一个实例,如:

关联的实例

这里你可能会困惑,企鹅与气候为啥是拥有关系,但他们确实有关系,气候的变更影响了企鹅的生存,他们息息相关,所以,每个企鹅都关心一个气候(如果合适我就在这里生活)。你也可以这么理解,他们俩的关系,不能用其他的关系来描述,企鹅不是气候的实例,企鹅不能使用一个气候(依赖),反之亦然。

 

2.6 依赖关系

依赖关系的表达

依赖关系不同于关联关系,使用一个虚线箭头,从使用者指向被使用者,这里要注意“使用”的概念,表达了一个物体需要通过另一个物体来完成工作,但他们之间没有包含的关系,如:

依赖的实例

这里的动物,有一个新陈代谢的功能,要工作则必须有空气和水,因此构成了他们之间的依赖关系。特别的,这里的依赖不同于我们上面关联的概念,在企鹅与气候的关系中,企鹅的生存方式依赖于气候的变化,但他们不是依赖关系,因为企鹅不需要气候作为参数进行某项工作,如果企鹅有一个功能是迁徙,需要传入一个气候,此时就是依赖关系了。

 

2.7 总结

        这里通过不同的符号可以表达出不同的关系来,可以按照这种方式来记忆:继承实现三角,二者皆实是实线。关联关系实箭头,依赖关系虚箭头聚合组合菱形,强弱判断实空心。

        最后,附加上一个完整的类图实例,有助于理解各种关系。

类图实例

 

内容概要:本文详尽介绍了UML的基础知识、绘制方法及其在软件开发各阶段的应用。首先阐述了的定义作用,指出用于展示系统中、接口及其关系,描述系统的静态结构,帮助梳理业务概念、指导系统架构设计。接着解释了的构成元素,包括、接口、属性和方法,并详细描述了中的六种关系:关联、依赖、聚合、组合、继承和实现。随后介绍了常用的绘制工具如StarUML、Enterprise Architect等,以及绘制的具体步骤。文章还强调了在需求分析、设计、代码实现和维护扩展阶段的重要作用,如梳理业务流程、指导架构设计、确保代码一致性等。最后讨论了的高级技巧,如抽象和接口的使用、封装、继承和多态的体现,以及绘制的注意事项,并展望了未来的发展趋势。 适合人群:适合具有一定编程基础,特别是从事面向对象软件开发的工程师,以及参软件需求分析、设计、开发和维护的技术人员。 使用场景及目标:①需求分析阶段,帮助梳理业务流程,提取关键信息;②设计阶段,指导系统架构设计,构建高内聚、低耦合的系统结构;③代码实现阶段,确保代码设计的一致性;④维护和扩展阶段,帮助快速理解现有系统结构,降低维护成本,实现系统的功能扩展。 其他说明:本文不仅涵盖了的基础理论,还提供了实际应用案例,帮助读者更好地理解和运用,提升软件开发效率和质量。同时,文章还展望了未来的发展趋势,鼓励开发者关注新技术,提升自己的技能水平。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值