目录
1, 啥是 UML 类图?
2,UML 类图有啥用?
3, 正式理解 UML 类图
4, 使用 idea 画第一个 UML 类图
5, 类之间的关系图[必须牢记]
6, 类之间的关系
6.1, 依赖
6.2, 泛化
6.3, 实现
6.4, 关联
6.5, 聚合
6.6, 组合
7, 简单总结类之间的六种关系
前言
关于 UML 类图的这篇文章, 我觉得把它放在设计模式专栏的篇首最为合适, 因为在学习设计模式的时候, 经常会遇到有关 UML 类图, 没有去专门学过的童鞋肯定会感觉很复杂. 学到后面, 发现不掌握 UML 类图, 对设计模式或者某一个框架没有整体的把控. 所以学好 UML 类图, 你将会更加有自信!
如果你对类之间的依赖, 聚合, 关联, 组合等关系还很抵制的话, 那么这篇文章就很有必要看了, 随着对设计模式的慢慢深入了解, 或许你也会发现, UML 类图就显得格外重要了, 是的, UML 类图主要是用来描述类之间的轮廓图, 而类之间的常见关系就是泛化 (Generalization), 实现(Realization), 依赖(Dependence), 关联(Association), 聚合(Aggregation), 组合(Composition) 等. 类之间关系的强弱: 依赖 < 关联 < 聚合 < 组合 < 泛化(继承)
@
1, 啥是 UML 类图?
首先来看一个专业一点的定义[来自维基百科]
UML 即统一建模语言(Unified Modeling Language), 它是一种开放的方法, 用于说明, 可视化, 构建和编写一个正在开发的, 面向对象的, 软件密集系统的制品的开放方法. UML 展现了一系列最佳工程实践, 这些最佳实践在对大规模, 复杂系统进行建模方面, 特别是在软件架构层次已经被验证有效.
不得不说, 越专业的描述越让人看得越发懵逼...
其实吧, 简单的说就是 UML 它也是一种语言, 只不过这种语言比较特殊, UML 图有很多种, 其中最为重要的就是 UML 类图了, 所以我们的重心就是 UML 类图. uml 类图是一种静态的结构图, 描述了系统的类的集合, 类的属性和类之间的关系, 可以简化了人们对系统的理解.
2,UML 类图有啥用?
这么说吧, 2019 年 11 月 27 号, 程序员宜春给程序员老王打电话, 两哥们聊着聊着就聊起了设计模式, 宜春说了一大堆关于工厂模式的应用场景举例, 有场景有实例, 可谓声情并茂. 然而老王却是听的一脸懵逼: 你寻思啥啊, 说了一大堆 * 话, 别哔哔了, 直接给我画上 UML 类图就得了, 一天天的就会装 b, 我忍你很久了...
是的, 通过上面的这段对话, 我相信各位也应该能身临其境的体会到 UML 类图的核心作用了, 那我就不再多哔哔了...
3, 正式理解 UML 类图
绝大多数的类图分为三个部分. 部分类图有五个部分. 我们这里主要讲绝大多数的类图.
UML 类图的构建有很多种工具或者插件, 可以用 PowerDesign 来构建 UML 图, 当然像我这么优 (懒) 秀(癌)的人肯定是用 idea 自带的功能自动生成, 同时 eclipse 也是支持的!
4, 使用 idea 画第一个 UML 类图
首先去 Setting 中设置一下 UML 类图的显示设置, 上一节也说过, 绝大部分类图都是前三部分, 因此勾选前三个勾就 OK 了, 操作如下:
下面宜春就以身试水用 idea 来展示一段简单的 UML 图:
首先编写一段简单的 Weixin 类代码:
- class WeiXin{
- public int a; // 公有的 public 属性 ====1
- private int b; // 私有的 private 属性 ====2
- public String WXInfo(){ // 成员方法 ====3
- }
- }
然后把刚编写的 Weixin 类进行如下操作:
这也忒简单了吧, 小白们都笑出声来了. 当然也可以在 idea 中安装一些 UML 图插件, 这里就不再阐述了.
5, 类之间的关系图[必须牢记]
UML 类图主要是用来描述类之间的轮廓图, 而类之间的常见关系就是泛化, 实现, 依赖, 关联, 聚合, 组合等. 表示关系的强弱: 依赖 < 关联 < 聚合 < 组合 < 泛化(继承)
在讲解类之间的关系之前, 我们很有必要来了解关系线条图, 这个特别重要简直就是 UML 类图的灵魂[必须牢记] :
6, 类之间的关系
有了上面关系线条图的概念后, 我们正式开始来学习类之间的关系!
6.1, 依赖
依赖关系是类与类之间最弱的关系, B 调用 A 的方法或者属性, A 变化会影响 B, 反之不成立. 依赖差不多就是使用的意思, B 使用了 A 的方法或属性这个时候我们就称为 B 依赖 A. 说简单点就是一个类使用了另一个类, 这种关系具有临时性特征, 一个类的改变由于另一类而受影响.
- class A{
- public void methodA(){ }
- }
- class B{
- public A a;
- public void methodB(){
- a.methodA();
- }
- }
上面代码: B 依赖 A
依赖小结:
1, 依赖就是类中使用到了对方
2, 使用可以包括: 使用其成员属性, 作为返回类型, 作为参数类型, 方法中使用到
6.2, 泛化
泛化就是继承, 注意一点就是泛化也是依赖关系的一种特例
6.3, 实现
实现就是接口的实现, 太简单了, 小白都笑了....
6.4, 关联
关联关系是一种比较强的关系, 同样也是依赖关系的特例, 关联具有导航型: 单向关联, 双向关联
怎么理解呢, 比如有两个类, 一个 Person 类, 一个身份证 IDcard 类
单向关联
- class IDcard{
- }
- class Person{
- private IDcard card;
- }
双向关联
- class IDcard{
- private Person person;
- }
- class Person{
- private IDcard card;
- }
6.5, 聚合
聚合关系是一种特殊的关联关系, 聚合关系强调的是整体和部分的关系, 其中部分可以脱离整体而存在. 比如电视机和遥控器.
- class TV{
- }
- class Telecontrol{ // 遥控器类
- private TV tv;
- }
6.6, 组合
组合关系也是一种特殊的关联关系, 它与聚合关系很像, 组合关系强调的也是整体和部分的关系, 其中部分不可以脱离整体而存在. 有种同生共死的意思! 比如: 高尚的说就是宜春可以没有头发但是不能没有脑袋, 可怜一点的说就是宜春可以没有手和脚但是不能没有脑袋! 头发, 手, 脚这些并不是必须要有的, 组合强调的是不可分离而可以存在! 如果你在大街上看到宜春没有头发, 不是很正常嘛? 没有手没有脚也能接受理解. 那你在大街上看到宜春没有脑袋, 这....(这例子举的我自己都服了)
- class Hair{ // 头发
- }
- class Head{ // 脑袋
- }
- class YiChun{ // 宜春
- Head head = new Head(); //Head 与宜春同生共死
- private Hair hair;
- }
7, 简单总结类之间的六种关系
1, 依赖就是类中使用到了对方. 使用: 使用其成员属性, 作为返回类型, 作为参数类型, 方法中使用到
2, 泛化就是继承, 泛化也是依赖关系的一种特例
3, 实现就是接口的实现, 太简单了, 小白都笑了....
4, 关联是一种比较强的关系, 是依赖关系的特例, 关联具有导航型: 单向关联, 双向关联
5, 聚合是一种特殊的关联关系, 聚合强调整体和部分的关系, 可有可无!
6, 组合是一种特殊的关联关系, 与聚合关系很像, 同生共死!
类之间关系的强弱: 依赖 < 关联 < 聚合 < 组合 < 泛化(继承)
如果本文对你有一点点帮助, 那么请点个赞呗, 谢谢~
最后, 若有不足或者不正之处, 欢迎指正批评, 感激不尽! 如果有疑问欢迎留言, 绝对第一时间回复!
欢迎各位关注我的公众号, 一起探讨技术, 向往技术, 追求技术, 说好了来了就是盆友喔...
来源: https://www.cnblogs.com/yichunguo/p/11946754.html