问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

UML类图详解:泛化、实现、关联、聚合、组合和依赖

创作时间:
作者:
@小白创作中心

UML类图详解:泛化、实现、关联、聚合、组合和依赖

引用
CSDN
1.
https://blog.csdn.net/wangdingqiaoit/article/details/12119293

UML类图是软件工程中用于描述系统静态结构的重要工具,通过图形化的方式展示了类之间的各种关系。本文将详细介绍UML类图中的泛化、实现、关联、聚合、组合和依赖等关系,并通过具体的例子帮助读者理解这些概念。

UML学习之:类图

1.关于UML

回顾20世纪晚期--准确地说是1997年,OMG组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。

UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML提出了一套IT专业人员期待多年的统一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划--就像建筑工人多年来所使用的建筑设计图一样。

2.UML类图

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency),其中聚合和组合是关联的一种。下面逐一学习。

2.1 泛化(Generalization)

表示"is-a"的关系,是一种继承关系,表示一般与特殊的关系.它指定了子类如何特化父类的所有特征和行为,是对象之间耦合度最大的一种关系。

继承使用: 空心三角形+实线表示

eg1:狮子和猫都是动物的一种。如图1所示:

图1 :动物类的继承关系

eg2:经理、秘书、程序员都是员工的一种,同时销售经理又是经理的一种特殊情况。如图2所示:


图2: 职员类的继承关系

2.2 实现(Realization)

是一种类与接口的关系,表示类是接口所有特征和行为的实现.

实现接口用空心三角形+虚线表示。

eg:鸭子和天鹅都实现了飞翔的接口.如图3所示:

图3 :接口的继承

2.3 关联(Association)

关联是两个类间的联接。在 UML 2 中,有五种关联,包括接下来要介绍的双向/单向关联,聚合和组合(它们是特殊的关联)以及关联类。

2.3.1 双向关联(Bi-directional (standard) association)

默认情况下,关联是双向的。一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。多重值的含义如下表1所示:

表示方式 多重性说明

1..1 表示另一个类的一个对象只与该类的一个对象有关系

0..* 表示另一个类的一个对象与该类的零个或多个对象有关系

1..* 表示另一个类的一个对象与该类的一个或多个对象有关系

0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系

m..n 表示另一个类的一个对象与该类最少m,最多n个对象有关系(m≤n)

表1 :关联关系中多重值的说明

2.3.2 单向关联(Uni-directional association)

在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。

一个单向的关联的UML表示法:指向已知类的开放箭头的实线。

eg:教师和学生之间是双向关联,一位教师可以教多个学生,同时一名学生可以有多个老师教授。而老师与课程之间则是单向关联,老师可以教多门课程,而课程无需知道这个关系的存在。如图4所示:


图4 :单向与双向关联关系

注意,还有一种特殊的应该算是双向关联的特例的,自生关联或者叫反射关联(Reflexive associations)。类也可以使用反射关联与它本身相关联,当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。

eg :员工类的实例经理管理多名员工,同时员工被一个经理管理。如图5所示:


图5:自身关联

2.3.3 聚合(Aggregation)

聚合表示"has-a"的关系,是一种特别类型的关联,用于描述整体与局部的关系。

聚合较强于一般关联,但是它是一种不稳定的包含关系,部分类的生命周期可以独立于整体类的生命周期。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。

UML表示法:空心菱形 + 实线 + 箭头。

eg:公司和员工的聚合关系,如图6所示:

图6 :公司与员工的聚合关系

2.3.4组合(Composition)

组合表示"contains-a"的关系,也是描述是整体与部分的关系。但它是一种强烈的包含关系,组合类负责被组合类的生命周期,子类实例的生命周期依赖于父类实例的生命周期,表现为部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了。

UML表示法:实心菱形 + 实线 + 箭头。

eg:公司与部门的组合关系,如图7所示:

图7:公司与部门的组合关系

2.3.5 关联类(Association class)

关联类是一个拥有关联和类特性的模型元素。关联类既是类也是关联,它有着关联和类的特性,可以看作是一个拥有关联特性的类。通过关联类可以向关联添加属性或者操作。

eg : 公司与员工之间是通过工作关系来关联到一起的,如图8所示:


图8:公司与员工之间的工作类

关联类理解起来稍嫌麻烦,可以参考关于关联类的讨论摘抄或者:英文教程。

2.4 依赖(Dependency)

依赖表示"uses-a"的关系,是一种使用的关系,即一个类的实现需要另一个类的协助或者说需要另一个类的服务。依赖具体表现为局部变量、方法的参数或者对静态方法的调用。注意,不使用双向的互相依赖。

eg1 :比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作,如图9所示:

图9:人要依赖螺丝刀工具

eg2:人生活需要依赖氧气和水,如图10所示:


图10: 人类依赖氧气和水

3.类间关系的比较

3.1聚合和组合的区别

这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是"has-a"关系,组合关系是"contains-a"关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

3.2各种关系耦合度的比较

类间的几种关系的耦合度强弱比较为:

实现 > 组合 > 聚合 > 关联 > 依赖 。

下面给出包含这几中关系的一个实例,该实例改编自《大话设计模式》,如图11所示:

4.参考资料

1)类间的关系 : http://www.cnblogs.com/floodpeak/archive/2008/02/27/1083533.html

2)UML类图几种关系的总结 http://kb.cnblogs.com/page/129490/

3)关于关联类的讨论摘抄 http://blog.csdn.net/go_lunch/article/details/87685

4)UML类图中的关联类 http://yunli.blog.51cto.com/831344/183413

5)UML 基础: 类图 http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/

6)深入浅出UML类图(二)http://blog.csdn.net/lovelion/article/details/7842898

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号