OOP中的六种关系理解

OOP(面向对象编程),有UML六种关系,分别是:泛化、实现、依赖、关联、聚合、组合,这六种关系紧密程度依次增强。

(1)泛化

   概念:他是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描述的基础之上的,并对其进行扩展,在程序中是通过继承来实现的,比如够是对动物的具体描述,在面向对象设计中一般设为够是动物的子类。

表示方法:空心三角形箭头的实线,子类指向父类。

image

(2)实现

    概念:实现是一种类与接口的关系,表示类是接口的所有特征和行为的实现,在程序中一般是通过类实现接口来描述。

  表示方法:空心三角形箭头的虚线,实现类指向接口

image

(3)依赖

   概念:是一种使用的关系,即一个类实现需要另一个类的协助,所以尽量不适用双向的相互依赖,在程序中一般表现为类A中的方法需要B类的实例作为参数或者变量,而A类本身并不需要引用类B的实例作为其成员变量。简单的理解,依赖就是一个类A使用了另一个类B,而这种关系是具有偶然性的,临时性的,非常弱的,但是类B会影响到类A.比如某人要过河,需要借助一条船,此时人与船之间的关系就是依赖。

表示方法:虚线箭头,类A指向类B

image

(4)关联

    概念:表示类与类之间的联接,它使一个类知道另一个类的属性和方法,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时的,一般是长期性的,而且双方的关系是平等的,关联可以是单向的、双向的。在程序中被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

image

(5)聚合

  概念:聚合是关联关系中的一个特例,是强的关联关系。聚合是整体和个体之间的关系,即是has-a的关系,整体与个体可以具有各自的生命周期,部分可以属于多个整体对象,也可以是多个整体对象共享。比如计算机与CPU、公司与员工的关系等。程序中聚合和关联关系是一致的,只能从语义级别来区分;【在大话设计模式中书中说到:聚合是一种表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,比如雁群和大雁的关系就是满足这种聚合关系】

表示方法:尾部为空心菱形的实现箭头(也可以是没有箭头的),类A指向类B。

image

(6)组合

   概念:组合也是关联关系中的一个特烈,组合是一种整体与部分的关系  ,即就是Contains-a的关系,比聚合关系更强。部分与整体的生命周期是一致的,整体的生命周期结束意味着部分的生命的周期结束,组合关系是不能共享的。【在大话设计模式中说过,组合关系是一种强的拥有的关系,体现了严格的整体与部分的关系,比如一个例子,鸟和他的翅膀就是这种组合关系】

 表示方法:尾部是实心的菱形的箭头(也可以没有箭头),类A指向B类。这个箭头上可以加一些基数的。

image

这个博客对这些关系理解的很好:https://blog.csdn.net/wq6ylg08/article/details/81092056

猜你喜欢

转载自blog.csdn.net/miracle22222/article/details/86554779