浅谈是否用继承来利用
来源:互联网 发布:mac解压软件知乎 编辑:程序博客网 时间:2024/06/06 00:16
实现开闭原则的过程:
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如果前面的步骤中,如果继承中有两个类的继承关系不满足里氏代换。那么可以找出两个类的抽象类,让这两个类继承它。或者用聚合。
- 浅谈是否用继承来利用
- 浅谈利用多态,继承和接口来封装代码,提高Java代码的可扩展性
- 继承的拓展(利用组合来实现复用)
- Style标签利用parent来继承属性
- 1.用AJAX(使用dwr)来判断用户名是否可用,利用json返回值
- 浅谈WebView利用localStore websql和IndexDB 来存储数据
- 浅谈继承
- 浅谈继承
- JavaScript重构(六):利用继承来做事
- JavaScript重构(六):利用继承来做事
- 利用xp_cmdshell来ping某台PC是否连通
- 利用ActionFilterAttribute来判断用户是否登陆等等
- 利用AJAX来检测用户名是否已经被注册
- 如何利用tcpdump来确定外部设备是否连接到服务器?
- 利用Cookie保存用户登录信息,利用Filter来判断用户是否登录
- 浅谈用delphi来编写蠕虫病毒
- 浅谈用delphi来编写蠕虫病毒
- 用继承来描述自己的信息
- PHP引用的用法
- 分析网络连通问题要分清协议层次
- 我的链接
- 从Win Api 到 MFC
- oracle11g 空表无法exp的解决
- 浅谈是否用继承来利用
- Make beautiful maps
- inno setup 自动检测jre
- 判断一个树是不是二叉查询树 (ISBST)
- Oracle 字符集的查看和修改
- Oracle中TO_DATE格式
- IFL嵌入式小组技术博客入口导航
- 【艺术盛会】中国文化艺术发展促进会主办世界级艺术盛会—2012(伦敦)奥林匹克美术大会在京启动
- Oracle索引使用规则(一)