- 论坛徽章:
- 2
|
三月廿七 发表于 2012-02-10 20:55 ![]()
显然不符合我心中的 ADT的定义, 明显就不是ADT
#ifndef LIBXL_HANDLE_H
#define LIBXL_HANDLE_H
typedef struct tagBookHandle * BookHandle;
typedef struct tagSheetHandle * SheetHandle;
typedef struct tagFormatHandle * FormatHandle;
typedef struct tagFontHandle * FontHandle;
#endif
这种格式才符我心中的 ADT的定义
天下代码,无奇不有。并不是存在即合理
linux、windows、gnome都不一定是权威
从gnome 看 windows, windows就是一坨屎
那就不管ADT的定义纠结如何,以及这些东西是不是ADT,以及这些代码是否权威,Windows是不是屎。
只关注最终问题:glib或者linux这样的公开结构定义的设计是否合理?
我觉得合理。因为我知道什么叫ADT(按我的定义)。
所以即使我知道_GArray结构的具体信息,通常我也当作不知道,而是用garray_xxx函数去操作。
除非我看到文档里说了该结构里面某个域的意图就是公开使用的;或者到了很特殊的情况,我能承担让自己的一部分代码与glib共同演化的代价。
而linux的list与rbtree,如果结构体定义不可见,这数据结构就废了。
这又是上面说的思考 vs 规则的一个体现,ADT是:
1. 知道为什么要分离接口与实现,即使没有强制性规则也会这么做,以及触犯后的代价。
2. 还是那套强制性——private、隐藏定义、void*、intptr_t——规则
|
|