本書是一部的面向對象技術著作。書中結合代碼示例生動透徹地講述了面向對象思想的精髓,讓讀者真正學會以對象方行思考。本書共15章,在結構上可以分為兩部分:第壹部括第1~10章,探討面向對象的基本概念,比如封裝、多態(tài)、繼承等;第二部括第11~15章,專注于將這些概念應用于一些通用的面向對象技術中,并結合了一些實用的應用程序。
黃博文,花名延枚,前Thought Works高級咨詢師,現(xiàn)集團持續(xù)交付技術專家,目前專注于阿里云云臺的設計和開發(fā)。
馮,花名煙嶼,曾任云臺高級開發(fā)工程師,精通Java、Python、JavaScript等語言,具有大型互聯(lián)網(wǎng)企業(yè)自動發(fā)布和部署以及持續(xù)集成等經(jīng)驗。目前專注于大數(shù)據(jù)開發(fā),以及基于大數(shù)據(jù)的數(shù)據(jù)服務和產(chǎn)品的設計、開發(fā)等。對大數(shù)據(jù)背景下數(shù)據(jù)服務的保障以及可視化數(shù)據(jù)ETL有興趣。
張軻,計算機碩士,擁有十多年IT行業(yè)工作經(jīng)驗,曾就職于Autodesk、SAP等公司,從事軟件工程師、技術顧問、項目經(jīng)理等多種職位。
馬特·魏斯費爾德(Matt Weisfeld),大學教授、軟件開發(fā)工程師,也是一位作家。他在信息技術領域擁有20年的經(jīng)驗,之入大學任教。他先后從事過軟件開發(fā)工程師、企業(yè)家以及教授等工作。Weisfeld擁有計算機科學碩士學位以及工商管理碩士學位。除本書外,Weisfeld還撰寫了其他兩本關于軟件開發(fā)的書籍,并在主要的計算機行業(yè)雜志和期刊上發(fā)表了多篇文章。他居住于美國俄亥俄州的克利夫蘭市。
譯者序
前言
致謝
關于作者
第1章 面向對象的概念簡介1
1.1 基本概念1
1.2 對象及系統(tǒng)2
1.3 過程式編程與面向對象編程對比4
1.4 由面向過程開發(fā)過渡到面向對象開發(fā)7
1.4.1 過程式編程7
1.4.2 面向對象編程8
1.5 什么是對象8
1.5.1 對象數(shù)據(jù)8
1.5.2 對象行為9
1.6 什么是類13
1.6.1 創(chuàng)建對象13
1.6.2 屬性15
1.6.3 方法15
1.6.4 消息15
1.7 使用類圖作為可視化工具16
1.8 封裝和數(shù)據(jù)隱藏16
1.8.1 接口17
1.8.2 實現(xiàn)18
1.8.3 接口/實現(xiàn)范式的一個真實示例18
1.8.4 接口/實現(xiàn)范式的模型19
1.9 繼承20
1.9.1 超類和子類21
1.9.2 抽象21
1.9.3 is-a關系23
1.10 多態(tài)性24
1.11 組合27
1.11.1 抽象27
1.11.2 has-a關系28
1.12 本章小結28
第2章 如何以對象的方行思考29
2.1 清楚接口和實現(xiàn)之間的區(qū)別30
2.1.1 接口32
2.1.2 實現(xiàn)32
2.1.3 一個接口/實現(xiàn)示例33
2.2 使用抽象思維設計接口37
2.3 盡可能提供化的用戶接口39
2.3.1 確定用戶39
2.3.2 對象行為40
2.3.3 環(huán)境約束40
2.3.4 識別公共接口40
2.3.5 識別實現(xiàn)41
2.4 本章小結42
2.5 參考文獻42
第3章 更多面向對象概念43
3.1 構造函數(shù)43
3.1.1 什么是構造函數(shù)調用44
3.1.2 構造函數(shù)含什么44
3.1.3 默認構造函數(shù)45
3.1.4 使用多個構造函數(shù)46
3.1.5 設計構造函數(shù)49
3.2 錯誤處理50
3.2.1 忽略問題50
3.2.2 檢查問題并中止應用程序50
3.2.3 檢查問題并試圖恢復51
3.2.4 拋出異常51
3.3 作用域的重要性54
3.3.1 局部屬性?54
3.3.2 對象屬性55
3.3.3 類屬性57
3.4 操作符重載58
3.5 多重繼承59
3.6 對象操作60
3.7 本章小結62
3.8 參考文獻62
第4章 類的剖析63
4.1 類名63
4.2 注釋65
4.3 屬性65
4.4 構造函數(shù)67
4.5 訪問器69
4.6 公共接口方法71
4.7 私有實現(xiàn)方法72
4.8 本章小結72
4.9 參考文獻73
第5章 類設計指導75
5.1 對現(xiàn)實世界系統(tǒng)建模75
5.2 識別公共接口76
5.2.1 化公共接口77
5.2.2 隱藏實現(xiàn)78
5.3 設計健壯的構造函數(shù)(以及析構函數(shù))78
5.4 在類中設計錯誤處理79
5.4.1 記錄類并使用注釋80
5.4.2 構建可以合作的對象80
5.5 設計時請考慮重用81
5.6 設計時請考慮可擴展性81
5.6.1 保持命名具有描述性82
5.6.2 抽象不可移植的代碼82
5.6.3 提供一種方式來和比較對象83
5.6.4 保持盡可能小的作用域83
5.7 設計時請考慮可維護性84
5.7.1 在開發(fā)過程中使用迭代85
5.7.2 測試接口85
5.8 使用對象持久化87
5.9 本章小結89
5.10 參考文獻89
第6章 使用對行設計91
6.1 設計指導91
6.1.1行正確的分析95
6.1.2 編寫工作陳述文檔95
6.1.3 收集需求95
6.1.4 開發(fā)系統(tǒng)原型96
6.1.5 識別類96
6.1.6 確定每個類的職責96
6.1.7 確定類之間如何協(xié)作96
6.1.8 創(chuàng)建類模型來描述系統(tǒng)97
6.1.9 在代碼中創(chuàng)建用戶接口原型97
6.2 對裝97
6.2.1 結構化代碼98
6.2.2裝結構化代碼99
6.2.3裝不可移植的代碼101
6.2.4裝已有類102
6.3 本章小結103
6.4 參考文獻103
第7章 精通繼承和組合105
7.1 重用對象105
7.2 繼承107
7.2.1 泛化和特化109
7.2.2 設計決策110
7.3 組合112
7.4 為什么封裝是面向對象的本質115
7.4.1 繼承如何減弱封裝115
7.4.2 關于多態(tài)性的一個具體例子118
7.4.3 對象職責118
7.4.4 抽象類、虛方法和協(xié)議122
7.5 本章小結123
7.6 參考文獻124
第8章 框架和重用:使用接口和抽象行設計125
8.1 代碼:重用還是不重用125
8.2 什么是框架126
8.3 什么是契約128
8.3.1 抽象類129
8.3.2 接口131
8.3.3 綜合運用133
8.3.4 編譯器佐證136
8.3.5 創(chuàng)建契約137
8.3.6 系統(tǒng)插件139
8.4 一個電子商務示例139
8.4.1 一個電子商務問題140
8.4.2 非重用方式141
8.4.3 電子商務解決方案143
8.4.4 UML對象模型143
8.5 本章小結147
8.6 參考文獻148
第9章 創(chuàng)建對象及面向對象設計149
9.1 組合關系150
9.2 分階段構建151
9.3 組合類型153
9.3.1 聚合153
9.3.2 聯(lián)合154
9.3.3 同時使用聯(lián)合和聚合155
9.4 避免依賴156
9.5 基數(shù)157
9.5.1 多個對象聯(lián)合158
9.5.2 可選的聯(lián)合160
9.6 一個綜合性示例160
9.7 本章小結161
9.8 參考文獻162
第10章 設計模式163
10.1 為什么使用設計模式164
10.2 Smalltalk的模型/視圖/控制器165
10.3 設計模式類型167
10.3.1 創(chuàng)建型模式?167
10.3.2 結構型模式171
10.3.3 行為型模式174
10.4 反模式175
10.5 本章小結176
10.6 參考文獻177
第11章 避免依賴和高度耦合的類179
11.1 繼承、組合和依賴注入181
11.1.1 繼承182
11.1.2 組合183
11.1.3 依賴注入186
11.2 本章小結189
11.3 參考文獻189
第12章 面向對象設計的SOLID原則191
12.1 面向對象設計的SOLID原則概述192
12.1.1 SRP:單一職責原則192
12.1.2 OCP:開閉原則196
12.1.3 LSP:里氏替換原則198
12.1.4 ISP:接口隔離原則201
12.1.5 DIP:依賴倒置原則202
12.2 本章小結208
12.3 參考文獻208