天天看點

《C語言接口與實作:建立可重用軟體的技術》一2.6 擴充閱讀

本節書摘來自異步社群《c語言接口與實作:建立可重用軟體的技術》一書中的第2章,第2.6節,作者 傅道坤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

自20世紀50年代以來,過程和函數庫的重要性已經是公認的。[parnas 1972]一文是一篇典型的論文,讨論了如何将程式劃分為子產品。該論文的曆史已經将近40年,但當今的程式員仍然面臨着該文所考慮的問題。

c程式員每天都使用接口:c庫是15個接口的集合。标準輸入輸出接口,即stdio.h,定義了一個adt file,以及對file指針的操作。[plauger,1992]一書較長的描述了這15個接口及适當的實作,其叙述方式大體上類似于本書讨論一組接口和實作的方式。

modula-3是一種相對較新的語言,從語言層面支援接口與實作相分離,本書中使用的基于接口的術語即源自該語言[nelson,1991]。未檢查和已檢查的運作時錯誤的概念,和adt的t表示法,都是借鑒modula-3。[harbison,1992]是介紹modula-3的一本教科書。[horning等人,1993]一書描述了其modula-3系統中的核心接口。本書中一些接口改編自該書中的接口。[roberts,1995]一書使用了基于接口的設計,作為講授計算機科學入門課程的編排方式。

斷言的重要性是公認的,在一些語言如modula-3和eiffel [meyer,1992]中,斷言機制是内建在語言中的。[maguire,1993]一書用一整章的篇幅讨論c程式中斷言的使用。

熟悉面向對象程式設計的程式員可能認為,本書中大部分adt都可以用面向對象程式設計語言中的對象實作(可能實作得更好),如c++ [ellis and stroustrup,1990]和modula-3。[budd,1991]一書是面向對象程式設計方法學的入門介紹,還包括一些面向對象程式設計語言如c++的内容。本書中說明的接口設計原理同樣适用于面向對象語言。例如,用c++語言重寫本書中的adt,對從c語言切換到c++的程式員來說是一個很有用的練習過程。

stl(c++标準模闆庫,standard template library)提供了與本書所述類似的adt。stl充分利用了c++模闆來針對具體類型執行個體化adt(參見 [musser and saini,1996])。例如,stl為vector類型提供了一個模闆,可針對int、string等類型分别執行個體化出對應的vector類型。stl還提供一套函數,來處理由模闆生成的類型。

繼續閱讀