8.1软件应变-随需而变,适者生存
1.实现数据抽象,将接口与实现分离开来
2. 抽象接口描述了一个类最本质的行为特征
另一方面,具体实现随时可能变动,隐藏它们可以保证这种变动不会涉及客户代码
3.过度设计会带来不必要的复杂和效率损失
4.软件之变,体现在适应变化的能力
5.许多编程思想包括OOP的思想都是以提高应变力为主题的,抽象与封装便是典型代表,抽象一个对象模型即是将一类对象最本质
而最不易变化的部分提炼出来,而封装,准确地说是信息隐藏,则是将非本质,容易变化的部分隐藏起来,从而将一个类化分为阴阳两面。
由于变化的部分发生在阴面,对外屏蔽的。因而修改该面毫无畏惧客户之忧,因此提高软件的抗变能力,有些人误认为信息隐藏是出于软件安全
,实乃似是而非之见。
6.软件的变化大致分两种:一种是出于内在需求而作的结构性变化,一种是出于外在需求而作的功能性变化通常以满足客户需求为目的,理想的
抽象和封装应能避免第一类变化对于客户代码的影响,也能大限度降低第二种变化的副作用。
7.信息隐藏虽然能将抽象接口和具体实现分离,但任然封装在同一个类中, bridage则让二者彻底解耦
8。应变力强不等于代码不改变,能保证代码永远不改变的软件有更好的归宿-退化为硬件,进化为人件。
9.抽象的模块因稳定而少需修改,因普适而便与扩展,从而更容易复核开闭原则,诚然,100%不修改源代码过于理想化,但越是基础的代码,越是
核心的代码应该遵循。大家平时使用的类库,框架就是最好的例子。如果库提供的服务不能满足需求,客户一般通过接口,多态,继承,合成等技巧
扩展相应类,如果框架提供的服务不能满足要求,客户一般通过各种扩展点嵌入新模块。无论哪种情况需要修改代码的客户代码,而不是提供服务的
基础代码