is-a has-a like-a比较

1.定义

1.1 is-a

  1. is-a,顾名思义,是一个,表明继承关系。
  2. 若是A is-a B,那么B就是A的父类。
  3. 一个类彻底包含另外一个类的全部属性及行为
  4. 举例:
    • PC机是计算机,工做站也是计算机,PC机和工做站是两种不一样类型的计算机,但都继承了计算机的共同特性。所以在用Java语言实现时,应该将PC机和工做站定义成两种类,均继承计算机类。

1.2 has-a

  1. has-a,顾名思义,有一个,表明从属关系
  2. 若是A has a B,那么B就是A的组成部分
  3. 同一种类的对象,经过它们的属性的不一样值来区别
  4. 举例:
    • 一台PC机的操做系统是Windows,另外一台PC机的操做系统是Linux。操做系统是PC机的一个成员变量,根据这一成员变量的不一样值,能够区分不一样的PC机对象

1.3 like-a

  1. like-a,顾名思义,像一个,表明组合关系。
  2. 若是A like a B,那么B就是A的接口。
  3. 新类型有老类型的接口,但还包含其余函数,因此不能说它们彻底相同。
  4. 举例:
    • 一台手机能够说是一个微型计算机,可是手机的通信功能显然不是计算机具有的行为,因此手机继承了计算机的特性,同时须要实现通信功能,而通信功能须要做为单独接口,而不是计算机的行为

2. 区别

  1. 若是你肯定两件对象之间是is-a的关系,那么此时你应该使用继承
    • 好比菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承。
  2. 若是你肯定两件对象之间是has-a的关系,那么此时你应该使用聚合
    • 好比电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类。
  3. 若是你肯定两件对象之间是like-a的关系,那么此时你应该使用组合
    • 好比空调继承于制冷机,但它同时有加热功能,那么你应该把让空调继承制冷机类,并实现加热接口。
相关文章
相关标签/搜索