OOP若干原则

DinS          Written on 2017/11/13

OOP中有三组关键性的概念:
变                          不变
分                          合
开                          闭

从这三组概念可以引申出三个原则:
面向接口编程、单一责任原则、开闭原则

世界是复杂多变的,OOP就是为了应对变化而产生的设计思路。
为了应对变化,要做到的就是找到变化的部分和不变的部分,然后把二者分离开。
如何去分析变化与不变呢?第一步就是去找到对象。
为什么找到对象就发现了变与不变?因为世界是由对象组成的,通过把问题分解为若干对象,我们就能够发现哪些是变化的哪些是不变的。
怎么去找对象?发挥你的妄想能力!

好吧,更准确地说是抽象能力。这个在后面还会专门谈到。
当你找到对象后,第二步就是确定对象的接口。
对象只能够通过接口与外界互动,因此确定对象的接口就确定了对象之间的连接方式,就为整个系统结构打下了基础,这就是面向接口编程的意义。如果能够把接口分离出来,就表明你对事物的认知已经到达一定程度了。

但是只找到接口是不够的,还存在一个准确不准确的问题。
一个对象在各个抽象方面都可以有若干接口,我们争取做到的是专一化,只强调某一方面的接口,保持唯一性,这样的话对象之间就不会混杂在一起。
这就是单一责任原则的意义。如果能够落实,就表明认识已经到达相当深度了。

以上我们做的所有工作都是在分:把一个复杂问题拆成若干对象,把对象的接口拆到单一化。
现在已经有了一桌子的零件了,接下来的任务就是合:把零散的部件组装起来成为一个有机整体。设计模式主要就是处理这个阶段的任务的。
当然不能够仅仅依靠设计模式,还需要发挥程序员的想象力和创造力,这部分是OOP最有意思的地方。
拆的好,装的好,分合就达到了。

最终我们得到的这个系统,要尽量满足开闭原则。
开就是应对变化,闭就是尽量不修改原来的代码。
这大概是程序追求的最高境界了。

所以说OOP是一种程序设计的艺术,它需要的是分析能力和创造能力。
在这个意义上讲,OOP程序员更像是艺术家。

当然抽象的说这些原则恐怕实际效果也不好,接下来还是看看稍微具体一些的、实用的系统分析吧,见《OO建模》。