0%

UML中的组成、聚合等关系

个人认为 UML 中的组成(composition)以及聚合(aggregation)的关系十分混乱,比如网上的一些版本。human 和 head 是一个 composition 关系因为 human 不能脱离 head 而独立存在。但是如果不严格来讲,其实 human 是可以脱离 head 存在的,并且现实的业务中并没有如此严格的设定,表示某一样事物不能离开某物存活。

另外认为 car 和 engine 是一个 aggregation 的关系,因为 car 即使脱离了 engine 也能独立存在。但是又不严格的来讲,car 其实脱离了 engine 就无法行驶了,这到底是否还算 car 存在?由于脱离 engine,car 的最主要的功能消失了,这还能算脱离 engine 依旧可以存在吗?

那么现在的问题就是能否独立存在(head 之于 human,engine 之于 car)的概念该如何定义?这是一个很模糊的概念。human 脱离 head 之后,虽然 human 无法存活,但是 human 作为一件实体,它还是会继续存在在这个世界上。难道以是否能存活来区分吗?那么如果下次改为鸡呢?大家知道有只鸡即使已经脱离了头部,它也依旧存活了数月。那么这个概念到底该如何定义呢?我觉可以暂时使用以下的方式:

  • 物体拥有多个功能性组件定义为 aggregation
    • 如果物体只有一个功能性组件定义为 composition。如 PolicyManager 的功能是管理 Policy
    • 如果物体拥有多个功能性组件但是拥有主要(关键)功能,那么将主要功能组件(可多个组件)定义为 composition,其他为 aggregation。如 car 的主要功能是行驶,那么 engine 和 car 肯定是 composition 的关系,而车载音响不过是 aggregation 的关系。
  • 物体的属性定义为 composition。Tree 拥有 Node 属性