类之间的关系
关联(Association)
可以分为以下三种:
注意:关联还要以分为单向关联和双向关联
依赖(Dependency)
或者类A负责实例化类B,那么可以说类A依赖类B。和关联关系不同,无须在类A中定义类B类型的属性。
聚集(Aggregation)
聚集关系还可以分为两种类型:
泛化(Generalization)
实现(Realization)
以下是GOF设计模式中的描述:
图一:
此实线箭头表示, 继承, 从一个非接口类的继承.
图二:
那条连线表示双向关联:
看左边, Flight扮演assignedFights角色, 有0到1个Plane跟他关联(一个航班要么取消了没有飞机,要么只能对应一架飞机)
看右边, Plane扮演着assignedPlane角色, 有0到多个Flight跟他关联(一个飞机可以参与多个航班, 也可以停在仓库里面烂掉)
图三:
那条连线表示单向关联:
基本的意义跟上面的是一样的, 唯一不同的是, 右边的类对左边的类是一无所知的.
图四:
那个大的包围的框叫软件包, 名字为Account, 就一些可以归类的类包装起来.
图五:
水平的连线还是表示上面所说的关联, 但从关联连线中引伸出来的虚线, 这意味当Flight类的一个实例关联到 FrequentFlyer 类的一个实例时,将会产生 MileageCredit 类的一个实例.
图七:
带菱形的箭头表示基本聚合, 由上图知道, Wheel类扮演wheels角色, 聚合4个到Car对象里面去,
空心的菱形表示Wheel对象并不随Car的创建而创建,销毁而销毁.
图八:
意义和上面类似, 唯一不同的是, 实心菱形表示Department对象随Company对象的创建而创建,销毁而销毁.
图九:
表示反射关联, 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。