面向對象的思考過程(原書第二版)

-
【作 者】[美] Matt Weisfeld 著
【I S B N 】978-7-5084-2291-0
【責任編輯】吳萍
【適用讀者群】研究生
【出版時間】2004-08-01
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】
【千字數】296
【印 張】13.25
【定 價】¥26
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
面向對象的程序設計(OOP)是現代程序設計語言的基本概念,本書深入探討了如何以面向對象的方式來進行思考。全書共分為15章,內容包括:面向對象的基本概念,如何以對象的方式進行思考,高級的面向對象概念,類的剖析,類設計,繼承和組合,框架和重用,創建對象,使用UML創建對象模型,持久對象,可移植的數據,分布式對象和企業,設計模式等。
本書是當代程序員的基礎理論讀物,適合于大學本科計算機專業的學生以及想要學習面向對象技術的程序員。
Authorized translation from the English language edition, entitled OBJECT-ORIENTED THOUGHT PROCESS, THE, 2nd Edition, 0672326116 by WEISFELD, MATT, published by Pearson Education, Inc, publishing as Que/Sams, Copyright © 2004 by Sams Publishing.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.CHINESE SIMPLIFIED language edition published by CHINA WATERPOWER PRESS/BEIJING MULTI-CHANNEL ELECTRONIC INFORMATION CO.LTD, Copyright © 2004 by CHINA WATERPOWER PRESS/BEIJING MULTI-CHANNEL ELECTRONIC INFORMATION CO.LTD.
顧名思義,本書是關于面向對象(OO)的思考過程的。很明顯,選擇本書的主題和書名都是重要的決定,然而,這些決定并不簡單。許多圖書講述面向對象的一種或者另一種層次。若干暢銷圖書講述以下主題:OO分析、OO設計、OO程序設計、設計模式、OO數據庫、統一建模語言(UML)、各種OO程序設計語言以及許多與OO程序設計有關的其他主題。
然而,在研究以上所有圖書時,許多人忘記各個主題都是建立在下面這個單一基礎之上:如何以OO的方式進行思考。遺憾的是,許多軟件開發專家常常還沒有花適當的時間和精力來真正了解這些圖書中的概念,就開始鉆研它們。
我認為學習OO概念不是通過學習某種具體的開發方法或者某組工具就可以實現的。簡而言之,以OO的方式完成工作是一種思考方法。本書完全和OO思考過程有關。
從OO思考過程中分離出方法和工具并不容易。許多人都是通過其中一種方法或者工具來了解OO概念的。許多C程序員是在直接轉移到C++時首次了解到面向對象,在此之前甚至沒有間接接觸這個方法。一些軟件專業人員是通過演示文稿(包含使用UML的對象模型)而首次接觸面向對象的,在此之前他們也沒有直接接觸過OO概念。
理解學習OO概念和使用支持該范例的方法和工具之間的顯著區別是很重要的。在“What the UML Is—and Isn’t”一文中,作者Craig Larman說:“遺憾的是,軟件工程和UML圖表語言領域中,獲得閱讀和編寫UML符號的技能在某些時候似乎和獲得面向對象分析和設計的技能同等重要。當然,事實并非如此,后者比前者更重要。因此,我建議尋找以下培訓和培訓材料:其中面向對象的分析和設計要比UML符號或者某種電腦輔助軟件工程工具的用途更為重要。”
盡管學習一門建模語言是一個很重要的步驟,但是先學習OO技能更重要。在學習OO概念之前先學習UML,類似于在不了解任何電子技術時學習如何閱讀電氣圖。
程序設計語言存在相同的問題。前面說過,許多C程序員還沒有直接接觸到OO概念,就通過轉移到C++而進入面向對象領域。很多情況下,聲稱自己是C++程序員的開發人員只是使用C++編輯器的C程序員。
隨著Java、C#.NET、Visual Basic .NET之類的面向對象語言越來越流行,這個問題越來越重要。有很多Visual Basic程序員必須轉移到Visual Basic .NET中。類似地,許多可能沒有遵守嚴格的OO慣例的C++程序員,需要轉移到Java或者C#中,在使用這些語言時,他們就別無選擇,只能以OO方式進行思考。
早期的Visual Basic版本不是OO的。C不是OO的,而開發C++時考慮了與C的向后兼容性。因此,僅僅使用C++編輯器編寫C的句子構造,而拋棄了C++所有的OO特性,這是非常可能的。更壞的情況下,程序員可以使用足夠的OO特性,剛好使某個程序不能使用OO進行理解,而非OO程序員也可以這樣。
因此,在開始OO開發的時候,首先學習基本的OO概念是至關重要的。我們應該抵擋住直接跨入某種程序設計語言(如C++、C#或者Java)或者某種建模語言(如UML)的誘惑,而花時間來學習面向對象的思考過程。
本書是向程序員介紹面向對象技術的概念性圖書。它的讀者對象當然包括想要跨越到面向對象技術的結構化程序設計人員。因此,書中包括的一些資料實際上是結構化的技術和面向對象技術之間的橋梁。第6章就是該方法的一個好例子,該章添加了結構化程序設計人員所熟悉的技術。重要的是理解面向對象和結構化實踐并非是相互排斥的。結構化技術的使用在OO設計中隨處可見(僅僅考慮for循環或者if語句)。
20世紀80年代后期,在我的第一堂Smalltalk課上,教師告訴全班同學,新的OO范例是一種全新的思考方式。他接著說到:“雖然我們差不多都是非常優秀的程序員,但是其中的10%~20%永遠都不能真正以OO的方式完成工作。”如果這個陳述確實是正確的,也主要是因為一些人從來沒有真正地花時間進行范例轉換并學習基礎的OO概念。
第二版的新內容
正如我常說的,我認為第一版主要是一本概念性的圖書。盡管第二版仍然堅持這個目標,但我還添加了若干應用主題,它們非常適合于面向對象的概念。這些應用包括以下幾點:
對象建模
對象持久性
XML
對象和Internet
企業
設計模式
從本質上說,講述這些主題的章節仍然是概念性的。然而,其中一些章節包括Java代碼,它們展示了如何實現這些概念。
讀者對象
本書是對基本的OO概念的總體介紹。適合的讀者包括設計人員、開發人員、項目管理人員以及任何想要總體了解面向對象的人。閱讀這本書將為閱讀其他講述更高級的OO主題的圖書打下堅實的基礎。
在這些主題更高級的書中,我最喜歡的圖書之一仍然是Stephen Gilbert和Bill McCarty所著的《Object-Oriented Design in Java》。我確實非常喜歡該書中的方法,并且在我教過的OO概念課堂上,將它用作教科書。在本書中我經常引用到《Object-Oriented Design in Java》,并且推薦您學完本書之后學習這本書。
其他我認為非常有用的圖書包括Scott Meyers所著的《Effective C++》、Stephen R. Schach所著的《Classical and Object-Oriented Software Engineering》、Bruce Eckel所著的《Thinking in C++》、Martin Fowler所著的《UML Distilled》以及Peter Coad和Mark Mayfield所著的《Java Design》。
在公司和學校向程序員講授介紹性的Java時,我很快就發現其中很多程序員很容易掌握Java語法。然而,他們很難了解該語言的OO本質。
本書的范圍
到目前為止很明顯,我堅信在跨入某個程序設計語言或者建模語言之前先熟悉面向對象的思考過程是很有益的。本書處處都是Java代碼例子以及UML圖,然而,您不必了解Java或者UML來閱讀它們。既然我說過先學習概念,為什么這里有這么多Java代碼和UML圖呢?首先,用它們來闡述OO概念都很棒。其次,它們對OO過程都很重要,并且我們應該對其進行介紹性的講解。重點并沒有放在Java或者UML上,而是使用它們作為輔助工具,以了解基本概念。
本書中的Java例子說明循環和函數之類的概念。然而,理解這些代碼本身并不是理解這些概念的先決條件,手頭擁有講述Java語法的書可能會有所幫助。
強調一下,本書不講述Java或者UML,講述它們都需要幾卷的篇幅。我希望本書能激起您學習其他OO主題(如OO分析、面向對象的設計以及OO程序設計)的愿望。
本書約定
本書使用以下排版約定:
代碼行、命令、語句以及其他與代碼相關的術語是以等寬字體(monospace)出現的。
代表實際應該鍵入的內容的占位符是以斜體等寬字體(italic monospace)出現的。應該鍵入的文本是以粗體等寬字體(bold monospace)出現的。
貫穿本書,有一些特殊的說明性內容,例如:
注意
注意顯示關于該討論的有趣信息,它是一點見解或者對新技術的啟示。
提示
提示向您提供建議或者展示完成任務的更容易的方式。
警告
警告提醒您某個可能的問題并向您提供如何避免該問題的建議。
本書中使用的源代碼
您可以從http://www.samspublishing.com下載本書中討論到的所有源代碼和例子。在“search”窗口,簡單地鍵入本書的ISBN(0672326116),按下Enter健,然后就出現帶有指向源代碼鏈接的頁面。
前言
致謝
第1章 面向對象的概念簡介 1
1.1 面向過程程序設計和OO程序設計 1
1.2 從面向過程開發轉向面向對象開發 4
1.2.1 面向過程的程序設計 4
1.2.2 OO程序設計 4
1.3 對象的確切定義 5
1.3.1 對象數據 5
1.3.2 對象行為 5
1.4 類的確切定義 8
1.4.1 類是對象模板 8
1.4.2 屬性 9
1.4.3 方法 9
1.4.4 消息 10
1.5 使用UML構建類圖 10
1.6 封裝 10
1.6.1 接口 11
1.6.2 實現 11
1.6.3 接口/實現范例的現實例子 11
1.6.4 接口/實現范例的Java例子 12
1.7 繼承 13
1.7.1 超類和子類 14
1.7.2 抽象 14
1.7.3 Is-a關系 15
1.8 多態 16
1.9 組合 18
1.10 小結 18
第2章 如何以對象的方式進行思考 20
2.1 了解接口和實現的區別 20
2.1.1 接口 22
2.1.2 實現 22
2.1.3 接口/實現的例子 22
2.2 在設計接口時使用抽象的思想 26
2.3 盡可能向用戶提供最少的接口 27
2.3.1 確定用戶 28
2.3.2 對象行為 28
2.3.3 環境限制 28
2.3.4 確定公共接口 29
2.3.5 確定實現 29
2.4 小結 30
2.5 參考文獻 30
第3章 高級的面向對象概念 31
3.1 構造函數 31
3.1.1 何時調用構造函數 31
3.1.2 構造函數的內部機理 31
3.1.3 默認構造函數 32
3.1.4 使用多個構造函數 32
3.1.5 設計構造函數 36
3.2 錯誤處理 36
3.2.1 忽略問題 36
3.2.2 檢測問題并異常終止應用程序 36
3.2.3 檢測問題并且嘗試解決問題 37
3.2.4 拋出異常 37
3.3 作用域的概念 39
3.3.1 局部屬性 39
3.3.2 對象屬性 40
3.3.3 類的屬性 42
3.4 運算符重載 43
3.5 多重繼承 43
3.6 對象操作 44
3.7 小結 45
3.8 參考文獻 45
第4章 類的剖析 46
4.1 類的名稱 46
4.2 注釋 47
4.3 屬性 48
4.4 構造函數 49
4.5 訪問函數 50
4.6 公共接口方法 52
4.7 私有實現方法 53
4.8 小結 53
4.9 參考文獻 53
第5章 類設計指導 54
5.1 標識公共接口 54
5.2 設計健壯的構造函數(或析構函數) 56
5.3 在類中設計錯誤處理 57
5.3.1 用文檔說明類以及使用注釋 57
5.3.2 帶著協作的意向創建對象 57
5.4 在設計時考慮到重用 58
5.5 設計時考慮擴展 58
5.5.1 使名稱形象化 59
5.5.2 提取不能移植的代碼 59
5.5.3 提供復制和比較對象的方法 59
5.5.4 盡可能使作用域最小 60
5.5.5 類應該對自己負責 60
5.6 在設計時考慮可維護性 61
5.6.1 使用迭代 62
5.6.2 測試接口 62
5.7 使用對象持久性 64
5.8 小結 65
5.9 參考文獻 65
第6章 使用對象進行設計 66
6.1 設計指導 66
6.1.1 進行正確的分析 69
6.1.2 制作工作陳述 69
6.1.3 收集需求 69
6.1.4 開發用戶接口原型 70
6.1.5 確定類 70
6.1.6 確定每一個類的職責 70
6.1.7 確定類和類之間如何相互作用 70
6.1.8 創建類模型來描述系統 70
6.2 案例分析:Blackjack(撲克牌中的二十一點)例子 71
6.2.1 使用CRC卡片 72
6.2.2 確定Blackjack的類 73
6.2.3 確定類的職責 76
6.2.4 UML用例:確定協作 80
6.2.5 制作CRC卡片的第一步 83
6.2.6 UML類圖:對象模型 85
6.2.7 為用戶接口設計原型 86
6.3 小結 86
6.4 參考文獻 86
第7章 掌握繼承和組合 87
7.1 繼承 88
7.1.1 泛化和特化 90
7.1.2 設計決策 90
7.2 組合 92
7.3 為什么封裝對OO很重要 94
7.3.1 繼承是如何削弱封裝的 95
7.3.2 一個詳細的多態例子 96
7.3.3 對象的職責 97
7.4 小結 100
7.5 參考文獻 100
第8章 框架和重用:利用接口和抽象類進行設計 101
8.1 代碼的重用 101
8.2 什么是框架 101
8.3 什么是契約 103
8.3.1 抽象類 104
8.3.2 接口 105
8.3.3 嘗試一起使用它們 107
8.3.4 編譯器證據 109
8.3.5 制定契約 109
8.3.6 系統插入點 111
8.4 一個電子商務的例子 111
8.4.1 電子商務的問題 111
8.4.2 非重用方法 112
8.4.3 電子商務解決方案 114
8.4.4 UML對象模型 114
8.5 小結 117
8.6 參考文獻 117
第9章 創建對象 118
9.1 組合關系 119
9.2 協調地創建 119
9.3 組合的類型 121
9.3.1 聚合 121
9.3.2 關聯 122
9.3.3 同時使用聚合和關聯 123
9.4 避免依賴性 123
9.5 基數(Cardinality) 124
9.5.1 多個對象的關聯 126
9.5.2 可選的關聯 127
9.6 同時使用這些關系:一個例子 127
9.7 小結 128
9.8 參考文獻 128
第10章 使用UML創建對象模型 129
10.1 什么是UML 129
10.2 類圖的結構 130
10.3 屬性和方法 131
10.3.1 屬性 131
10.3.2 方法 131
10.4 訪問標號 132
10.5 繼承 132
10.6 接口 134
10.7 組合 134
10.7.1 聚合 134
10.7.2 關聯 135
10.8 基數 137
10.9 小結 138
10.10 參考文獻 138
第11章 持久對象:串行化和關系數據庫 139
11.1 持久對象的基礎 139
11.2 把對象保存到“扁平”文件中 140
11.2.1 串行化某個文件 141
11.2.2 回顧實現和接口 142
11.3 寫入關系數據庫中 143
11.4 加載驅動程序 146
11.4.1 建立連接 147
11.4.2 SQL語句 147
11.5 小結 150
11.6 參考文獻 150
第12章 對象和XML:可移植的數據 151
12.1 可移植代碼 151
12.2 可擴展標記語言(XML) 152
12.3 XML與HTML 153
12.4 XML和面向對象語言 153
12.5 在兩個公司之間共享數據 154
12.6 用文檔類型定義檢驗文檔 155
12.7 把DTD集成到XML文檔中 156
12.8 使用層疊式樣式表 161
12.9 小結 163
12.10 參考文獻 163
第13章 對象和Internet 164
13.1 基于對象的腳本編寫語言 164
13.2 一個JavaScript驗證的例子 166
13.3 Java Applets是對象 170
13.4 JavaBeans是對象 172
13.5 小結 174
13.6 參考文獻 174
第14章 分布式對象和企業 175
14.1 公共對象請求代理體系結構(CORBA) 176
14.2 Java的遠程方法調用(RMI) 179
14.3 Java的Enterprise JavaBeans 180
14.4 企業JavaBeans的類型 182
14.4.1 會話beans 183
14.4.2 實體beans 183
14.5 小結 184
14.6 參考文獻 184
第15章 設計模式 185
15.1 為什么需要設計模式 185
15.2 Smalltalk的模型/視圖/控制器 186
15.3 設計模式的類型 188
15.3.1 創建模式 188
15.3.2 結構模式 191
15.3.3 行為模式 194
15.4 反模式 195
15.5 小結 196
15.6 參考文獻 196
- Java面向對象程序設計 [主編 姜春磊 陳虹潔]
- 面向對象程序設計 [主編 張勇 張平華 趙小龍]
- Java面向對象程序設計(微課版) [主編 謝先偉 王海洋]
- Java面向對象程序設計 [主編 張立敏 鄒海濤]
- 火球-UML大戰需求分析(第二版) [張傳波 著]
- UML系統建模及系統分析與設計(第二版) [王欣 張毅 編著]
- Java面向對象編程 [肖睿 李志勇]
- Java面向對象程序設計 [主編 肖奎 姚競]
- Java面向對象程序設計 [主編 陳占偉]
- UML系統建模及系統分析與設計 [王欣 張毅 編著]
- C++面向對象程序設計習題解答及上機指導 [李素若 杜華兵]
- C++面向對象程序設計 [李素若 杜華兵]
- 面向對象程序設計(C#) [李法平 芮素娟]
- 大象——Thinking in UML(第二版) [譚云杰 著]
- Java面向對象程序設計實訓與考試指導(第二版) [主編 趙生慧]
- UML面向對象建模基礎 [徐鋒 陳暄 等編著]
- C++面向對象程序設計(第二版) [曹靜 主編]
- Java面向對象程序設計(第二版) [趙生慧 主 編 ]
- C++面向對象程序設計 [栗青生 王愛民]
- C++面向對象程序設計 [曹靜 主編]