OOP(面向对象编程),有UML六种关系,分别是:泛化、实现、依赖、关联、聚合、组合,这六种关系紧密程度依次增强。
(1)泛化
概念:他是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描述的基础之上的,并对其进行扩展,在程序中是通过继承来实现的,比如够是对动物的具体描述,在面向对象设计中一般设为够是动物的子类。
表示方法:空心三角形箭头的实线,子类指向父类。
(2)实现
概念:实现是一种类与接口的关系,表示类是接口的所有特征和行为的实现,在程序中一般是通过类实现接口来描述。
表示方法:空心三角形箭头的虚线,实现类指向接口
(3)依赖
概念:是一种使用的关系,即一个类实现需要另一个类的协助,所以尽量不适用双向的相互依赖,在程序中一般表现为类A中的方法需要B类的实例作为参数或者变量,而A类本身并不需要引用类B的实例作为其成员变量。简单的理解,依赖就是一个类A使用了另一个类B,而这种关系是具有偶然性的,临时性的,非常弱的,但是类B会影响到类A.比如某人要过河,需要借助一条船,此时人与船之间的关系就是依赖。
表示方法:虚线箭头,类A指向类B
(4)关联
概念:表示类与类之间的联接,它使一个类知道另一个类的属性和方法,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时的,一般是长期性的,而且双方的关系是平等的,关联可以是单向的、双向的。在程序中被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。
(5)聚合
概念:聚合是关联关系中的一个特例,是强的关联关系。聚合是整体和个体之间的关系,即是has-a的关系,整体与个体可以具有各自的生命周期,部分可以属于多个整体对象,也可以是多个整体对象共享。比如计算机与CPU、公司与员工的关系等。程序中聚合和关联关系是一致的,只能从语义级别来区分;【在大话设计模式中书中说到:聚合是一种表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,比如雁群和大雁的关系就是满足这种聚合关系】
表示方法:尾部为空心菱形的实现箭头(也可以是没有箭头的),类A指向类B。
(6)组合
概念:组合也是关联关系中的一个特烈,组合是一种整体与部分的关系 ,即就是Contains-a的关系,比聚合关系更强。部分与整体的生命周期是一致的,整体的生命周期结束意味着部分的生命的周期结束,组合关系是不能共享的。【在大话设计模式中说过,组合关系是一种强的拥有的关系,体现了严格的整体与部分的关系,比如一个例子,鸟和他的翅膀就是这种组合关系】
表示方法:尾部是实心的菱形的箭头(也可以没有箭头),类A指向B类。这个箭头上可以加一些基数的。
这个博客对这些关系理解的很好:https://blog.csdn.net/wq6ylg08/article/details/81092056