面向对象软件开发的一个基本方法就是抽象,到底什么是抽象呢?
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。
例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
要抽象,就必须进行比较,没有比较就无法找到共同的部分。
共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。
因此抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。
所以抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了。
所谓的共同特征,是相对的,是指从某一个刻面看是共同的。
比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。
所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
在软件开发过程中,识别稳定的需求、识别核心的需求、识别概念性的需求、设计系统的架构、定义系统中构件之间的接口关系等等都是抽象的过程,都是反应系统的本质特征的过程。
抽象的,才是稳定的,才是永恒的。 抽象的反义词是具体。人员往往会说:“你讲的太抽象了,能不能讲的具体一点?”
在开发语言中,有抽象类,有具体类,具体类可以继承自抽象类,可以实例化。抽象类可以派生出众多的不同的具体类。
所谓:“一生二,二生三,三生万物”。系统的稳定体现在抽象类,系统的变化体现在具体类。抽象类的层次要高于具体类。
系统因抽象而稳定,因抽象而生动。