UML之类图
类图(class diagram)
类图(class diagram)是一种静态模型。它可以帮助开发者👨💻利用面向对象思维进行软件建模。
类图中的每个类都由一个框表示。每个盒子🗃️分为三个部分。
🥇顶部是类名,对应 Java 中的类名,如果是抽象类则用斜体表示。
🥈中间部分是属性部分,对应 Java 中的成员变量,用于抽象出事物的属性。主要由作用域、变量名和变量类型组成。
🥉底部是操作部分,对应 Java 中的成员方法,用于抽象出事物的行为。主要由作用域、操作名称、参数列表和返回类型组成。如果是抽象方法则用斜体表示;如果是静态方法则用下划线表示。
类 | 抽象类 | 接口 |
---|---|---|
✨作用域表示如下:
符号 | 作用域 | 描述 |
---|---|---|
- | private |
当前类 |
~ | default 或者 package |
当前类、同一包下 |
# | protected |
当前类、同一包下、子类 |
+ | public |
当前类、同一包下、子类、其他包下 |
类图中的关系
面向对象设计中的分解与 UML
中的关系对应。其中类间的关系分为 6 种。分别是依赖、关联、泛化(继承)、实现(接口)、聚合和组合。
关系 | 图像 | 备注 |
---|---|---|
依赖 | 箭头指向被依赖的部分 | |
关联 | 单向关联的箭头指向被关联的部分 | |
泛化 | 空心三角形指向父类 | |
实现 | 空心三角形指向接口 | |
聚合 | 菱形指向整体 | |
组合 | 菱形指向整体 |
1️⃣依赖(dependency):依赖是一种 use-a 的关系。依赖表示一个类为其他类提供它的服务。
例如,一架客机需要依赖跑道起飞。
2️⃣关联(association):一种简单的关联关系,并不存在依赖关系。在类中,关联是一种拥有关系。关联关系意味着两个对象之间存在松散的关系。这些对象可能会在一段时间内相互交互。
例如,一个类的对象可以使用另一个类的对象提供的服务/方法。 这就像人与航空公司之间的关系。一个人通常不拥有航空公司,但可以与一家航空公司互动。航空公司还可以与许多人对象进行交互。
3️⃣泛化(inheritance):泛化表示子类拥有父类的所有属性和方法。在绘制类图时,不需要在子类写出父类已有的属性或方法。
例如,猫对象和狗对象都拥有动物对象的年龄属性和吃饭行为。
4️⃣实现(implementation):实现和泛化一样,但是实现接口使用虚线加空心三角形表示。
5️⃣聚合(aggregation):聚合是一种弱 has-a 的关系,部分可以属于整体,但它们也可以独立存在。聚合关系是一种弱关系,一种生命周期不同步的关系。
例如,这就像客机与其机组人员之间的关系。客机的一个重要部分是它的机组人员。没有机组人员,客机将无法飞行。但是,如果机上没有机组人员,客机也不会不存在。机组人员也是如此,他们是客机运营的一部分,但如果机组人员不在客机上,他们也不会消失或被摧毁。
6️⃣组合(composition):组成是对部分的排他性包含,也称为强 has-a 关系。这意味着整体不能没有它的部分而存在。如果失去了它的任何部分,整体就不复存在了。如果整体被摧毁,那么它的所有部分也被摧毁。通常只能通过其整体访问部分。包含的部分是整体独有的。组合关系是一种强关系,一种生命周期同步的关系。
例如,大脑是人类组成的一部分,人没有大脑会死,大脑没有人也不能存在。
✨多重性:
基数 | 描述 |
---|---|
0 .. 1 | 表示 0 到 1 个 |
n | 表示任意个 |
0 .. * | 表示 0 到任意多个 |
1 .. * | 表示 1 到任意多个 |
m .. n | 表示任意多个到任意多个 |
示例类图 1:
示例类图 2:
关系间的区别
🔖依赖和关联的区别:
👉依赖关系 是一种 短期的 、 临时性的 、 弱的 关系,一般来说是 单向的 ,常出现在方法参数和局部变量中。例如,一架客机需要依赖跑道起飞。每架客机并不需要配有专门的跑道,它只有在需要起飞时才需要依赖到跑道。转换成代码思维就是:客机类不需要有跑道类类型的成员变量,只需要在起飞行为时,传入指定的跑道类类型参数即可。
👉关联关系 是一种 长期的 、 表示拥有的 、 强的 关系,可以是 单向或者双向的 ,常出现在成员变量和全局变量中,它意味着两个对象可能在一段时间内会进行交互。例如,人与航空公司之间的关系,人可以与多个航空公司互动,航空公司也可以跟多个人互动。转换成代码思维就是:用户类中可以用成员变量保存自己注册过的航空公司类对象,航空公司类也可以用成员变量保存注册过会员的用户信息。
🔖关联、聚合和组合的区别:
👉关联关系 是一种 平等的 、 较弱的 关系,是 个体与个体 的。例如,人与航空公司之间的关系是平等的。
👉聚合关系 是一种 不平等的 、 较强的 关系,是 整体与部分 的,并且 生命周期不同步 ,部分可以离开整体存在。例如,显示器是台式电脑的一部分,但是显示器除了作为电脑屏幕还可以作为监控屏幕,离开了电脑依旧能存在,生命周期是不同步的。
👉组合关系 是一种 不平等的 、 最强的 关系,是 整体与部分 的,并且 生命周期同步 ,部分无法离开整体存在。例如,眼睛是人的一部分,但是人死了眼睛也就自然死了,生命周期是同步的。
📌最后:希望本文能够给您提供帮助,文章中有不懂或不正确的地方,请在下方评论区💬留言!
🔗参考文献: