內容簡介
本書是一部獨具特色的麵嚮對象技術著作。書中結閤代碼示例生動透徹地講述瞭麵嚮對象思想的精髓,讓讀者真正學會以對象方式進行思考。本書共15章,在結構上可以分為兩部分:第壹部分包括第1~10章,探討麵嚮對象的基本概念,比如封裝、多態、繼承等;第二部分包括第11~15章,專注於將這些概念應用於一些通用的麵嚮對象技術中,並結閤瞭一些實用的應用程序。
作者簡介
Matt Weisfeld,居住於美國俄亥俄州的剋利夫蘭市。他既是大學教授、軟件開發工程師,也是作傢。他在信息技術領域擁有20年的經驗,之後進入大學任教。他先後當過軟件開發工程師、企業傢以及兼職教授。Matt擁有計算機科學碩士學位以及工商管理碩士學位。Matt除瞭本書之外,Matt還撰寫瞭其他兩本關於軟件開發的書籍,並在雜誌和期刊上發錶瞭多篇文章。這些雜誌和期刊包括《developer.com》《Dr.Dobb’s》《C/C++ Users》《Software Development》《Java Report》和國際期刊《Project Management》等。
目錄
譯者序
作者簡介
前言
第1章 麵嚮對象的概念簡介 1
1.1 基本概念 1
1.2 對象及遺留係統 2
1.3 過程式編程與麵嚮對象編程 3
1.4 由麵嚮過程開發過渡到麵嚮對象開發 5
1.4.1 過程式編程 5
1.4.2 麵嚮對象編程 6
1.5 究竟什麼是對象 6
1.5.1 對象數據 6
1.5.2 對象行為 7
1.6 究竟什麼是類 10
1.6.1 創建對象 10
1.6.2 屬性 11
1.6.3 方法 11
1.6.4 消息 12
1.7 使用類圖作為可視化工具 12
1.8 封裝和數據隱藏 12
1.8.1 接口 13
1.8.2 實現 13
1.8.3 接口/實現範式的一個真實示例 14
1.8.4 接口/實現範式的模型 14
1.9 繼承 15
1.9.1 超類和子類 16
1.9.2 抽象 16
1.9.3 is-a關係 17
1.10 多態 18
1.11 組閤 21
1.11.1 抽象 21
1.11.2 has-a關係 21
1.12 結語 21
1.13 本章中使用的示例代碼 22
1.13.1 C#.NET版本的TestPerson類 22
1.13.2 C#.NET版本的TestShape類 23
第2章 如何以麵嚮對象的方式進行思考 25
2.1 清楚接口和實現之間的區彆 26
2.1.1 接口 27
2.1.2 實現 27
2.1.3 一個接口/實現示例 28
2.2 使用抽象思維設計接口 31
2.3 盡可能提供最小化的用戶接口 32
2.3.1 確定用戶? 33
2.3.2 對象行為 33
2.3.3 環境約束 34
2.3.4 識彆公共接口 34
2.3.5 識彆實現 34
2.4 結語 35
2.5 引用 35
第3章 高級的麵嚮對象概念 36
3.1 構造函數 36
3.1.1 什麼是構造函數調用 37
3.1.2 構造函數中包含什麼 37
3.1.3 默認構造函數 37
3.1.4 使用多個構造函數 38
3.1.5 設計構造函數 41
3.2 錯誤處理 41
3.2.1 忽略問題 42
3.2.2 檢查問題並中止應用程序 42
3.2.3 檢查問題並試圖恢復 42
3.2.4 拋齣異常 43
3.3 作用域的重要性 45
3.3.1 局部屬性? 45
3.3.2 對象屬性 46
3.3.3 類屬性 48
3.4 操作符重載 49
3.5 多重繼承 49
3.6 對象操作 50
3.7 結語 51
3.8 引用 51
3.9 本章中使用的示例代碼 51
第4章 類的剖析 53
4.1 類名 53
4.2 注釋 55
4.3 屬性 55
4.4 構造函數 56
4.5 訪問器 58
4.6 公共接口方法 60
4.7 私有實現方法 60
4.8 結語 61
4.9 引用 61
4.10 本章中使用的示例代碼 61
第5章 類設計指導 63
5.1 對現實世界係統建模 63
5.2 識彆公共接口 64
5.2.1 最小化公共接口 64
5.2.2 隱藏實現 65
5.3 設計健壯的構造函數(以及析構函數) 65
5.4 在類中設計錯誤處理 66
5.4.1 使用注釋給類加上文檔 66
5.4.2 構造可以閤作的對象 67
5.5 設計時請考慮重用 67
5.6 設計時請考慮擴展性 67
5.6.1 使用描述性的名稱 67
5.6.2 抽象不可移植的代碼 68
5.6.3 提供一種方式來復製和比較對象 68
5.6.4 保持盡可能小的作用域 69
5.6.5 類的職責與自身高度相關 70
5.7 設計時請考慮可維護性 71
5.7.1 在開發過程中使用迭代 71
5.7.2 測試接口 72
5.8 使用對象持久化 73
5.9 結語 75
5.10 引用 75
5.11 本章中使用的示例代碼 75
第6章 使用對象進行設計 77
6.1 設計指導 77
6.1.1 提供正確的分析 79
6.1.2 編寫工作陳述文檔 80
6.1.3 收集需求 80
6.1.4 開發用戶接口的原型 81
6.1.5 識彆類 81
6.1.6 確定每個類的職責 81
6.1.7 確定類之間如何協作 81
6.1.8 創建類模型來描述係統 81
6.1.9 建立用戶接口原型 82
6.2 對象包裝 82
6.2.1 結構化代碼 83
6.2.2 包裝結構化代碼 84
6.2.3 包裝不可移植的代碼 85
6.2.4 包裝已有類 86
6.3 結語 87
6.4 引用 87
第7章 精通繼承和組閤 88
7.1 重用對象 88
7.2 繼承 89
7.2.1 通用和特例 91
7.2.2 設計決策 92
7.3 組閤 93
7.4 為什麼封裝是麵嚮對象的本質 95
7.4.1 繼承如何減弱封裝 96
7.4.2 關於多態的一個具體例子 97
7.4.3 對象職責 98
7.4.4 抽象類、虛方法和協議 101
7.5 結語 102
7.6 引用 103
7.7 本章中使用的示例代碼 103
第8章 框架和重用:使用接口和抽象類進行設計 105
8.1 代碼:重用還是不重用 105
8.2 什麼是框架 106
8.3 什麼是契約 107
8.3.1 抽象類 108
8.3.2 接口 110
8.3.3 綜閤運用 112
8.3.4 編譯器佐證 114
8.3.5 創建契約 115
8.3.6 係統插接點 117
8.4 一個電子商務示例 117
8.4.1 一個電子商務問題 117
8.4.2 非重用方式 118
8.4.3 電子商務解決方案 119
8.4.4 UML對象模型 120
8.5 結語 124
8.6 引用 124
8.7 本章中使用的示例代碼 124
第9章 創建對象及麵嚮對象設計 128
9.1 組閤關係 129
9.2 分階段構建 129
9.3 組閤類型 131
9.3.1 聚閤 131
9.3.2 聯閤 132
9.3.3 同時使用聯閤和聚閤 133
9.4 避免依賴 133
9.5 基數 134
9.5.1 多個對象聯閤 136
9.5.2 可選的聯閤 137
9.6 一個綜閤性示例 1
前言/序言
前 言Preface 本書內容概要正如書名所述,本書講述瞭麵嚮對象思考的過程。選擇一本書的主題和書名是個很重要的決定,但如果主題概念性很強,決定就沒那麼容易瞭。大部分書籍都隻涉及瞭編程及麵嚮對象設計的某個方麵。一些主流的書闡述瞭諸如麵嚮對象分析、麵嚮對象設計、麵嚮對象編程、設計模式、麵嚮對象的數據結構(XML)、統一建模語言(UML)、麵嚮對象Web開發、麵嚮對象移動開發、進階麵嚮對象編程語言等主題,當然也包括瞭其他與麵嚮對象編程相關的主題。 然而,許多人仔細研究這些書後,都未曾注意到這些主題都建立在同一個基礎之上,即如何以麵嚮對象的方式進行思考。從學生到軟件開發專業人員,往往雖然閱讀瞭這些書,但沒有花費充分的時間和精力來真正理解代碼背後的設計理念。 我認為僅學習一種特定的開發方法、一種編程語言或者一組設計工具並不能說明學會瞭麵嚮對象這一概念。簡單來說,以麵嚮對象方式編程就是一種思考方式。本書就討論這種麵嚮對象的思考過程。 把麵嚮對象的思考過程從語言、開發實踐以及工具中剝離齣來並不是一個簡單的任務。在學習麵嚮對象這一理念時,往往要求先深入學習一門編程語言。例如,很多年以前,大量的C語言程序員在沒有直接接觸麵嚮對象概念之前,就開始通過C++語言來瞭解麵嚮對象。其他軟件專傢第一次接觸麵嚮對象則是在演示文稿中使用UML創建對象模型。他們也沒有直接學習麵嚮對象的概念。即使到現在,互聯網作為商業平颱的幾十年後,編程書籍以及專業的培訓材料並沒有先介紹麵嚮對象這一概念。 學習麵嚮對象的概念與學習使用麵嚮對象語言進行編程有著巨大差異,理解這點很重要。我在編寫本書第1版前就意識到瞭這點。當我閱讀Craig Larman的文章《What the UML Is-and Isn’t》時,他指齣: 但是,在軟件開發工程和UML繪圖語言領域,讀寫UML標記的能力有時候好像等同於麵嚮對象的分析和設計能力。事實當然並非如此,後者比前者更加重要。因此我推薦先學習麵嚮對象分析和設計的相關教學資料,它優先於學習使用UML標記的相關工具。 因此,盡管學習一門建模語言是非常重要的步驟,但先學習麵嚮對象的技能更加重要。如果未完全理解麵嚮對象概念前就學習UML,這就像還未瞭解任何與電路相關的知識就開始學習電路圖一樣。 學習編程語言也有相同的問題。如前所述,很多C語言程序員還未直接瞭解任何麵嚮對象的概念,就想通過使用C++語言來達到麵嚮對象的境界。在麵試中經常會齣現這樣的情況,很多自詡C++程序員的開發人員隻是會使用C++編譯器的C程序員。甚至現在,諸如C#.NET、VB.NET、Objective-C以及Java等語言已經相當普及瞭,工作麵試中的一些關鍵問題可以迅速暴露齣這些程序員缺乏麵嚮對象的思想。 Visual Basic的早期版本並不是麵嚮對象的。C語言也不是麵嚮對象的。而C++在設計時就嚮後兼容C語言。因此,使用C++編譯器編寫隻含C語言語法的程序,而放棄使用C++的麵嚮對象功能是完全可能的。Objective-C是標準ANSI C語言的一個擴展。更糟糕的是,程序員可能使用勉強夠用的麵嚮對象功能把程序寫成瞭既不是麵嚮對象的也不是麵嚮過程的四不像産品。 因此,在學習使用麵嚮對象的開發環境之前,先學習基本的麵嚮對象概念至關重要。與其直接學習一門編程語言(比如Objective-C、VB .NET、C++、C# .NET或Java)或建模語言(如UML),還不如把時間花在學習麵嚮對象的思考過程上。 我在使用C語言編程很多年後,於20世紀80年代後期開始參加Smalltalk語言的學習課程。當時我所在的公司認為公司的軟件開發人員應該學習這個極具前途的技術。老師授課時說麵嚮對象的範式是全新的思維方式(事實上它從20世紀60年代就已經萌芽瞭)。他接著說,雖然幾乎我們所有人都是很優秀的程序員,但還有10%~20%的人從來沒有按照麵嚮對象的方式做事。如果該說法確實正確,那麼很可能是因為很多優秀的程序員從沒有花時間進行編程範式的轉變,沒有深入學習麵嚮對象概念。 第4版中的新增內容正如在前言中經常提及的一樣,第1版中我的願景僅僅圍繞概念本身,而不是具體的新興技術。盡管我在第2版、第3版以及第4版仍然堅持該目標,但也引入瞭幾個章節講述關於應用程序的主題,這些主題與麵嚮對象概念契閤度很高。第1~10章涵蓋瞭基本的麵嚮對象概念,第11~15章將這些概念應用到瞭一些常用的麵嚮對象技術中。例如,第1~10章提供瞭麵嚮對象的基礎課程(比如封裝、多態、繼承等),而第11~15章則介紹瞭一些實際應用。 第4版相對於之前的版本拓展瞭很多主題。以下列齣瞭改進及更新的主題: 移動設備開發,包括手機應用、移動應用以及混閤開發等。 iOS環境下的Objective-C代碼示例。 使用XML及JSON實現可讀性強的數據交換。 使用CSS、XSLT等技術實現數據渲染與轉換。 Web服務,包括簡單對象訪問協議(SOAP)、RESTful Web服務等。 客戶端/服務器端技術以及封送對象。 持久化數據和序列化對象。
麵嚮對象的思考過程(原書第4版) 下載 mobi epub pdf txt 電子書