UML六种关系

泛化:(Generalization):

表示继承关系, 表示类/接口对父类/接口的功能扩展.
java语法中的extends, 用来扩展父类或父接口的功能.
图形表示: 带三角箭头的实线, 箭头指向父类或父接口.
UML六种关系_第1张图片

泛化关系.png
代码表示
class Child extends Parent {}
实现(Realization):

表示类实现接口定义的行为或功能.
java语法中的implements.
图形表示:带三角箭头的虚线, 箭头指向接口.
UML六种关系_第2张图片

实现关系.png
代码表示
class Plane implements Flyable{
public void fly() {}
}
依赖(Dependency):

表示使用关系, A需要B的协助来完成工作形成的关系, 但是这种使用关系具有临时性的特点. 比如, 厨师在烹饪的时候看了一眼菜谱, 厨师"使用"了菜谱, 照着它炒完菜后,这种使用关系就结束了(临时性).

java的语法中, 被依赖的对象/类, 以方法参数, 局部变量和静态方法调用的形式出现.

图形表示: 因为依赖和被依赖关系比较弱, 所以使用虚线+箭头表示. 箭头指向被依赖者.而且一般是单向关系.
UML六种关系_第3张图片

依赖关系.png
代码表示

class Chef {
public void check(Recipe r) {
r.showProcedure();
}
}
关联(Association):

关联关系,表示"拥有", 相比依赖关系的临时性和单向性, 关联关系具有长期性, 平等性(可双向),所以关联表示的关系比依赖更强. 比如现实生活中的夫妻, 师生等关系. 长期存在并且是相互的关系. 此外关联可以表示一对一,一对多, 多对一, 多对多等各种关系.

java语法中, 被拥有者作为拥有者的成员变量存在.

图形表示: 因为比依赖关系更强, 所以是实线+箭头.双向关联可以省略箭头

在这里插入图片描述

关联关系.PNG
代码表示:

class Husband {
private Wife wife;
private Address address;
}
class Wife {
private Husband husband;
}
后面两种关系 “聚合” 和 “组合”, 都属于关联关系, 用来表示关联关系中整体与部分的关系, 虽然各有特点, 但既然都属于关联关系, 它们在语法上是没有区别的, 都是用成员变量表达.
聚合(Aggregation):

表示"has-a"关系, 整体与部分的关系, 这种关系相对于组合弱一些, 整体与部分是可分离的. 比如, 部门与员工, 部门有许多员工, 员工离职了, 部门仍然存在,并不会受到影响, 部门解散了,员工可以去其他部门(整体与部分可分离)
图形表示: 空心菱形+实线+箭头, 箭头指向部分, 菱形指向整体.

UML六种关系_第4张图片

聚合关系.png
组合(Composition):

表示"contains-a"的关系. 是一种组装的关系. 并且整体与部分是不可分离的. 比起聚合限制更强了. 这种关系中,整体与部分的生命周期是一致的, 这个限制是非常这严苛的, 以至于在现实中很难找到符合的示例.
但是在程序中,反而很好实现, 因为我们可以完全掌控对象的生命周期. 所以这种关系并不是对现实世界中某类关系的抽象, 而是具体的, 战术性的逻辑工具, 设计者使用它来表达类之间的这种强限制.
例如, 在现实中, 人体和器官(整体和部分)的生命周期并不一致. 但设计的系统中并不支持器官移植之类的功能, 所以器官单独出现在系统中就没有意义, 使用组合可以明确表达这种目的.
这也是组合唯一的目的,表示给整体与部分的关系加一层限制,而不是直接对问题域中的关系建模. 操作上可以先识别聚合(整体与部分)关系. 然后判断如果部分在整体的概念之外没有存在的意义, 就可以确定为组合.
而在具体实现上, 可以将部分完全作为整体的内部状态, 比如私有的内部类. 这种强限制关系使用比较少.

图形表示: 实心菱形+ 实线+ 箭头, 菱形指向整体, 箭头指向部分

UML六种关系_第5张图片

组合关系.png

作者:耿耿不寐如有隐忧
链接:https://www.jianshu.com/p/f35fab1640c6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(git,https,github)