浅谈是否用继承来利用

82 篇文章 0 订阅
24 篇文章 1 订阅

实现开闭原则的过程:

1抽象

2里氏代换,Coad法则

3聚合/合成

4依赖倒置

5迪米特,隔离进行封闭。

我们下面只讨论开闭原则的”开”的分析过程:

1首先要抽象

2然后用子类去替换基类,判断是否符合里氏代换原则。

这里如果子类扩展基类后,不添加任何属性和方法,它就一定符合里氏代换。

3如果符合里氏代换,再判断是否符合Coad法则。

Coad法则有四条

A是否按照严格分类,不继承工具类

B 不置换基类中太多方法

C 不会出现一个类的子类变成另一个类的子类的情况。

D 符合”is - a”(特殊类),而不是”has – a”(角色) -自己非常不确定

下图的继承中是符合里氏代替的。

下面再看是否符合Coad



这里A,B应该是满足的。

但C,D一定不满足,为什么呢?

首先,男学生是男人的子类,但随着他开始工作,他有可能成为男医生,这还好像也没问题,但他以后会可能成为男主任医师或者男院长,也就是说男学生从男人的子类变成了男医生的子类。不满足C。

其次,一个男人一生中有很多个角色,比如:儿子,学生,医生,院长,父亲,爷爷等都是这个男人一生中可能扮演的角色。而不是男人的一个特殊类型。不满足D。

那这个继承全都错了吗?没有!

根据C的要求,如果扩展了男人类,不可能变成女人类。所以男人和女人对人的继承是正确的。而且男人和女人是人的特殊类型。 

3如果前面的步骤中,如果继承中有两个类的继承关系不满足里氏代换。那么可以找出两个类的抽象类,让这两个类继承它。或者用聚合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值