本書(shū)以圖配文的形式,直觀易懂地介紹了面向?qū)ο蟮娜布捌浒母黜?xiàng)技術(shù),包括面向?qū)ο缶幊獭⒖蚣、設(shè)計(jì)模式、UML、建模、面向?qū)ο笤O(shè)計(jì)和敏捷開(kāi)發(fā)方法等。對(duì)于各項(xiàng)技術(shù)是如何使用的(How),書(shū)中只進(jìn)行簡(jiǎn)要的說(shuō)明,而重點(diǎn)介紹這些技術(shù)是什么(What),以及為什么需要這些技術(shù)(Why)。另外,“編程往事”專(zhuān)欄介紹了作者年輕時(shí)的一些經(jīng)歷;“對(duì)象的另一面”專(zhuān)欄以與正文不同的視角講解面向?qū)ο筮@一概念普及的背景和原因,通俗有趣;“當(dāng)今的OOP”專(zhuān)欄介紹了Java、Python、Ruby、JavaScript等當(dāng)今流行的編程語(yǔ)言的最新動(dòng)向。
1.本書(shū)為熱門(mén)計(jì)算機(jī)圖書(shū)《程序是怎樣跑起來(lái)的》《網(wǎng)絡(luò)是怎樣連接的》同系列作品
2.圖文結(jié)合,深入講解面向?qū)ο蟮姆椒矫婷,將文字具象?3.語(yǔ)言通俗,內(nèi)容豐富,計(jì)算機(jī)小白也能看得懂
4.特設(shè)“編程往事”“對(duì)象的另一面”專(zhuān)欄,了解更多編程內(nèi)容,讓學(xué)習(xí)更加生動(dòng)有趣
5.新增“當(dāng)今的OOP”專(zhuān)欄,介紹Java、Python等當(dāng)今流行的編程語(yǔ)言,與編程熱門(mén)接軌,更快掌握編程新動(dòng)向
平澤章(作者)
從使用大型機(jī)的金融系統(tǒng)到使用微機(jī)的控制系統(tǒng),系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)豐富。曾從事技術(shù)咨詢(xún)工作,2001年至今就職于日本UL System公司。著有《UML建模教程》,是Working Effectively With Legace Code、Refactoring:Improving the Design of Existing Code日文版譯者之一。
侯振龍(譯者)
管理科學(xué)與工程專(zhuān)業(yè)碩士,日語(yǔ)一級(jí),軟件開(kāi)發(fā)工程師,具有十年以上對(duì)日軟件開(kāi)發(fā)經(jīng)驗(yàn),現(xiàn)就職于某日本獨(dú)資企業(yè)。
第 1章 面向?qū)ο螅鹤屲浖_(kāi)發(fā)變輕松的技術(shù) 1
1.1 面向?qū)ο笫擒浖_(kāi)發(fā)的綜合技術(shù) 3
1.2 以對(duì)象為中心編寫(xiě)軟件的開(kāi)發(fā)方法 4
1.3 從編程語(yǔ)言演化為綜合技術(shù) 4
1.4 面向?qū)ο箅y的原因 5
1.5 原因之一:OOP結(jié)構(gòu)復(fù)雜 6
1.6 原因之二:濫用比喻引起混亂 6
1.7 原因之三:面向?qū)ο蟮母拍钍浅橄蟮?7
1.8 重點(diǎn)講解“是什么”和“為什么” 9
1.9 本書(shū)的構(gòu)成 9
專(zhuān)欄 當(dāng)?shù)腛OP
易上手、有深度的Python 11
第 2章 似是而非:面向?qū)ο笈c現(xiàn)實(shí)世界 13
2.1 對(duì)照現(xiàn)實(shí)世界介紹面向?qū)ο?15
2.2 類(lèi)指類(lèi)型,實(shí)例指具體的物 15
2.3 多態(tài)讓消息的發(fā)送方法變得通用 17
2.4 繼承對(duì)共同點(diǎn)和不同點(diǎn)進(jìn)行系統(tǒng)的分類(lèi)和整理 20
2.5 使用比喻進(jìn)行講解容易造成混亂 22
2.6 面向?qū)ο蠛同F(xiàn)實(shí)世界是似是而非的 22
2.7 明確定義為編程結(jié)構(gòu) 23
2.8 軟件并不會(huì)直接表示現(xiàn)實(shí)世界 24
2.9 與現(xiàn)實(shí)世界的相似增大了可能性 24
專(zhuān)欄 對(duì)象的另一面
成為潮詞的面向?qū)ο?25
第3章 理解OOP:編程語(yǔ)言的歷史 27
3.1 OOP的出現(xiàn)具有必然性 29
3.2 最初使用機(jī)器語(yǔ)言編寫(xiě)程序 29
3.3 編程語(yǔ)言的第 一步是匯編語(yǔ)言 30
3.4 高級(jí)語(yǔ)言使程序更加接近人類(lèi)語(yǔ)言 31
3.5 重視易懂性的結(jié)構(gòu)化編程 32
3.6 提高子程序的獨(dú)立性,強(qiáng)化可維護(hù)性 33
3.7 實(shí)現(xiàn)無(wú) GOTO編程的結(jié)構(gòu)化語(yǔ)言 36
3.8 進(jìn)化方向演變?yōu)橹匾暱删S護(hù)性和可重用性 37
3.9 沒(méi)有解決全局變量問(wèn)題和可重用性差的問(wèn)題 39
專(zhuān)欄 編程往事
COBOL編譯器的“雞和蛋”問(wèn)題 43
第4章 面向?qū)ο缶幊碳夹g(shù):去除冗余、進(jìn)行整理 45
4.1 OOP具有結(jié)構(gòu)化語(yǔ)言所沒(méi)有的三種結(jié)構(gòu) 47
4.2 OOP的結(jié)構(gòu)會(huì)根據(jù)編程語(yǔ)言的不同而略有差異 49
4.3 三大要素之一:具有三種功能的類(lèi) 49
4.4 類(lèi)的功能之一:匯總 50
4.5 類(lèi)的功能之二:隱藏 53
4.6 類(lèi)的功能之三:創(chuàng)建很多個(gè) 56
4.7 實(shí)例變量是限定訪問(wèn)范圍的全局變量 59
4.8 三大要素之二:實(shí)現(xiàn)調(diào)用端公用化的多態(tài) 61
4.9 三大要素之三:去除類(lèi)的重復(fù)定義的繼承 65
4.10 對(duì)三大要素的總結(jié) 67
4.11 通過(guò)嵌入類(lèi)型使程序員的工作變輕松 68
4.12 將類(lèi)作為類(lèi)型使用 69
4.13 編程語(yǔ)言“退化”了嗎 72
4.14 更先進(jìn)的OOP結(jié)構(gòu) 72
4.15 進(jìn)化的OOP結(jié)構(gòu)之一:包 72
4.16 進(jìn)化的OOP結(jié)構(gòu)之二:異常 74
4.17 進(jìn)化的OOP結(jié)構(gòu)之三:垃圾回收 76
4.18 對(duì)進(jìn)化的 OOP結(jié)構(gòu)的總結(jié) 78
4.19 決心決定OOP的生死 79
專(zhuān)欄 當(dāng)今的OOP
從網(wǎng)頁(yè)工具進(jìn)化而來(lái)的PHP 81
第5章 理解內(nèi)存結(jié)構(gòu):程序員的基本素養(yǎng) 83
5.1 理解OOP程序的運(yùn)行機(jī)制 85
5.2 兩種運(yùn)行方式:編譯器與解釋器 85
5.3 解釋、運(yùn)行中間代碼的虛擬機(jī) 88
5.4 CPU 同時(shí)運(yùn)行多個(gè)線程 89
5.5 使用靜態(tài)區(qū)、堆區(qū)和棧區(qū)進(jìn)行管理 91
5.6 OOP 的特征在于內(nèi)存的用法 94
5.7 每個(gè)類(lèi)只加載一個(gè)類(lèi)信息 95
5.8 每次創(chuàng)建實(shí)例都會(huì)使用堆區(qū) 96
5.9 在變量中存儲(chǔ)實(shí)例的指針 97
5.10 復(fù)制存儲(chǔ)實(shí)例的變量時(shí)要多加注意 99
5.11 多態(tài)讓不同的類(lèi)看起來(lái)一樣 103
5.12 根據(jù)繼承的信息類(lèi)型的不同,內(nèi)存配置也不同 105
5.13 孤立的實(shí)例由垃圾回收處理 107
專(zhuān)欄 編程往事
OOP中dump看起來(lái)很費(fèi)勁? 113
第6章 重用:OOP帶來(lái)的軟件重用和思想重用 115
6.1 OOP的優(yōu)秀結(jié)構(gòu)能夠促進(jìn)重用 117
6.2 類(lèi)庫(kù)是OOP的軟件構(gòu)件群 118
6.3 標(biāo)準(zhǔn)類(lèi)庫(kù)是語(yǔ)言規(guī)范的一部分 120
6.4 將Object類(lèi)作為祖先類(lèi)的繼承結(jié)構(gòu) 120
6.5 框架存在各種含義 121
6.6 框架是應(yīng)用程序的半成品 122
6.7 世界上可重用的軟件構(gòu)件群 124
6.8 獨(dú)立性較高的構(gòu)件:組件 124
6.9 設(shè)計(jì)模式是優(yōu)秀的設(shè)計(jì)思想集 125
6.10 設(shè)計(jì)模式是類(lèi)庫(kù)探險(xiǎn)的路標(biāo) 128
6.11 擴(kuò)展到各個(gè)領(lǐng)域的思想的重用 129
6.12 通過(guò)類(lèi)庫(kù)和模式發(fā)現(xiàn)的重用的好處 130
專(zhuān)欄 當(dāng)今的OOP
因Rails框架而走紅的Ruby 133
第7章 化為通用的歸納整理法的面向?qū)ο?135
7.1 軟件不會(huì)直接表示現(xiàn)實(shí)世界 137
7.2 應(yīng)用于集合論和職責(zé)分配 139
7.3 在上游工程中化為通用的歸納整理法 142
7.4 兩種含義引起混亂 142
7.5 分為編程技術(shù)和歸納整理法進(jìn)行思考 143
7.6 為何化為了通用的歸納整理法 144
專(zhuān)欄 對(duì)象的另一面
語(yǔ)言在先,還是概念在先? 145
第8章 UML:查看無(wú)形軟件的工具 147
8.1 UML是表示軟件功能和結(jié)構(gòu)的圖形的繪制方法 149
8.2 UML有13種圖形 150
8.3 UML的使用方法大致分為三種 152
8.4 UML的使用方法之一:表示程序結(jié)構(gòu)和動(dòng)作 153
8.5 類(lèi)圖表示OOP程序的結(jié)構(gòu) 153
8.6 使用時(shí)序圖和通信圖表示動(dòng)作 156
8.7 UML的使用方法之二:表示歸納整理法的成果 158
8.8 使用類(lèi)圖表示根據(jù)集合論進(jìn)行整理的結(jié)果 159
8.9 表示職責(zé)分配的時(shí)序圖和通信圖 162
8.10 UML的使用方法之三:表示非面向?qū)ο蟮男畔?165
8.11 使用用例圖表示交給計(jì)算機(jī)的工作 165
8.12 使用活動(dòng)圖表示工作流程 166
8.13 使用狀態(tài)機(jī)圖表示狀態(tài)的變化 167
8.14 彌補(bǔ)自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言缺點(diǎn)的“語(yǔ)言” 168
第9章 建模:填補(bǔ)現(xiàn)實(shí)世界和軟件之間的溝壑 173
9.1 現(xiàn)實(shí)世界和軟件之間存在溝壑 175
9.2 計(jì)算機(jī)擅長(zhǎng)固定工作和記憶工作 176
9.3 通過(guò)業(yè)務(wù)分析、需求定義和設(shè)計(jì)來(lái)填補(bǔ)溝壑 177
9.4 建模是順利推進(jìn)這三個(gè)階段的工作的技術(shù) 178
9.5 應(yīng)用程序不同,建模的內(nèi)容也不一樣 179
9.6 業(yè)務(wù)應(yīng)用程序記錄現(xiàn)實(shí)中的事情 180
9.7 對(duì)圖書(shū)館的借閱業(yè)務(wù)進(jìn)行建模 181
9.8 使用用例圖來(lái)表示圖書(shū)館業(yè)務(wù) 183
9.9 用概念模型表示圖書(shū)館系統(tǒng)的信息 185
9.10 在業(yè)務(wù)應(yīng)用程序中,數(shù)據(jù)結(jié)構(gòu)反映現(xiàn)實(shí)世界 186
9.11 嵌入式軟件替代現(xiàn)實(shí)世界的工作 188
9.12 嵌入式軟件中設(shè)備的研究開(kāi)發(fā)很重要 189
9.13 使用狀態(tài)機(jī)圖表示全自動(dòng)工作的情形 191
9.14 嵌入式軟件一直執(zhí)行單調(diào)的工作 192
9.15 建模蘊(yùn)含著軟件開(kāi)發(fā)的樂(lè)趣 192
第 10章 面向?qū)ο笤O(shè)計(jì):擬人化和職責(zé)分配 195
10.1 設(shè)計(jì)的目標(biāo)范圍很廣 197
10.2 相比運(yùn)行效率,現(xiàn)在更重視可維護(hù)性和可重用性 198
10.3 設(shè)計(jì)目標(biāo)之一:去除重復(fù) 199
10.4 設(shè)計(jì)目標(biāo)之二:提高構(gòu)件的獨(dú)立性 200
10.5 提高構(gòu)件獨(dú)立性的訣竅 202
10.6 設(shè)計(jì)目標(biāo)之三:避免依賴(lài)關(guān)系發(fā)生循環(huán) 203
10.7 面向?qū)ο笤O(shè)計(jì)的“感覺(jué)”是擬人化和職責(zé)分配 205
10.8 進(jìn)行了職責(zé)分配的軟件創(chuàng)建的奇妙世界 206
專(zhuān)欄 當(dāng)今的OOP
執(zhí)行時(shí)不受類(lèi)約束的JavaScript 210
第 11章衍生:敏捷開(kāi)發(fā) 213
11.1 僅靠技術(shù)和技術(shù)竅門(mén),軟件開(kāi)發(fā)并不會(huì)成功 215
11.2 系統(tǒng)地匯總了作業(yè)步驟和成果的開(kāi)發(fā)流程 216
11.3 限制修改的瀑布式開(kāi)發(fā)流程 216
11.4 瀑布式開(kāi)發(fā)流程的極限 217
11.5 靈活響應(yīng)變化的迭代式開(kāi)發(fā)流程 218
11.6 打破諸多限制的 XP 219
11.7 確定團(tuán)隊(duì)工作推進(jìn)方式的框架的Scrum 221
11.8 快速編寫(xiě)優(yōu)秀軟件的敏捷宣言 222
11.9 支持敏捷開(kāi)發(fā)的實(shí)踐 223
11.10 先編寫(xiě)測(cè)試代碼,一邊運(yùn)行一邊開(kāi)發(fā)的測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 224
11.11 在程序完成后改善運(yùn)行代碼的重構(gòu) 225
11.12 經(jīng)常進(jìn)行系統(tǒng)整合的持續(xù)集成 227
11.13 實(shí)踐敏捷宣言理念的方法 227
11.14 敏捷開(kāi)發(fā)源于面向?qū)ο?228
11.15 不存在最好的開(kāi)發(fā)流程 229
專(zhuān)欄 編程往事
過(guò)去不被允許的XP 233
第 12章 熟練掌握面向?qū)ο?235
12.1 面向?qū)ο筮@一強(qiáng)大概念是原動(dòng)力 237
12.2 時(shí)代追上了面向?qū)ο?238
12.3 面向?qū)ο蟮臒岢辈粫?huì)結(jié)束 239
12.4 將面向?qū)ο笞鳛楣ぞ呤炀氄莆?240
12.5 享受需要?jiǎng)幽X的軟件開(kāi)發(fā) 241
附章 函數(shù)式語(yǔ)言是怎樣工作的 243
A.1 面向?qū)ο缶幊陶Z(yǔ)言和函數(shù)式語(yǔ)言混合占據(jù)主流的時(shí)代 245
A.2 函數(shù)式語(yǔ)言的7個(gè)特征 246
A.3 特征1:使用函數(shù)編寫(xiě)程序 246
A.4 特征2:所有表達(dá)式都返回值 248
A.5 特征3:將函數(shù)作為值進(jìn)行處理 252
A.6 特征4:可以靈活組合函數(shù)和參數(shù) 254
A.7 特征5:沒(méi)有副作用 259
A.8 特征6:使用模式匹配和遞歸來(lái)編寫(xiě)循環(huán)處理 264
A.9 特征7:編譯器自動(dòng)進(jìn)行類(lèi)型推斷 268
A.10 對(duì)7個(gè)特征的總結(jié) 272
A.11 函數(shù)式語(yǔ)言的分類(lèi) 273
A.12 函數(shù)式語(yǔ)言的優(yōu)勢(shì) 274
A.13 函數(shù)式語(yǔ)言的課題 275
A.14 函數(shù)式語(yǔ)言和面向?qū)ο蟮年P(guān)系 275
A.15 掌握函數(shù)式編程 277
專(zhuān)欄 當(dāng)今的OOP
打造了函數(shù)式語(yǔ)言的箱庭的Java 279
后記 281
致謝 282