軟件設計:Java語言實踐 Introduction to Software Design with Java

Robillard, Martin P. 譯者:喬海燕//郭佳怡//傅禹澤//鄒雨桐

買這商品的人也買了...

商品描述

本書使用Java語言介紹面向對象的軟件設計原則。
內容包括類型與接口、封裝、繼承、設計模式、複合、單元測試和函數式設計。
作者用貫穿全書的三個應用實例——掃雷遊戲、單人紙牌遊戲和JetUML,
詳細介紹了各種設計決策的應用場景。
本書適合具有初步Java程序設計知識並希望進一步學習軟件設計的讀者閱讀,
可作為軟件設計本科生的教材,也可供其他程序員參考。

作者簡介

Martin P. Robillard

是麥吉爾大學的計算機科學系教授。
他從2005年開始教授Java軟件設計,並擁有20多年的Java程序設計經驗。
他目前的研究重點是與軟件演化、體系結構和設計以及軟件重用相關的問題。
Martin是第20屆ACM軟件工程基礎國際研討會(FSE 2012)和第39屆ACM/IEEE軟件工程國際會議(ICSE 2017)的項目聯合主席。

目錄大綱

出版者的話
譯者序
前言
第1章緒論1
1.1定義軟件設計3
1.2軟件開發過程中的設計5
1.3獲取設計知識6
1.4共享設計技術8
1.4.1設計模式8
1.4.2設計反模式10
小結10
延伸閱讀11

第2章封裝12
2.1封裝與信息隱藏12
2.2將抽象編碼為類型13
2.3作用域與可見性限制16
2.4對像圖18
2.5逃逸引用20
2.5.1返回指向內部對象的引用21
2.5.2在內部存儲外部引用22
2.5.3通過共享結構洩露引用22
2.6不可變性23
2.7提供內部數據25
2.7.1擴展接口25
2.7.2返回副本26
2.7.3高級機制27
2.8契約式設計27
小結30
代碼探索30
延伸閱讀32

第3章類型與接口33
3.1行為與實現解耦合33
3.2指定接口的行為36
3.3類圖38
3.4函數對象40
3.5迭代器43
3.6 ITERATOR設計模式45
3.7 STRATEGY設計模式46
3.8接口分離原則47
小結50
代碼探索50
延伸閱讀52

第4章對象狀態53
4.1軟件系統的靜態和動態視圖53
4.2定義對象狀態54
4.3狀態圖55
4.4設計對像生命週期57
4.4.1無效和無用的狀態58
4.4.2不必要的狀態信息58
4.5可空性59
4.5.1無須對不存在的值建模60
4.5.2對不存在的值建模61
4.5.3可選值類型62
4.5.4 NULL OBJECT設計模式63
4.6終極域和變量64
4.7對象身份、相等和唯一66
4.8 FLYWEIGHT設計模式68
4.9 SINGLETON設計模式71
4.10嵌套類的對象72
4.10.1內部類72
4.10.2匿名類74
小結75
代碼探索76
延伸閱讀77

第5章單元測試78
5.1單元測試簡介78
5.2 JUnit單元測試框架基礎81
5.3測試代碼的組織82
5.4元程序設計83
5.4.1內省84
5.4.2程序的操作86
5.4.3程序元數據87
5.5測試構建88
5.6測試和異常條件91
5.7封裝與單元測試93
5.8樁測試95
5.9測試覆蓋96
5.9.1語句覆蓋98
5.9.2分支覆蓋98
5.9.3路徑覆蓋99
小結99
代碼探索100
延伸閱讀101

第6章複合102
6.1複合與聚合102
6.2 COMPOSITE設計模式105
6.3時序圖109
6.4 DECORATOR設計模式112
6.5 COMPOSITE與DECORATOR的結合116
6.6多態對象複製118
6.6.1聲明實現Cloneable接口119
6.6.2重寫Object .clone()方法120
6.6.3調用super.clone()120
6.6.4捕獲CloneNotSupported-Exception121
6.6.5把clone()加入接口122
6.7 PROTOTYPE設計模式123
6.8 COMMAND設計模式124
6.9迪米特法則127
小結128
代碼探索129
延伸閱讀131

第7章繼承132
7.1繼承的實例132
7.2繼承和子類134
7.2.1向下類型轉換135
7.2.2單根的類層次結構136
7.3繼承域137
7.4繼承方法139
註解重寫方法143
7.5重載方法143
7.6繼承與復合145
7.7抽象類147
7.8重溫DECORATOR設計模式149
7.9 TEMPLATE METHOD設計模式151
7.9.1終極方法與終極類152
7.9.2抽象方法153
7.9.3模式總結154
7.10正確使用繼承155
7.10.1限制基類客戶端的行為155
7.10.2不適合作子類型的子類158
小結159
代碼探索159
延伸閱讀161

第8章控制流反轉162
8.1使用控制流反轉的動機162
8.2模型–視圖–控制器分解164
8.3 OBSERVER設計模式165
8.3.1模型和觀察者的連接165
8.3.2模型和觀察者間的控制流166
8.3.3模型和觀察者間的數據流168
8.3.4事件驅動程序設計170
8.3.5小結172
8.4應用OBSERVER設計模式173
8.5圖形用戶界面開發導論177
8.6圖形用戶界面組件圖178
8.6.1用戶體驗視角178
8.6.2邏輯視角179
8.6.3源代碼視角179
8.6.4運行時視角181
8.6.5定義對像圖181
8.7事件處理183
8.8 VISITOR設計模式186
8.8.1具體和抽象訪問者188
8.8.2在類層次結構中集成操作189
8.8.3遍歷對像圖191
8.8.4 OBSERVER模式中使用繼承194
8.8.5在訪問者結構中支持數據流196
小結197
代碼探索198
延伸閱讀200

第9章函數式設計201
9.1一等函數201
9.2函數式接口、lambda表達式和方法引用203
9.2.1函數式接口203
9.2.2 lambda表達式204
9.2.3方法引用207
9.3使用函數複合行為208
9.4用函數作數據供給者212
供給者函數與OBSERVER模式217
9.5一等函數和設計模式218
9.5.1函數式STRATEGY218
9.5.2函數式COMMAND220
9.6函數式數據處理221
9.6.1數據作為流222
9.6. 2將高階函數應用於流223
9.6.3過濾流224
9.6.4映射數據元素225
9.6.5規約流226
小結228
代碼探索228
延伸閱讀230
附錄A Java程序設計語言的重要概念231
附錄B代碼規範237
附錄C應用實例240
參考文獻242