資源描述:
《《C++ API設(shè)計(jì)內(nèi)容》【迷你書】.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1.1什么是API11第1章2API簡介31.1什么是API4API(ApplicationProgrammingInterface)提供了對(duì)某個(gè)問題的抽象,以及客戶與解決該問題的軟件組件之間進(jìn)行交互的方式。組件本身通常以軟件類庫形式分發(fā),它們可以在多個(gè)應(yīng)用程序中使用。概括地說,API定義了一些可復(fù)用的模塊,使得各個(gè)模塊化功能塊可以嵌入到最終用戶的應(yīng)用5程序中去。你可以為自己、為你所在機(jī)構(gòu)中的其他工程師或大型開發(fā)社區(qū)編寫API。它可以小到只包含一個(gè)單獨(dú)的函數(shù),也可以大到包含數(shù)以百計(jì)的類、方法、全局函數(shù)、數(shù)據(jù)類型、枚舉類型和常量等。它的實(shí)現(xiàn)可以是私有的,也
2、可以是開源的。有關(guān)API的一個(gè)重要的基本定義是:API是一個(gè)明確定義的接口,6可以為其他軟件提供特定服務(wù)。現(xiàn)代應(yīng)用程序通常都是基于很多API建立起來的,而這些API往往又依賴于其他API。如圖1-1中示例應(yīng)用程序所示,該應(yīng)用程序用到了3個(gè)類庫(1、2、3)的API,而這3個(gè)API中有2個(gè)又用到了另外27個(gè)類庫(4和5)。舉例來說,瀏覽圖片的應(yīng)用程序可能會(huì)用到加載GIF圖片的API,而該API本身則可能又依賴更底層的壓縮或解壓縮數(shù)據(jù)的API。891011圖1-1從層次化API中調(diào)用例程的應(yīng)用程序。每個(gè)方框代表一個(gè)軟件類庫,灰色部分表示其公共接口,對(duì)于類庫而
3、言即是其API,白色部分表示隱藏在API后12面的具體實(shí)現(xiàn)2第1章API簡介API開發(fā)在現(xiàn)代軟件開發(fā)中隨處可見,其目的是為某個(gè)組件的功能提供一個(gè)邏輯接口,同時(shí)隱藏該模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。舉例來說,我們用來讀取GIF圖片的API可能僅僅提供一個(gè)LoadImage()方法,后者接收一個(gè)文件名作為參數(shù),并返回一個(gè)2維的像素?cái)?shù)組。所有文件格式和數(shù)據(jù)壓縮的細(xì)節(jié)全部隱藏在這個(gè)看似簡單的接口之下。這個(gè)概念也在圖1-1中進(jìn)行了說明,即客戶端代碼只能夠通過該API的公有接口訪問。API公有接口如圖1-1中每個(gè)方框頂部的灰色區(qū)域所示。1.1.1契約和承包人我們打個(gè)比方來對(duì)AP
4、I進(jìn)行說明。假設(shè)你要建造自己的家,如果你想完全靠自己建造房子,可能需要全面理解建筑結(jié)構(gòu)、給排水管道、電氣設(shè)計(jì)、木工技術(shù)、石工技術(shù),以及諸多其他知識(shí)。而且還需要親自動(dòng)手完成每一步工作,并且對(duì)每項(xiàng)任務(wù)的各個(gè)細(xì)節(jié)都要把握周到,比如是否有足夠的木材鋪設(shè)地板,是否用對(duì)與螺絲匹配的螺絲帽等。最后,由于該工程只有你一個(gè)人在干,一段時(shí)間只能做一件事,因此完成項(xiàng)目的總體時(shí)間可能會(huì)非常久。另一種解決方案則是,雇用一些專業(yè)的承包人來承擔(dān)關(guān)鍵任務(wù)(見圖1-2)。你可以雇用建筑師設(shè)計(jì)房子藍(lán)圖,雇用木匠做所有木工活,雇用水管工安裝水管和下水道系統(tǒng),雇用電工安裝電氣系統(tǒng)。如果采取這種
5、方法,你要分別和每個(gè)承包人溝通——告訴他們你希望完成什么工作,并協(xié)商確定價(jià)格——然后他們便可以為你做這些工作。如果幸運(yùn)的話,也許你的某個(gè)朋友正好是一位承包人,并且他又愿意免費(fèi)為你提供服務(wù)。這樣一來,你就徹底從房屋建設(shè)所需要掌握的各種瑣事中解脫出來,成為一名高層管理者,選擇最好的承包人完成你的目標(biāo),并確保將每個(gè)人的工作整合到一起,這樣便可建造出你心中的理想家園。圖1-2使用承包人執(zhí)行特定任務(wù)來建造房子1.1什么是API3這個(gè)比喻用在API上非常恰當(dāng):你可以把所建造的屋子想象成你希望編寫的軟件程序,并且那些1承包人負(fù)責(zé)提供給你API,這些API將那些原本需要
6、你完成的每項(xiàng)任務(wù)進(jìn)行了抽象,并隱藏了相關(guān)工作的實(shí)現(xiàn)細(xì)節(jié)。你的任務(wù)則是為應(yīng)用程序選擇合適的API,并將它們整合到你的程序中。而你的那位技藝嫻熟且愿意免費(fèi)提供服務(wù)的朋友就等同于一些開源庫,與其對(duì)應(yīng)的還有一些需要收取使用許可費(fèi)的2商業(yè)庫。這個(gè)比喻甚至還可以繼續(xù)擴(kuò)展,如你的承包人還可以再去招聘其他的子承包人,即你使用的API還可以借助其他API完成它們自身的任務(wù)。用“承包人”做比喻在面向?qū)ο缶幊讨兴究找姂T。早期的一些業(yè)內(nèi)人員就曾經(jīng)談?wù)撨^,讓某個(gè)對(duì)象為其所提供的服務(wù)或者行為定義一個(gè)契約。然后,該對(duì)象在被客戶端程序請(qǐng)求時(shí),這些服務(wù)。實(shí)現(xiàn)3方式可能是將部分任務(wù)轉(zhuǎn)包給幕
7、后的其他對(duì)象(Meyer,1987;Snyder,1986)。1.1.2C++中的API4嚴(yán)格來說,API只是簡單描述了如何與組件進(jìn)行交互。也就是說,它對(duì)某個(gè)組件進(jìn)行抽象,并提供功能說明。事實(shí)上,許多軟件工程師更喜歡將API這個(gè)縮寫擴(kuò)展為AbstractProgrammingInterface(抽象編程接口),而非ApplicationProgrammingInterface。5在C++中,API一般包括一個(gè)或多個(gè)頭文件(.h)以及輔助文檔。某個(gè)特定API的具體實(shí)現(xiàn)通常是可以被鏈接到最終用戶程序中的庫文件,它也可以是靜態(tài)庫,如Window操作系統(tǒng)下的.l
8、ib文件,MacOSX和Linux下的.a文件;又或者是動(dòng)態(tài)庫,如Windows