UML类图
推荐工具:https://www.processon.com/i/5683d44fe4b04beb5ea69870
推荐书籍: 《大话设计模式》(可自学,也可当作教材书使用)
一、类图的表示
类的 UML 表示是一个长方形,垂直地分为三个区,如下图所示:
- 顶部区域显示类的名字。
- 中间的区域列出类的属性。
- 底部的区域列出类的操作。
在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)
类名:如果是抽象类,采用斜体(抽象方法同理)。
类属性列表:可见性 + 属性名 + : + 属性类型 + (等号 + 默认值)
类方法列表:可见性 + 函数名 + (参数列表) + : + 返回值类型
补充:属性的可见性看下面表格;属性的类型看属性而定,可以是int
,可以是boolean
;static
修饰的属性带下划线;有的属性可能会有默认值,在类型之后加等号和默认值。
标志 | 可见度类型 |
---|---|
+ | public |
- | private |
# | protected |
~ | package |
接口:在类名上多了一个<<interfac>>
字符来表示这个类为接口
二、类与类之间的关系
通过UML类图可以将类之间的所有关系(泛化、实现、关联、聚合、组合、依赖)都能具体的体现出来。
1、继承的表示
为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的单键头(或三角形)的实线指向超类。
2、接口的表示
一个类和一个接口不同:一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。用虚线带三角形的箭头从实现类指向接口
3、关联的表示
关联又分单向关联和双向关联
(1)单向关联
单向关联是用一个实线带一个开放的箭头,表示一端知道箭头指向的另一端。
PS:上图中Student
中包含Home
,而Home
中不需要包含Student
。
(2)双向关联
在两个类之间用实线连接,表示两个类彼此都知道它们之间的联系。
4、聚合的表示
聚合关系是一种特殊的关联关系,聚合关系强调的是整体和部分的关系,其中部分可以脱离整体而存在。用一个带空心的菱形的实线表示,菱形指向的是整体的类。
比如:雁群和一只大雁的关系,就是聚合关系,大雁离开雁群还是可以独立存在的。
聚合与单向关联的区别在于:
单项的关联可能只是一个简单的“包含、引用”关系,关联和被关联类之间在逻辑概念上不一定有紧密的联系,而聚合则不同,它表示的是一种内在关系紧密,相互依存,相互包含的概念,其中的一部分是构成另外一部分的不可或缺的成分。
5、组合的表示
组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。
用一个带实心的菱形的实线表示,菱形指向的是整体的类。
组合跟聚合有很大的不同:
聚合的部分的生命周期独立于整体,整体结束那不影响部分。而组合是部分的生命周期依赖与整体,整体结束,部分没有必要存在。就想公司和部分,公司都不存在了,那部门就没有存在的必要了,解散了算。
同样用Student
为例:
其中的Hand
类是Student
的一部分,而且是依赖Student
的生命周期。
6、依赖的表示
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
依赖关系通常通过三种方式来实现:
- 将一个类的对象作为另一个类中方法的参数
- 在一个类的方法中将另一个类的对象作为其对象的局部变量
- 在一个类的方法中调用另一个类的静态方法
关联关系、聚合、组合之间的区别:
关联关系跟突出的是has,只是has的关系,可以通过这一层关系调用到另一个对象中的某个方法。
聚合、组合更突出“整体-部分”的关系,不单单是“拥有”,部分类是构成整体类的一部分。
对于聚合、组合,区别就在于部分类的生命周期如何,如果部分类还可以独立存在,那属于聚合关系;如果部分类不能独立存在,那属于组合的关系。
强度顺序:
组合>聚合>关联>依赖。
如有错误或者内容不全的地方,希望各位点出,这篇是我匆匆忙忙写下来的,可以说参考了各大平台的帖子(老愚公了)
如果后面还学到,我再对应补充,暂时就先这样吧
参考文章:https://www.jianshu.com/p/2828874af134(文章里面每个都详细介绍了例子,可以去看看)