当前位置: 首页 > article >正文

UML 图六种箭头含义详解:泛化、实现、依赖、关联、聚合、组合

目录

一、泛化(Generalization)

概念

表示方法

二、实现(Realization)

概念

表示方法

三、依赖(Dependency)

概念

表示方法

四、关联(Association)

概念

表示方法

五、聚合(Aggregation)

概念

表示方法

六、组合(Composition)

概念

表示方法


在软件开发和面向对象设计领域,UML(统一建模语言)图是极为重要的工具,它能以可视化方式清晰展现系统结构和对象间关系。其中,UML 图中的六种箭头分别代表泛化、实现、依赖、关联、聚合和组合关系,准确理解这些箭头含义,对高效设计和开发软件系统至关重要。

一、泛化(Generalization)

概念

泛化用于描述一般与特殊、一般与具体之间的关系。具体描述基于一般描述构建,并对其进行扩展。在 Java 等面向对象编程语言中,泛化体现为继承关系。例如,“动物” 是一般概念,“狗”“猫” 等则是具体的特殊动物,“狗” 和 “猫” 继承了 “动物” 的基本特征,如呼吸、移动等,同时又有各自特有的行为和属性 。

表示方法

使用实线空心三角箭头表示,箭头从子类(特殊类)指向父类(一般类)。这种表示直观地展示了子类对父类的继承关系,清晰呈现了类的层次结构。

二、实现(Realization)

概念

实现表示类与接口之间的关系,意味着类实现了接口定义的所有特征和行为。在程序开发中,类通过实现接口来明确自身应具备的功能。比如,定义一个 “奔跑” 接口,“运动员” 类实现该接口,就必须提供 “奔跑” 接口所规定的具体实现逻辑。

表示方法

采用空心三角形箭头的虚线,箭头由实现类指向接口。这种表示方式清晰区分了类和接口,同时表明了类对接口的实现关系,方便开发者理解系统的功能实现结构。

三、依赖(Dependency)

概念

依赖是一种使用关系,即一个类的实现需要借助另一个类的协助。在 Java 中,当一个类的方法参数需要传入另一个类的对象时,就表明该类依赖于被传入对象的类。例如,“订单” 类的计算总价方法需要传入 “商品” 类对象获取商品价格,“订单” 类就依赖 “商品” 类。

表示方法

用虚线箭头表示,箭头从依赖类(使用协助的类)指向被依赖类(提供协助的类)。这种表示简洁明了,帮助开发者快速识别类之间的依赖关系,在代码维护和修改时,能准确把握一处改动可能对其他类产生的影响。

四、关联(Association)

概念

关联表示类与类之间的连接,使一个类能知晓另一个类的属性和方法。与依赖关系相比,关联关系更强,不是偶然或临时的,通常是长期存在的。在 Java 中,若一个类的全局变量引用了另一个类,就表示这两个类存在关联关系。例如,“教师” 类和 “课程” 类,一位教师可以教授多门课程,“教师” 类中通过全局变量关联 “课程” 类,用于记录其所教授的课程信息。

表示方法

使用实线箭头,箭头从一个类指向另一个类。这种表示直观展示了类之间的关联方向和关系,有助于理解系统中不同类之间的交互和数据传递路径。

五、聚合(Aggregation)

概念

聚合是关联关系的特殊形式,属于强关联关系,用于表示整体和个体之间的关系,即 “has - a” 关系。整体与个体各自有独立的生命周期,部分可以被多个整体对象共享。以 “学校” 和 “学生” 为例,一个学校包含多个学生,学生可以在不同学校间流动,学生的生命周期并不完全依赖于某一个学校。

表示方法

通过尾部为空心菱形的实线箭头(也可以没有箭头)表示,箭头从整体类指向部分类。这种表示在体现整体与部分关系的同时,强调了部分的独立性和可共享性,方便开发者在设计系统时考虑对象的复用和管理。

六、组合(Composition)

概念

组合同样是关联关系的特例,也是整体与部分的关系,即 “contains - a” 关系,比聚合关系更强。部分与整体的生命周期紧密相连,整体生命周期结束时,部分的生命周期也随之结束,且部分不能被多个整体共享。比如 “人体” 和 “四肢”,四肢是人体的一部分,人体不存在了,四肢也就失去了意义,且一个四肢只能属于一个特定的人体。

表示方法

用尾部为实心菱形的实线箭头(也可无箭头)表示,箭头从整体类指向部分类。这种表示突出了整体与部分之间紧密的包含关系和生命周期的一致性,帮助开发者准确把握对象之间的组成结构和生命周期管理。

掌握 UML 图这六种箭头代表的关系,能帮助开发者更高效地进行软件系统设计、代码编写和维护。无论是分析现有系统结构,还是规划新系统架构,准确运用这些关系都能使设计更合理、代码更易读且可维护性更强。


http://www.kler.cn/a/611439.html

相关文章:

  • LeetCode热题100JS(79/100)第十五天|347|295|121|55|45
  • 初级:反射机制面试题全攻略
  • Vue Router动态改变路由参数的两种方法
  • Rust从入门到精通之进阶篇:18.测试与文档
  • 淘宝评论API接口详解与JSON数据示例
  • Unity Shader编程】之复杂光照
  • Java技术生态前沿:Java 21革新与性能优化全解析
  • leetcode 46 全排列 | 回溯
  • 重学vue3(三):vue3基本语法及使用
  • 【测试开发】OKR 小程序端黑盒测试报告
  • leetcode.189.轮转数组
  • ZBlog泛目录程序插件实现零编程基础实现自动化内容生成
  • 一、MySQL8的my.ini文件
  • 【Python】pillow库学习笔记4-利用ImageDraw和ImageFont在图像上添加文字
  • sqlite3数据库(文件)损坏恢复方法
  • 【论文分析】无人机轨迹规划,Fast-Planner:实时避障+全局最优的路径引导优化算法
  • 护网(蓝中)DNS面试题
  • 【蓝桥杯】真题 路径(数论+dp)
  • MATLAB 编写的函数或算法生成可供 C++ 调用的库或组件
  • 热门面试题第12天|Leetcode 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 (内含热门面试题)