文章目录
什么是类图
在软件工程中,统一建模语言 (UML) 中的类图是一种静态结构图,它通过显示系统的类、其属性、操作(或方法)以及对象之间的关系来描述系统的结构。
类图的用途
- 显示系统中分类器的静态结构(各个类的静态结构)
- 图为UML规定的其他结构图提供了基本符号
- 对开发人员和其他团队成员也有帮助
- 业务分析师可以使用类图从业务角度对系统进行建模
类图的组成
- 一组类的集合
- 类的关系
类
什么是类
对系统中具有相似角色的一组对象的描述,包括:
- 结构特点(属性)定义类的对象属性“知道什么”
- 表示类的对象的状态
- 类的结构特征还是静态特征的描述
如对于人这个类,他的状态有睡着和醒着,描述有姓名、年龄等等,这些都是人这个类的属性。
- 行为特征(操作)定义类的对象“能做什么”
- 定义对象可以交互的方式
- 操作是对类的行为或动态特征的描述
同样是人这个类,他可以学习、可以吃、可以睡。这些就是其方法/操作。
类符号
类符号,由三部分构造,对应着类的组成
- 类名
- 类的名称出现在第一个分区中。
- 类属性
- 属性显示在第二个分区中。
- 属性的可见性在最开头
- 然后是属性的名字
- 冒号后面是属性的数据类型
- 类操作
- 操作显示在第三个分区中。它们是类提供的服务。
- 方法签名的开头也是可见性
- 方法名称显示在可见性之后
- 然后括号里面的是方法的参数
- 方法的返回类型显示在方法签名末尾的冒号之后。
本来想尝试画类图的,但是在选择绘图人家这一步上太纠结了。不过上面这个在以前startUML画的。
类关系
一个类可能与其他类有一个或多个关系。
UML类图中的五种关系的耦合强弱比较:依赖<关联<实现<继承<聚合<组合
依赖(Dependence)
依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。
在java中差不多就相当于你使用了这个类就有依赖关系了,无论是作为方法参数返回值,或者作为属性等等,当然作为属性有着更强耦合,画图应该表现为聚合了。
如果学过spring的话,这部分应该比较好理解,一个bean依赖于另一个bean的依赖和这个是类似的。依赖注入也就是构建类的依赖关系。
在dependence类中创建一个MyArrayList对象
idea查看依赖
类图显示
关联关系(association)
- 关联表示一系列链接。二元关联(具有两端)通常表示为一条线。关联可以链接任意数量的类。具有三个链接的关联称为三元关联。可以命名关联,并且可以使用角色名称、所有权指示器、多重性、可见性和其他属性来装饰关联的末端。
- 有四种不同类型的关联:双向、单向、聚合(包括组合聚合)和自反。双向和单向关联是最常见的关联。
继承/泛化
- 泛化关系其实就是继承关系:指的是一个类(称为子类、子接口)继承(extends)另外的一个类(称为父类、父接口)的功能,并可以增加自己额外的一些功能,继承是类与类或者接口与接口之间最常见的关系;
- 在Java中此类关系通过关键字 extends明确标识。
idea查看继承
我们让其继承一下ArrayList
快捷键Ctrl+h打开继承表
右键点击显示图,可以看见完整的继承关系
实现(realization)
我们在上图中发现一种和依赖的很像的箭头,但是是空心的三角形,那是实现的画法。
- 实现关系:指的是一个class类实现 interface接口(可以实现多个接口)的功能;实现是类与接口之间最常见的关系;
- 在Java中此关系通过关键字implements明确标识。
聚合
- 聚合是“具有”关联关系的变体;
- 聚合比关联更具体。它是一个代表部分整体或部分关系的关联。
- 如图所示,教授“有”一门课要教。作为一种关联类型,聚合可以命名,并具有与关联相同的装饰。
- 但是,聚合可能涉及两个以上的类;它必须是二进制关联。此外,在实现过程中聚合和关联之间几乎没有区别,并且图表可能会完全跳过聚合关系。
当类是其他类的集合或容器,但包含的类对容器没有很强的生命周期依赖性时,可能会发生聚合。销毁容器时,容器的内容仍然存在。
在 UML 中,它以图形方式表示为包含类上的空心菱形,并用一条线将其连接到包含的类。聚合在语义上是一个扩展对象,在许多操作中被视为一个单元,尽管它在物理上是由几个较小的对象组成的。
组成
组合关系的 UML 表示形式将组合显示为将包含类连接到包含类的线的包含类端的填充菱形形状。
组合和聚合之间的差异
组成关系
- 当试图表示现实世界的整体关系时,例如发动机是汽车的一部分。
- 当容器被销毁时,内容物也会被销毁,例如大学及其部门。
聚合关系 - 当表示软件或数据库关系时,例如汽车模型引擎 ENG01 是汽车模型 CM01 的一部分,因为引擎 ENG01 也可能是不同汽车模型的一部分。[9]
2.容器被销毁时,内容物通常不会被销毁,例如教授有学生;当教授离开大学时,学生不会与他们一起离开。
因此,聚合关系通常是“目录”包含,以区别于组合的“物理”包含。
类图详解
idea查看类图
选择类或者包右键点击,选择图标然后选择显示图
左上角可以勾选属性和方法。这样一个类图就出来了。
可见性
符号 | 含义 |
---|---|
+ | 表示公共属性或操作 |
- | 表示私有属性或操作 |
# | 表示受保护的属性或操作 |
~ | 表示包属性或操作 |
存取权 | 公共(+) | 私人(-) | 保护(#) | 包(~) |
---|---|---|---|---|
属于同一类的成员 | 是的 | 是的 | 是的 | 是的 |
派生类的成员 | 是的 | 没有 | 是的 | 是的 |
任何其他类别的成员 | 是的 | 没有 | 没有 | 在同一包装内 |
idea更多类图操作
内部类idea中内部类下图用这个表示
放大镜
idea按下alt可以开启放大镜
刷新数据
如果修改过代码可以在这里刷新
自定义线
如果需要自己画可以选择这个,然后就可以自己进行连线了。
更多
在图中右键类就可以显示更多的操作了