UML类图符号 各种关系说明
UML类图用来描述对象和类之间相互关系的方式
-
泛化(Generalization):泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系.
表示方法:用空心箭头的实线表示(A—▷B,A泛化B)
代码中的表现:在Java中,用extends关键字来直接表示这种关系。
-
实现(Realization):空心箭头和虚线表示,关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。
表示方法:使用空心箭头和虚线表示。(——▷)
代码中的表现:在Java中,用implements关键字来表示
-
依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A。
表示方法:用带箭头的虚线表示,(B ----> A)箭头指向被依赖元素。
代码中的表现:比如方法的入参,构造方法的参数等
-
关联(Association):关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法,也就是A类有一个成员变量保存的是B类的一个引用,也就是说由A类可以找到B类(A—>B)
代码中的表现:成员变量的形式
-
聚合关系(aggregation): 聚合关系是关联关系的一种,在代码层面,和关联关系是一致的,只是从语义级别来区分,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
聚合关系是“has-a”关系
表示方法:带空心菱形头的实线(A♢—>B)
属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联
代码中的表现:聚合关系也是通过成员变量来实现的,但是关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
-
组合(Composition):组合关系是关联关系的一种,是比聚合关系还要强的关系,要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
组合关系是“contains-a”关系
表示方法:带实心菱形头的实线(A◆—>B)
体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联
-
综合比较
这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:
组合>聚合>关联>依赖
其中依赖(Dependency)的关系最弱,而关联(Association),聚合(Aggregation),组合(Composition)表示的关系依次增强。换言之关联,聚合,组合都是依赖关系的一种,聚合是表明对象之间的整体与部分关系的关联,而组合是表明整体与部分之间有相同生命周期关系的聚合。
而关联与依赖的关系用一句话概括下来就是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。
类的方法与属性
类可以拥有多个方法和属性
属性的表达方式:可见性 名称:类型 [ = 缺省值 ]
方法的表达方式:可见性 名称(参数列表) [ : 返回类型]
可见性:
- + public
- - private
- # protected
- ~ package