打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
面向对象的准则
userphoto

2008.04.16

关注
1 开闭原则(OCPThe Open-Closed Principle

开闭原则是说,所有软件模块都应该可以扩展,但不可以修改。遵循这个原则的关键在于抽象化。我们在写一
个模块时,不论是一个类,还是一个构件,都应该认真思考它的真正功能,它对其它模块的依赖性,输入和输
出,等等。分离出它的可变部分(例如,用接口或外部配置等),对不变部分进行封装。这些不变部分就是这
个模块的本质。这里需要说明的是,在对不变部分进行封装时,我们如何定义不变的部分。在数学中,当我们
谈到不变量时,总是要指明它是在什么变化下的不变量。否则是没有意义的,因为在一种变化下的不变量很有
可能在另一种变化下就不是不变量了。所以,当我们定义不变的部分时,首先要明确它的变化范围。但是,在
软件开发中,很难事先准确的知道这些变化,很多时候是凭经验或行业知识来判断的。所以,这个原则多多少
少带有主观性,更像一个总纲而不像一个硬性的法律条文。
Martin Fowler的书 Analysis Patterns讲解了一些实
际经验,有兴趣的读者可以参考。下面这些原则是讲如何安排依赖性使得模块具有良好的封闭性,可重用性和
可维护性。



 2. 依赖反向原则(DIPDependency Inversion Principle

依赖反向原则是说,要依赖于抽象,而不要依赖于具体。这也就是我们所说的:要针对接口编程,而不要针对
实现编程。之所以是倒置,是因为通常在开始依照需求编程时,我们几乎总是依赖于具体的实现。但是,这些
具体的实现都不易适应变化,所以要抽象出一些不变的,本质的功能,把可变的留到具体的实现中去。这种抽
象的过程是前面过程的反向,例如,当我们需要写出结果时,开始时可能会写到文件里,后来可能会写到网络
流里,等等。抽象的结果是写这个功能。针对接口编程是一个不可能过分强调的原则。接口就像高楼大厦中层
与层之间,户与户之间的防火墙;大船巨舰中的隔离舱。软件的更新有时就像水火一样难以预料和不可避免
(所以我们叫它软件而不是硬件),而接口会适当地屏蔽软件更新所带来的改动扩散(连锁传播)。通常,类
的依赖性由这个原则和组合
/继承原则主导,而不是由继承主导。

3 接口分离原则(ISPInterface Segregation Principle

接口分离原则是说,不相关的功能应在不同的接口里。不然,在需要一个功能时也不得不同时也依赖于另一个
没必要的功能。例如,在早期的 EJB 中,数据库调用和远程调用混在一起,在不需要远程调用时恰好是最糟糕
的组合。这个原则说的是,接口的依赖性宽度越窄越好。下面的原则说的是接口的依赖性深度越浅越好。

4 迪米特法则(Law of Demeter

Demeter 法则是说尽量不要有传递性,链型的依赖关系。不要和陌生人交谈,只和亲属和朋友交谈。在一个类
中,可以调用类里的其它方法,可以调用类属性的方法,可以调用方法中传递变量的方法,可以调用在方法中
声明的变量的方法。但不应该调用属性的属性的方法。


5 组合/继承原则(CRPComposite Reuse Principle

组合/继承原则是说,优先使用组合而不是继承。当我们用低级对象来构造高级对象时,应该用组合。一个系
统的框架也应该是由组合和接口构成的。下面的原则说明,继承仅仅是帮助实现,而不是帮助构造新的对象
的。

 

7 李斯可夫代换原则(Liskov Substitution Principle

Liskov代换原则是说,任何父类可以出现的地方,子类也可以出现。子类在改变父类属性状态时要遵守父类的
行为(即不能有更强的先决条件,只能有更弱的先决条件)。这就意味着无法用继承来构造行为差异很大的对
象。

可以参考以下资料:
http://www.objectmentor.com

http://c2.com/cgi/wiki?LawOfDemeter

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
软件设计中的原则(GRASP) - SealedLove - 博客园
软件架构设计的六大原则
S.O.L.I.D 面向对象设计和编程(OOD&OOP)笔记 | Laravel China 社区
面向对象设计原则总结
[原创]敏捷设计之面向对象设计原则 (入选推荐日志,加20币) - 航行日志——理论与实践...
Python七大原则,24种设计模式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服