深入理解UML类图:掌握类与关系的设计奥秘
目录
引言
在现代软件开发和系统建模中,类是面向对象编程的核心概念之一。通过对类及其属性和操作的建模,开发者能够创建出功能强大且易于维护的系统架构。UML(统一建模语言)作为广泛使用的建模工具,为开发者提供了直观的方式来表示类及其之间的各种关系。本文将深入探讨类的定义、UML类图的表示方式,以及类与类之间的关系,包括关联、聚合、组合、泛化和实现等,帮助读者更好地理解和运用这些关键概念,从而在系统设计中实现高效的结构化开发。
一、什么是类?
类表示系统中的一种实体,主要是由名称、属性和操作组成。 在UML中,类表达成一个有三个分隔区的矩形。其中顶端显示类名,中间显示类的属性,尾端显示类的操作。
1、类必须各自有不同的类名称
正体书写:可以实例化的普通类
斜体书写:抽象类(Person)
下划线:静态类(Person)
2、两种表示方法:
简单名:Person
路径名:java::awt::Rectangle
3、类的命名规范:
一般以大写字母开头,大小写混合,每个单词首字母大写,避免使用特殊符号。
类主要是由名称、属性和操作组成。
4、UML可见性
目前UML中可描述3种可见性分别为:
1.公有;
2.保护;
3.私有 。
5、属性(attribute)
6、操作(operation)
二、类图中的关系
在类图中,很少有类是独立为系统发挥作用的,大部分的类以某些方式彼此协作进行工作。在进行系统建模时,不仅要抽象出形成系统词汇的事物,还必须对这些事物之间的关系进行建模。类图中涉及到了UML中最常用的四种关系,即关联关系 、泛化关系、依赖关系、实现关系。
1、关联关系
关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。
如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
关联关系有单向关联和双向关联。如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。
1.1双向关联
如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。
1.2单向关联
如果类与类之间的关联是单向的,则称为导航关联。导航关联采用实线箭头连接两个类,只有在箭头所指的方向上才有这种关联关系。
2、关联关系
在一个简单的二元关联中,两个类的地位同等。但在实际建模中,有时往往需要对“整体/部分”的关系进行描述。聚合和组合是两种特殊的关联关系。
关联名:
关联可以有一个名称,但不是必需的。放在关联路径的旁边,但远离关联端。
角色:
当一个类处于关联的某一端时,该类就在这个关系中扮演了一个特定的角色。 角色名放在靠近关联端的部分,可使用+、#、-表示角色的可见性。
多重性:
有时在建模时需要说明一个关联的实例中有多少个相互连接的对象。而这个“多少”就被称为关联角色的多重性 。放在靠近关联端的部分。
常用的多重性: 1 0..1(0或1) 1..*(1或更多) *(0或更多)
导航性:
对于二元关联,当对一个关联端(目标端)设置了导航性,意味着可以从另一端(源端)指定类型的一个值得到目标端的一个或一组值(取决于关联端的多重性)。
如果类与类之间的关联是单向的,则称为导航关联。导航关联采用实线箭头连接两个类,只有在箭头所指的方向上才有这种关联关系。
限定符和约束:
限定符:是二元关联上的属性组成的列表的插槽,其中的属性值用来从整个对象集合里选择一个唯一的关联对象或者关联对象的集合。
约束:关联间的约束关系。
2.1聚合关系(弱关联关系)(Aggregation)
描述“整体-部分”的关联关系 聚合关系没有改变整体与部分之间整个关联的导航含义,也与整体和部分的生命周期无关。即部分可以独立于整体存在。 在UML中,聚合关系用带空心菱形的直线表示。
2.2组合关系(强关联关系)(Composition)
描述“整体-部分”的关联关系 部分和整体有相同的生命周期。 即组合关系中的部分要完全依赖于整体。 在UML中,组合关系用带实心菱形的直线表示。
3、泛化关系(继承,Generalization)
泛化(generalization)是一般事物(父)和较特殊事物(子)之间的关系。在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间。
泛化关系描述了一种“is-a-kind-of” (是…的一种)的关系。
依赖关系通常描述一个对象在运行期间会用到另一个对象的关系,通常体现在某个类的方法使用另一个类作为参数。
4、实现关系(Realization)
实现关系体现了接口和类之间的关系。继承抽象类和实现接口均属于实现关系。
一个类可以实现多个接口,一个接口也可以被多个类实现。
带三角箭头的虚线,箭头指向接口。
4.1实现关系的两种表示法
当接口元素以带构造型的类的方式表示时,用虚线三角形箭头表示。
当接口元素以小圆圈方式表示时,用实线表示。
5、类图中的关系
各种关系的强弱顺序 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
5.1关联和依赖
关联用于描述类与类之间的连接。可以理解为将一个类的对象作为另一个类的成员变量 ,其实就是一个类中的对象与对象之间的引用关系。可以理解为在代码层面便是相互声明,体现为类的实例变量。
依赖关系通常描述一个对象在运行期间会用到另一个对象的关系,通常体现在某个类的方法使用另一个类作为参数。对于两个元素X和Y,如果元素X的变化会引起对另一个元素Y的变化,则称元素Y依赖于X。
6、关系回顾
关联
类与类之间的连接 实体类之间的语义关系
聚合/组合
- 特殊关联关系,描述“整体-部分”
- 聚合:部分可脱离整体独立存在
- 组合:部分与整体相同生命周期
泛化:继承,“是…一种”
实现:类与接口间的关系
依赖:类A方法的参数是B类
(如何区分依赖与关联)某个类以成员变量的形式出现在另一个类中,二者是关联关系;
某个类以局部变量的形式出现在另一个类中,二者是依赖关系。
三、类图实际应用场景
- 软件架构设计:用于定义系统模块的职责划分和交互关系,确保架构合理。
- 文档编写与维护:通过类图为项目提供清晰的技术文档,便于维护和二次开发。
- 代码审查与优化:在代码审查中,类图帮助识别耦合度过高、职责不清的类,从而推动代码优化。
- 教育与培训:类图在面向对象编程的教学中被广泛使用,帮助学生理解类、继承、接口等概念。
总结
通过对类和类图中各类关系的深入探讨,可以看出类在面向对象编程中的重要性。UML类图为开发者提供了一个强大的工具来可视化系统的结构,帮助更好地理解类之间的交互方式。关联、聚合、组合、泛化和实现关系等为系统设计提供了灵活性和可扩展性,使得开发者能够通过合理的设计模式和结构来提升代码的复用性、模块化和维护性。理解和运用这些概念不仅有助于系统架构的构建,还能够提升开发效率和项目的整体质量。在实际应用中,通过合理的类设计和关系管理,可以实现系统的高内聚和低耦合,从而确保系统的稳定性和可扩展性。
原文地址:https://blog.csdn.net/yoona333/article/details/142935724
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!