日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

Reply To: 抽象是什么?

Home Forums 《冒号课堂》讨论区 抽象是什么? Reply To: 抽象是什么?

#1155
hui
Keymaster

>>1、 如果说先有了“接口规范”,并且“数据抽象”是在定义出类的对外接口(API)就完成了,那么实际上在定义完“接口规范”的时候,就已经完成了“数据抽象”

2、 更接近实际的情况时,并没有“接口规范”,但是需要实现一个类,或者已经实现了一个类;在优化代码的过程中,通过“数据抽象”,提炼出类的对外行为规范,设计出接口(API),并将内部实现封装起来; 整个过程,称为“数据抽象”。

没错,你提到的第一点是比较理想的过程,第二点是比较实际的过程。但值得指出的是,后者是一个从已有的实现中重新设计的过程,即refactoring。需要refactoring意味着原来设计不尽合理,其原因主要有两种:一是程序员对数据抽象的认识不够或重视不够,在没有设计好API之前就匆匆写实现代码;二是该类的上层类/客户类因自身设计原因或外部需求变化原因发生改变,从而导致类的接口改变。

在类的hierarchy设计中,类似的情况也时有发生。有时是先有超类,后有子类;有时是从一些类中提炼出超类。这不奇怪,没有人能从一开始就设计出一个完美的系统,因此会交替在高层抽象(接口、超类)和低层抽象(实现、子类)之间往返(top-down/bottom-up)。

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)