《C++ API 設計》——寫給想寫好類庫的程式設計師

丁曉昀發表於2013-05-23

“藉助在大規模、協作性軟體專案方面的經驗,Martin Reddy介紹了對個體開發者和開發組織都有實際價值的模式與實踐。《C++ API設計》探索了常常被忽視的技術性和非技術性問題,有助於推動成功的設計決策,從而產生高質量的,健壯的,而且可以長期使用的API。”

——Eric Gregory,Pixar動畫工作室軟體架構師

enter image description here


API是應用程式設計介面的縮寫。API開發在現代軟體開發中隨處可見,其目的是為某個元件的功能提供一個邏輯介面,同時隱藏該模組內部的實現細節。有些API用起來很順手,而有些則用起來讓人摸不著頭腦,更有些讓人直接棄用。編寫優質的API非常困難。大多數人的經驗都源於不斷犯錯或借鑑別人的經驗,而本書試圖打破這種局面,提煉出耐用且不會過時的API設計策略。API有哪些品質要求,有哪些關鍵要素,有哪些通用的技巧,設計時要遵循哪些原則……這些問題都能在本書中找到答案。

本書主要內容。

  • 第1章:API簡介。闡釋API的概念及其獨特之處,概覽全書內容。
  • 第2章:特徵。解答優秀API應具備的特點。
  • 第3章:模式。著眼於一些特定的API設計模式和慣用法,包括Pimpl慣用法、單例(singleton)、工廠方法(factory method)、代理(proxy)、介面卡(adapter)、外觀(facade)模式以及觀察者(observer)模式。
  • 第4章:設計。討論功能需求的收集和使用用例建模推動簡潔有用的介面的設計,以及一些物件導向分析和設計的技術。這一章也將討論大型軟體專案所面臨的諸多問題。
  • 第5章:風格。敘述各種風格的C和C++ API,如純C API、物件導向API、基於模板的API以及資料驅動的API。
  • 第6章:C++的用法。討論各種能夠影響良好API設計的C++語言特性,如良好建構函式和操作符風格、名稱空間、指標和引用引數的比較、友元的使用以及如何在動態庫中匯出符號。
  • 第7章:效能。分析API的效能問題並說明如何使用C++構建高效能的API。
  • 第8章:版本控制。主要討論API版本控制以及如何保持向後相容性。
  • 第9章:文件化。通過具體示例,藉助優秀的Doxygen工具,闡述給API新增註釋以及編寫文件的技巧。
  • 第10章:測試。介紹各種型別的自動測試,包括單元測試、整合測試和效能測試,同時列舉一些可以在專案中使用的優秀的測試方法。
  • 第11章:指令碼化。討論如何為C++ API建立指令碼繫結,以便此API能夠被諸如Python和Ruby等語言呼叫。
  • 第12章:可擴充套件性。介紹如何編寫可擴充套件的API,以便讓程式設計師編寫定製的C++外掛以擴充套件其所提供的基本功能。這一章還會講解如何使用繼承和模板建立可擴充套件的介面。
  • 附錄A:庫 。本書以如何建立靜態和動態庫的附錄作為結尾,討論靜態庫和共享庫之間的不同,並演示如何使用編譯器生成這些庫,以使你的程式碼能在其他應用中重用。

enter image description here

Martin Reddy博士是Code Reddy公司的CEO。他擁有電腦科學的博士學位以及在軟體行業超過15年的從業經驗。在此期間,Reddy博士撰寫了40多篇論文,發表了3項軟體專利,並與人合著了Level of Detail for 3D Graphics。他還是ACM以及IEEE的會員。

Reddy博士曾在Pixar動畫工作室工作過6年,他是該工作室的內部動畫系統的首席工程師。他設計並實現了很多高效能的API,這些API在一些奧斯卡獲獎影片及提名電影的製作中大放異彩,這些電影包括:《海底總動員》、《超人總動員》、《賽車總動員》、《美食總動員》,以及《機器人總動員》等。

隨後他在Bakery動畫工作室擔任技術經理,並領導了這家創業公司的動畫軟體開發,其工作包括設計與實現很多關鍵的API及制定整體的動畫工作流和使用者介面。

Reddy博士在他早期職業生涯中曾在SRI International供職5年,主要從事分散式三維地形視覺化技術相關的工作,該工作包括幾個開源地球空間資訊API的開發。他成功建立了在Web上描述3D地球空間資訊模型的ISO標準,並且還連續兩年被選為Web3D協會的會長。

Reddy博士開辦了一所諮詢公司,旨在為不同的軟體公司提供技術諮詢,他的客戶包括Linden Lab和Planet 9 Studios。前者涉及開源專案Second Life(第二人生)的API設計和基本架構的改進。Second Life是一個線上的3D虛擬世界,在全球已經有上千萬人使用者。

相關文章