为啥要学 UML 和 类关系?
了解和熟悉 Java 类之间可能存在的关系,有助于更好的理解类如何组织,如何进行业务模型编排。
学习 UML 有助于使用这种工具来辅助工作,特别是遇到复杂系统设计与构建时候,尤其必要。
一、UML Unified Modeling Language:统一建模语言
用来设计软件蓝图的可视化建模语言。
描述了一个系统的静态结构和动态行为。
它支持面向对象系统的分析、设计、实现和 交付等各个环节,可以用于系统的理解、设计、浏览 、维护和信息控制。
包含如下项
事物是对模型中最具有代表性的成分的抽象;关系把事物结合到了一起;图聚集了相关的事物。
事务: 结构 行为 分组 注释
构成模型图的一些基本图示符号,它们表示一些面向对象的基本概念
关系: 依赖 关联-聚合组合 泛化 实现
表示基本图示符号之间的关系
图: 用例 交互 类 活动 状态
特定的视角对系统所作的抽象描述
扩展机制: Stereotype Tagged Value Constraint
工具: 用例 逻辑 组件 部署
用途
用例 - 领域OOA业务 - 交互OOD动态 - 设计类图
草图 - 蓝图 - 编程语言
图形 - 过程 - 工具
UP
SDP software development process - 软件开发过程
USD Unified Softawre Develpment - 统一软件开发
RUP Rational Unified Process - 统一软件开发
构架 - 用例驱动 - 迭代&增量 -> 不同于瀑布模型
XP Extreme Programing 测试/重构/持续集成
二、从下面这张图里,找找总共有多少种关系
三、Java 类 8 种关系介绍 – Class Diagram
- Association 关联
解析:两个类以任何形式互相连接,称互相有联系 (实线连接) 备注:从某种角度说,世间万物都是关联的,但在设计系统的设定边界内,定义恰当的关联关系,有助于对系统的理解和规划。
案例:Bank 和 Account 存在 Register 的关联关系
代码体现:成员变量 - Directed Association / Dependency 定向关联
解析:类之间的关联是双向的,可以用箭头表示包含关系
案例:Bank 里面有 Account,称为 B 依赖于 A
代码体现:局部变量、方法参数、静态方法调用
- Reflexive Association 反身关联
解析:当一个类有许多不同类型的职责时,就会形成反身关联。
案例:公司的员工可以是执行官、助理经理或首席执行官。但是,这里的关系是不能用同一个符号的。 - Multiplicity 1~n / n~1 关联关系 解析:一对多、多对一关联关系,注意它和组合 / 聚合是有区别的
案例:Bank 注册了 很多 Account,一般用*标注多的一方
- Aggregation 聚合
解析:一群大雁聚合成雁群,放到一起
代码体现:成员变量
- Composition 组合
解析:翅膀 + 腿 + 其它 组合成鸟
备注:组合 和 聚合 以及 1对多关联比较难区分,日常开发种可以多留心
代码体现:成员变量
- Generalization / Inheritance 泛化 / 继承
解析:父子关系,一般是为了元素可重用
- Realization 实现
解析:定义一组共功能、合约,其它类来进行实现,一般说的就是接口的实现啦
推荐使用的软件 StartUML、Rose 等
- UML
参考:
文档信息
- 本文作者:jiushun.cheng
- 本文链接:https://minipa.github.io/2016/05/31/uml-relationship/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)