为什么要引入OO的原则:
软件开发是一个有矛盾需求的工作,比如:
1. 希望尽早发现错误。最好是在编译期就把所有的错误找出来。
2. 希望开发的东西灵活,具有通用性。因此,就有了多态。
很显然,1,2是矛盾的。要运行时的灵活,那么问题的出现就要推迟到运行时,在编译期是发现不了的。为了平衡这些矛盾,就有人提出来了一些面向对象设计要考虑的原则。
Open-Close.
不要修改已有代码,可以增加新功能。
生活中关于open-close的例子: 具体问题具体分析。“具体问题”就是一个抽象的术语。不需要修改这句话,就可以用来作为处理任何具体问题的开头,如房价过高的问题。。。。
完全符合open-close原则的代码是不存在的。即不通过修改已有代码,只新加代码就可以新增功能是做不到的。
实现思路:抽象是关键。因此引入了后面的一些原则,liskov substituation, dependency inverstion, single responsibitly, interface segregation
Liskov Substituation:
指出了合理继承的判断标准。所以我们代码里面有类似 if (typeof(base) == typeof (derivied)), if (dynamic_cast<derived*> (pBase) != NULL).... 就不符合liskov Substituation
Dependency inversion:
指出如何使用接口来达到open-close的原则
Single Responsibitly:
指出了接口的粒度。一个接口只能有一个引起变化的因素。
interface segregation:
指出接口的分类原则。引起两个接口变化的因素应该是来自不同维度的。