在开发过程中,其实总是可以听到“抽象”这个词。我想说说抽象是什么意思。其实人类处理的所有信息都是抽象的,在这个层面上的抽象指的就是提取事务的共性。抽象是一个动作,抽象的结果往往就会产生一个概念。而一个概念往往有其内涵和外延。这些是哲学方面的一些内容。在人们的日常工作以及生活中,往往还有许多约定俗成的概念,这些概念构成一个人日常生活的精神环境,如果这些概念发生变化,那么其中的人往往会感觉很难受。因此人们往往不愿接受改变,其实也就是因为这个原因。
软件开发领域中的抽象其实随处可见,但是人们往往听过的就是抽象类。抽象类是java语言中的一个概念,由于java语言十分的流行,所以大多数写过程序的人,往往都听说过这个概念。所以一说“抽象”这个词,很多人就会立刻想到抽象类上面去。但其实不然。
在我看来,软件开发中的抽象指的是:用某种技术手段来区分和确立程序中不变的部分和可变的部分。因为程序以及软件都是解决问题的,有所不同的是,程序可能解决的是一个小问题,而软件往往解决都都是复杂一些的大问题。所以软件中抽象就很重要。
为什么需要区分程序中不变和可变的部分?我觉得主要有以下几个原因:
- 事有轻重缓急;重要的主要的事情可以先固定下来,次要的事情可以作为可变的部分留到后面解决。
- 人的技术水平也有差异;困难的事情可以作为不变的部分固定下来,由水平高的程序员负责,简单的事情可以作为能够变化的部分分离出来,由水平差一些的程序员负责。
- 代码复用;复用程度高的代码,往往可以作为不变的部分固定下来,复用程度低得代码,可以作为变化的部分隔离出来。
在我看来,通过设计其实往往很难一次就得到一个非常好的抽象,因为你需要同时非常了解业务和编程技术,同时精通这两者的人不多。所以好的抽象一般都需要通过不断的重构来获得。因此软件开发不是一个一锤子买卖,一个好的软件往往需要持续不断的投入,才能越来越好。
综上,我认为,软件开发中所谓的抽象,其实就是分离主次。主要的东西需要固定不变,次要的东西缺往往需要变化多端。那么分离变化与不变,就是在做分离主次的工作。所谓主次分明,井井有条。这样的系统才容易扩展和维护。