中的接口和實現分別指的是什么?
一個模塊有兩部分組成:接口和實現。
接口指明模塊要做什么,它聲明了使用該模塊的代碼可用的標識符、類型和例程,實現指明模塊是如何完成其接口聲明的目標的,一個給定的模塊通常只有一個接口,但是可能會有許多種實現能夠提供接口所指定的功能。
每個實現可能使用不同的算法和數據結構,但是它們都必須符合接口所給出的使用說明。
客戶調用程序是使用某個模塊的一段代碼,客戶調用程序導入接口,而實現導出接口。
由于多個客戶調用程序是共享接口和實現的,因此使用實現的目標代碼避免了不必要的代碼重復,同時也有助于避免錯誤,因為接口和實現只需一次編寫和調試就可多次使用 實現 一個實現導出一個接口,它定義了必要的變量和函數以提供接口所規定的功能,在C語言中,一個實現是由一個或多個.c文件提供的,一個實現必須提供其導出的接口所指定的功能。
實現應包含接口的.h文件,以保證它的定義和接口的聲明時一致的。 Arith_min和Arith_max返回其整型參數中的最小值和最大值:
int Arith_max(int x, int y) { return x > y ? x : y; } int Arith_min(int x, int y) { return x > y ? y : x; } Arith_div返回y除以x得到的商,Arith_mod返回相應的余數。
當x與y同號的時候,Arith_div(x,y)等價于x/y,Arith_mod(x,y)等價于x%
y 當x與y的符號不同的時候,C的內嵌操作的返回值就取決于具體的實現:
eg.如果-13/5=2,-13%5=-3,如果-13/5=-3,-13%5=2 標準庫函數總是向零取整,因此div(-13,2)=-2,Arith_div和Arith_mod的語義同樣定義好了:它們總是趨近數軸的左側取整,因此Arith_div(-13,5)=-3,Arith_div(x,y)是不超過實數z的最大整數,其中z滿足z*y=x。 Arith_mod(x,y)被定義為x-y*Arith_div(x,y)。
因此Arith_mod(-13,5)=-13-5*(-3)=2 函數Arith_ceiling和Arith_floor遵循類似的約定,Arith_ceiling(x,y)返回不小于實數商x/y的最小整數 Arith_floor(x,y)返回不超過實數商x/y的最大整數 完整實現代碼如下:
arith.c 抽象數據類型 抽象數據類型(abstract data type,ADT)是一個定義了數據類型以及基于該類型值提供的各種操作的接口 一個高級類型是抽象的,因為接口隱藏了它的表示細節,以免客戶調用程序依賴這些細節。下面是一個抽象數據類型(ADT)的規范化例子--堆棧,它定義了該類型以及五種操作:
stack.h 實現 包含相關頭文件:
#include