面向对象设计的基本原则
2010-07-24
之前喜欢读书,看到精彩也喜欢做笔记,每读完一本书也都会做总结,但总感觉记在本上的笔记内容还是不够详尽,尤其对那些需要图示的东西就更不能得心应手,因此决定从今天起开始写个人博客,因此这篇便是开山之作。博客目的:A、记录本人学习心得 B、如有同道也可交流。
面向对象设计基本原则虽简单数语,但每每思来均有会意,不是简单记住几句原则就可说会OOD了。个人理解几条基本原则之间还是有某种关系,因此便设想将他们之间的这种关系逐一细究。
原则一:OCP-开放、封闭原则:面对扩展是开放的,面对修改是封闭的。
只所以会有这条原则,原因在于客户的需求经常会发生变化,因此我们不能假设所有的需求都是一成不变的,而OCP原则正是为了应对这种需求的变更和扩展。而且这条原则是其它所有原则的根本大法。
原则二:SRP-单一职责原则:一个类应该只有一个发生变化的原因。
这条原则是实现OCP的基础。通过该原则可以将变化点进行分离,进而更易于将变化点进行封装和抽象。
原则三:DIP-依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。即要针对接口编程,而不要针对实现编程。
这条原则真正保证了系统的可扩展性,因为都是针对接口编程,只要接口保持不变,具体实现模块就可以很容易被新功能替换掉。
原则四:LSP-里氏替换原则:子类必须能够替换掉它们的父类。
因为子类和父类之间是一种IS-A的关系,因此父类具有的特性子类也一定具有,这样才能够利用多态机制真正实现针对接口编程的统一性。因此子类一定不要覆盖父类的非虚函数行为,因为这有悖于 IS-A的关系。
原则五:优先使用组合而不是继承
由于继承机制破坏了类的封闭性,因此能用组合的地方不要用继承。
今天先简单写这些,后续逐步完善……