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