-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

大規模C++程序設計

( 簡體 字)
作者:(美) John Lakos 著類別:1. -> 程式設計 -> C++ -> C++
譯者:
出版社:機械工業出版社大規模C++程序設計 3dWoo書號: 40016
詢問書籍請說出此書號!

缺書
NT售價: 645

出版日:10/1/2014
頁數:548
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111474258
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

ntor Graphics公司IC部門的一員,我有幸和一群聰明且有才華的軟件工程師一起工作,共同開發了一些非常大型的系統。

早在1985年,Mentor Graphics公司就是最早使用C++開發實際大型項目的公司之一。那時,沒有人知道該如何開發大型項目,也沒有人預料到未有過使用經驗的項目構建方法會出現這樣的問題——成本超支、計劃延遲、可執行文件龐大、性能低劣,以及構建時間昂貴得令人難以置信。

一路走來,我們收獲了許多寶貴的經驗教訓——知識的獲取是一個痛苦的過程。沒有書籍可以幫助指導這種設計過程,也從未有人在如此大規模的系統上嘗試使用面向對象的設計。

十年來,由于積累了大量有價值的經驗,Mentor Graphics公司使用C++開發完成了數個大型軟件系統,同時也為其他使用C++進行大項目開發的人開辟了一條道路,使他們不用再付出高昂的代價。

在十三年的C語言(后來轉為C++語言)計算機輔助設計(Computer Aided Design,CAD)軟件開發生涯中,我已經多次體會到:提前計劃總會產生出更高質量、更易維護的軟件產品。在Mentor Graphics公司,我一直強調要從項目的一開始就確保質量,要把確保質量作為設計過程中一個必不可少的組成部分。

1990年,我在哥倫比亞大學開始講授研究生課程“面向對象設計與編程”。自1991年以來,作為這門課程的教師,我有機會將我們在Mentor Graphics公司從工業化軟件開發過程中獲得的許多經驗與學生一起分享。來自數百個研究生和專業程序員的提問及反饋信息,幫助我明確了許多重要的概念。本書正是這些經驗的總結。據我所知,這是第一本指導開發大型C++項目的書籍,也是第一本針對大型C++項目中出現的軟件質量相關問題的書籍。我希望這些資料對于讀者的工作非常有幫助,如同在我的工作中一樣實用。

適用讀者

本書主要是為有經驗的C++軟件開發人員、系統架構師和具有前瞻性的質量保證專業人員而寫的。本書尤其適合那些致力于大規模軟件開發(如數據庫、操作系統、編譯器和框架等)的人員閱讀。

使用C++開發一個大規模軟件系統,不僅要充分理解邏輯設計問題,與C++編程有關的大部分書籍中都包括了這些邏輯設計問題。若要進行有效的設計,還需要掌握物理設計概念,盡管這些物理設計概念與開發的技術緊密相關,但是物理設計概念的某些方面即便是專家級的軟件開發人員也可能僅有很少的經驗或者根本就沒有經驗。

當然,本書中提出的大多數建議也適用于小型項目。對于開發者來說,典型的做法是從一個小型項目開始,然后開始接觸更具有挑戰性的更大型項目。一個特定項目的范圍經常會擴展,即使開始時是一個小型項目,后來也會變成一個大型項目。但是,在大型項目中忽略最佳實踐策略所產生的直接后果比在一個較小型項目中要嚴重得多。

本書將高層設計概念與特定的C++編程規范結合起來,以滿足下面兩類需求:

(1)對面向對象設計,尤其側重C++編程語言實際應用的書籍的需求;

(2)對描述如何使用C++編程語言開發非常大型系統的書籍的需求。

毫無疑問,這是一本進階的書籍。本書既不適用于初學C++語法的讀者,也不適合于用來學習未曾掌握的C++語法的讀者。本書要教你如何充分有效地利用C++的全部功能去開發超大型系統。

總之,如果認為自己對C++已經掌握得很好了,但是想要了解更多的關于在大規模項目中如何有效地使用C++語言的內容,那么這本書是非常適合你的。

書中的例子

大部分人是通過例子來學習的。通常,我會提供更有實際意義的例子,避免采用只講解設計的一方面,而在另外一些方面有明顯錯誤的例子。我也盡力避免只講述編程語言細節,而沒有其他意義的例子。

除非特別指出,本書中的所有例子都表示“良好的設計。”因此,前幾章介紹的例子與書中的所有推薦實踐都是一致的。本書采用這種方式講解的缺點是:大家在本書中所看到的示例代碼可能與以往看到的代碼有所不同,而此時可能還不能準確地知道為什么會不同。我認為,對本書提供的所有例子綜合借鑒,可以彌補這個不足。

這些例子有兩個地方值得注意:注釋和包前綴(package prefix)。為了節省篇幅本書許多例子的注釋直接省略了。所有出現的注釋都是少而精的。不過遺憾的是,這里就是要求讀者 “照我說的去做,而不是照我做的那樣做”的地方——至少在本書中是這樣的。讓讀者可以放心的是,在實踐中,我在編寫接口的時候添加了詳細的注釋,而不是在編寫接口之后才添加注釋。

第二個需要注意的是,本書前面幾個例子中的包前綴使用不一致。在大型項目環境中包前綴是必需的,但是使用起來有些棘手,需要適應一段時間。在第7章正式提出來之前,我選擇不使用注冊的包前綴,以便能專注于介紹其他重要的基礎內容。

當描述想要設計的目標功能時,為了使得文本更加簡潔,在例子中使用了許多內聯函數的文本注釋。因為本書大部分內容與程序的組織問題直接有關,如內聯,所以我傾向在例子中避免使用內聯函數。如果一個函數被聲明為inline,肯定有其正當的理由,而不只是為了表示方便。

使用C++開發大型系統是一系列工程方法的折衷。這里沒有絕對的準則。使用像從不和總是之類的詞匯進行描述是很吸引人的,但是這樣的詞語只能用來對內容進行簡單的描述。在我的預計中,有能力閱讀本書的C++程序員會認為這種籠統的描述有歧義——事實也確實如此。為了避免陷入這種局面,我會指出,什么(幾乎)總是正確的情況,然后會給例外情況提供注釋或者提示。

目前,有各種通用的文件擴展名,用于區分C++頭文件和實現文件。例如:

頭文件擴展名——.h、.hxx、.H、.h++、.hh、.hpp

實現文件擴展名——.c、.cxx、.C、.C++、.cc、.cpp

從始至終我們都使用.h擴展名標識C++頭文件,使用.c擴展名標識C++實現文件。本書中,我們會頻繁地稱頭文件為.h文件,實現文件為.c文件。最后需要說明的是,本書中的所有例子都已在SUN SPARC工作站CFRONT 3.0版本(SUN版本)上編譯并校驗過語法,同時在HP700系列機器上使用原生C++編譯器進行過上述測試。當然,出現任何錯誤都只能由作者負責任。

閱讀線路圖

本書涵蓋了很多內容。并不是所有的讀者都擁有相同的知識背景。因此,我在第1章提供了一些(必備的)基礎知識以幫助讀者學習。專業的C++程序員可以選擇略過這一部分或者根據需要簡單參考一下。第2章包含了一些基本軟件設計規則,希望每一位有經驗的開發人員都可以很快掌握。

第0章概述大規模C++軟件開發人員將會遇到的問題。

第一部分講解基礎知識。

第1章復習語言基礎知識、通用設計模式和本書的風格約定。

第2章介紹C++項目開發中應該遵守的重要設計實踐原則。

本書余下的內容分成兩大部分。第二部分介紹了一系列大項目中與物理結構有關的重要論題。這些章(第3∼7章)中的內容集中在編程方面,并且只精選適用于大型項目設計的內容,對許多讀者來說這部分充滿了全新的編程觀點。這部分內容是按照“自底向上”的順序介紹的,每一章都銜接了前一章的內容。

第二部分講解物理設計概念。

第3章介紹系統的基本物理構件模塊。

第4章闡述建立可測試、可維護、可重用的非循環物理依賴性層組件的重要性。

第5章講解減少鏈接時依賴性的特定技術。

第6章介紹減少編譯時依賴性的特定技術。

第7章講解如何將前幾章的技術應用到大型系統中。

最后一部分講述邏輯設計和物理設計相結合的傳統課題。這些章(第8∼10章)講述如何將一個組件作為一個整體進行設計,總結了大量與合理接口設計有關的問題,并解決了在大型項目環境中的實現問題。

第三部分講解邏輯設計問題。

第8章綜述組件總體設計需要考慮的重要因素。

第9章詳細闡述創建一個組件的功能接口所涉及的問題。

第10章講解在大型項目環境中實現對象的特定組織問題。

附錄中的主題在本書中都有提到。

致謝

如果沒有對Mentor Graphics公司建設和發展做出重要貢獻的同事們的共同努力,這本書是不可能完成的。

首先,我很想感謝我的朋友、同事和大學同學Franklin Klein對本書所做的貢獻。他審閱了本書的每一頁原始手稿。Franklin對大多數軟件開發人員都不熟悉的很多概念提出了很好的意見。Franklin的才華、智慧、學識、為人,以及領會有效交流微妙之處的能力在我遇見的人中前所未有。他詳細評論并負責在內容、敘述順序和表達風格等方面進行數次修改。

在排版期間,數位有天分和獻身精神的軟件專業人員審閱了本書的全部或大部分內容。他們愿意花費寶貴的時間審閱本書,對此我感到十分幸運。我要感謝Brad Appleton、Rick Cohen、Mindy Garber、Matt Greenwood、Amy Katriel、Tom O’Rourke、Ann Sera、Charles Thayer和Chris Van Wyk,他們花費大量的精力幫助我盡可能地提高本書的價值。我要特別感謝Rick Eesley,因為他提供了豐富的評論和實際的建議——我尤其要感謝他建議在每一章的結尾加一個小結。

許多專業軟件開發人員和質量保證工程師審閱了部分章節。我要感謝Samir Agarwal、Jim Anderson、Dave Arnone、Robert Brazile、Tom Cargill、Joe Cicchiello、Brad Cox、Brian Dalio、Shawn Edwards、Gad Gruenstein、William Hopkins、Curt Horkey、Ajay Kamdar、Reid Madsen、Jason Ng、Pete Papamichael、Mahesh Ragavan、Vojislav Stokovic、Clovis Tondo、Glenn Wikle、Steve Unger以及John Vlissides,他們在技術上做出了貢獻。我也要感謝Mentor Graphics公司的Lisa Cavaliere-Kaytes和Tom Matheson,他們為書中的一些圖表提出了寶貴的建議。另外我還要感謝Eugene Lakos和Laura Mengel所做的貢獻。

我要感謝以下讀者,自從本書首次印刷以來,他們幫助我排除了很多不可避免的錯誤,對于這些錯誤我會承擔所有責任:Jamal Khan、Dat Nguyen、Scott Meyers、David Schwartz、Markus Bannert、Sumit Kumar、David Thomas、Wayne Barlow、Brian Althaus、John Szakmeister以及Donovan Brown。

如果不是在哥倫比亞大學收到了一封推銷信,里面有一份免費的Rob Murray著作的評論表,我也許永遠不會出版這本書。因為我只在春季學期才授課,所以在我寄回所附表格的時候,要求將那本書寄到Mentor Grphics而不是哥倫比亞。之后不久,我接到了Pradeepa Siva(她是Addison-Wesley Corporate & Professional Publishing Group的)打來的電話,要確定我為何有這個不尋常的要求。讓她相信了這個要求的合理性(也許有些自我吹噓)之后,她說:“我想我的老板可能會愿意和您談談。”幾天之后,我見到了她的老板——那個出版者。該社出版的“專業計算機叢書”品質卓越,我對此一直心懷崇敬。正是這種聲譽讓我最終答應為那套叢書撰寫本書。

我非常感謝Addison-Wesley Corporate & Professional Publishing Group的成員。出版商Join Wait讓我明白了理解他人和交流的重要性,這些都將是我受用終身的寶貴財富。從閱讀和審閱大量書籍,到直接與每一個專業軟件技術人員討論,再到站在書店里四處觀察潛在讀者的購買習慣,John Wait一直在盡力把握行業的脈搏。

以Marty Rabinowitz為首的產品人員在各方面都致力于卓越。與其他出版商聯系的學術型作者對我表現出了擔心,但是Marty提出,在表達作者思想時應做到技術準確、易于使用,有美學魅力的提煉與加工,這讓我十分高興。我特別要感謝Frances Scanlon,為了排印本書,她努力付出,艱苦不懈。

本系列的技術編輯Brian Kermighan,在風格和內容上都做出了貢獻,并發現了很多其他人沒有發現的印刷錯誤和不一致的內容。他知識的廣度和深度,與簡潔的寫作風格相結合,對本系列叢書的成功出版做出了非同尋常的貢獻。

在本系列其他書中已證明的基本邏輯概念和設計實踐,在本書中視為理所當然的內容,因此最后我還想感謝本系列叢書的其他作者。
內容簡介:

由世界級軟件開發大師John Lakos親筆撰寫, 是C++程序設計領域最有影響力的著作之一。作者結合自己多年從事大規模C++項目的開發經驗,詳細介紹了大規模C++程序設計涉及的一系列概念、理論、原理、設計規則及編程規范,并通過大量真實世界的編程示例,深入解析物理設計與邏輯設計的一些新概念和新理論,闡明在開發大型和超大型C++軟件項目時應該遵循的一系列設計規則,論述了設計具有易測試、易維護和可重用等特性的高質量大規模C++軟件產品的方法。
本書分為三部分,共11章:第0章是概述;第一部分(第1~2章)介紹C++語言開發的一些基礎知識、通用設計模式,以及C++項目開發中應該遵守的一些基本軟件設計原則;第二部分(第3~7章)全面介紹優秀物理設計的基本概念,設計的基本單元組件、物理層次結構、系統分層技術、隔離技術等,詳細闡述如何利用合理的物理設計層次結構,通過隔離、增量和分層測試以更低的成本獲得更高的可靠性,如何利用分層技術降低系統內的鏈接依賴性,如何利用隔離技術減輕或消除編譯時依賴性,并講解如何將這些技術應用到超大型系統中;第三部分(第8~10章)講解邏輯設計問題,包括組件總體設計需要考慮的重要因素,詳細闡述創建一個組件的功能接口所涉及的問題,以及在大型項目環境中實現對象的特定組織問題。
用C++成功開發一個大規模軟件系統,不僅僅需要很好地理解大多數C++程序設計書籍中所涉及的邏輯設計問題,而且還需要掌握物理設計的概念。這些概念與開發技術密切相關,但即使是專業的軟件開發人員也可能對其中的某些方面缺乏開發經驗或者根本不了解。
本書是第一本真正講解如何設計大型系統的書籍,也是側重于C++編程語言實踐方面的僅有的幾本書之一,為所有涉及數據庫、操作系統、編譯器和框架之類大型系統開發工作的C++軟件專業人員提供了權威指南。
在本書中,作者闡述了將大型系統分解成較小且更易于管理的組件物理層次結構(而不是繼承)的過程。從根本上說,這種具有非循環物理依賴的系統比相互緊密依賴的系統更經濟、更易于維護,可測試性和可重用性更強。除了解釋遵循優秀的物理設計規則和邏輯設計規則的動機之外,書中還介紹了一系列用來消除循環(物理)依賴、編譯時(物理)依賴和連接鏈接時(物理)依賴的特定技術,并將這些概念從大型系統擴展到超大型系統。本書最后全面論述了一種易于理解的、適用于單個組件邏輯設計的自頂向下的方法。附錄部分補充了一些主題并收集整理了一些實用設計規則、指南和原理,包括一種用來在最小化物理依賴時避免胖接口設計的有價值的設計模式“協議層”,實現一個兼容ANSI C的C++過程接口的細節,以及一整套用于提取和分析物理依賴的類UNIX工具的完整規范。
目錄:

譯者序

前 言

第0章 概述 1

0.1 從C到C++ 1

0.2 使用C++開發大型項目 2

0.3 重用 9

0.4 質量 10

0.5 軟件開發工具 12

0.6 小結 12

第一部分 基 礎 知 識

第1章 預備知識 15

1.1 多文件C++程序 15

1.2 typedef聲明 22

1.3 斷言語句 22

1.4 編程風格 23

1.5 迭代器 28

1.6 邏輯設計表示法 34

1.7 繼承與分層 40

1.8 最小化 41

1.9 小結 42

第2章 基本規則 44

2.1 概述 44

2.2 成員數據訪問 45

2.3 全局名字空間 48

2.4 包含衛哨 56

2.5 冗余包含衛哨 58

2.6 文檔 61

2.7 標識符命名規則 63

2.8 小結 64

第二部分 物理設計概念

第3章 組件 69

3.1 組件與類 69

3.2 物理設計規則 75

3.3 依賴關系 83

3.4 隱含依賴 86

3.5 提取實際的依賴 91

3.6 友元關系 93

3.7 小結 99

第4章 物理層 101

4.1 軟件測試的一個比喻 101

4.2 一個復雜的子系統 102

4.3 測試“好”接口的難度 105

4.4 可測性設計 107

4.5 隔離測試 109

4.6 非循環物理依賴 111

4.7 層次編號 112

4.8 分層和增量測試 117

4.9 測試一個復雜子系統 121

4.10 可測性與測試 122

4.11 循環物理依賴 123

4.12 累積組件依賴 124

4.13 物理設計質量 128

4.14 小結 132

第5章 層次化 134

5.1 循環物理依賴的一些來源 134

5.2 升級 142

5.3 降級 149

5.4 不透明指針 158

5.5 啞數據 164

5.6 冗余 171

5.7 回調方法 175

5.8 管理者類 184

5.9 分解 187

5.10 升級封裝 199

5.11 小結 208

第6章 隔離 209

6.1 從封裝到隔離 210

6.2 C++結構和編譯時耦合 214

6.3 局部隔離技術 223

6.4 整體的隔離技術 249

6.5 過程接口 275

6.6 隔離或不隔離 288

6.7 小結 304

第7章 包 306

7.1 從組件到包 306

7.2 注冊包前綴 312

7.3 包層次化 319

7.4 包隔離 323

7.5 包群 325

7.6 發布過程 328

7.7 main程序 335

7.8 啟動 341

7.9 小結 351

第三部分 邏輯設計問題

第8章 組件架構 355

8.1 抽象和組件 355

8.2 組件接口設計 356

8.3 封裝程度 359

8.4 輔助實現類 368

8.5 小結 372

第9章 函數設計 374

9.1 函數接口說明 374

9.2 在接口中使用的基本類型 406

9.3 特殊情況函數 415

9.4 小結 421

第10章 對象實現 425

10.1 成員數據 425

10.2 函數定義 430

10.3 內存管理 439

10.4 在大型項目中使用C++模板 466

10.5 小結 477

附錄A 協議層設計模式 480

附錄B 實現一個與ANSI C兼容的C++接口 501

附錄C 一個依賴提取器包/分析器包 509

附錄D 快速參考 531

參考文獻 546
序: