[oop]IS-A,IS-LIKE-A,HAS-A的区别

IS-A

代表类与类之间的继承关系

在知识表示、面向对象程序设计与面向对象设计的领域里,is-a英语,包含架构)指的是类的父子继承关系,例如类D是另一个类B的子类(类B是类D的父类)。
换句话说,通常"D****is a****B"(BD包含在内,或是D被包含在B内)指的是,概念体D物是概念体B物的特殊化,而概念体B物是概念体D物的一般化。举例来说,水果是苹果、橘子、芒果与其他水果的一般化。

“is a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用 Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类

HAS-A

代表的是对象和它的成员的从属关系

同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。

IS-LIKE-A

代表类与类之间的组合关系

假设A like a B,那么B就是A的接口。
新类型有老类型的接口,但还包括其它函数,所以不能说它们全然同样。
比如一台手机能够说是一个微型计算机,可是手机的通讯功能显然不是计算机具备的行为,所以手机继承了计算机的特性,同一时候须要实现通讯功能。而通讯功能须要作为单独接口。而不是计算机的行为。

应用

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

你可能感兴趣的:([oop]IS-A,IS-LIKE-A,HAS-A的区别)