一个模块由两部分组成:接口和实现;
接口:指明模块要做什么,它声明了使用该模块的代码可用的标识符、类型和例程;
实现:指模块是如何完成其接口声明的目标的。
2.1 接口
接口:只需要指明客户调用程序肯能使用的标识符即可,应尽可能地隐匿一些无关的表示细节和算法。
2.2. 实现
实现:一个实现导出一个接口,它定义了必要的变量和函数以提供接口所规定的功能。一个实现揭示了表示的细节和接口给出的特定行为的算法。
2.3 抽象数据类型
抽象数据类型(abstract data type,ADT):是定义了一个数据类型以及该类型值提供的各种操作的接口。
隐匿指针:
2.4 客户调用程序的责任
接口是实现与客户调用程序之间的一种契约。实现必须提供接口声明的功能,而客户调用程序必须按照接口中描述的那些显式或隐士的规则来使用这些功能。程序设计语言提供了一些隐式的规则来管理接口中的声明的类型,函数以及变量。
对于那些C语言中没有说明或不在C编译器检查范围的规则,就必须在接口中语予以说明。接口通常说明的是:不可检查的运行期错误(unchecked runtime error)、可检查的运行期错误(checked runtime error)以及异常(exception).
摘自:《C语言接口与实现—创建可重用软件的技术》 David R. Hanson 著 傅蓉 周鹏 张昆琪 权威 译