作 者:(意)馬爾科·法埃拉 著 雷威,李強 譯
定 價:89.8
出 版 社:人民郵電出版社
出版日期:2021年07月01日
頁 數:268
裝 幀:平裝
ISBN:9787115566348
1.一條主線串聯編程語言、算法與軟件工程2.一個實例,七次重構,助力明辨代碼優劣3.附贈在線代碼庫,按章節組織免費下載4.Java開發技巧助力應對多樣化開發需求5.《Java核心技術》《寫給大忙人看的Java核心技術》等書作者凱·霍思特曼作序推薦
●第一部分準備工作
第1章軟件質量和待解決問題2
1.1軟件質量2
1.1.1內部質量與外部質量3
1.1.2功能性質量與非功能性質量3
1.2主要的外部軟件質量4
1.2.1正確性4
1.2.2穩健性5
1.2.3易用性5
1.2.4效率5
1.3主要的內部軟件質量6
1.3.1可讀性6
1.3.2可復用性6
1.3.3可測試性6
1.3.4可維護性7
1.4軟件質量之間的關繫7
1.5特殊的質量9
1.5.1線程安全9
1.5.2簡潔性9
1.6演進示例:水容器繫統9
1.6.1API10
1.6.2用例11
1.7數據的模型和表示12
1.7.1存儲水量13
1.7.2存儲連接13
1.8你好,容器(Novice)15
1.8.1字段和構造函數15
1.8.2getAmount和addWater方法17
1.8.3connectTo方法17
1.9小結19
1.10擴展閱讀19
第2章Reference的實現20
2.1代碼(Reference)21
2.1.1內存布局圖22
2.1.2方法25
2.2內存需求26
2.3時間復雜度30
2.4學以致用32
2.5小結33
2.6小測驗答案和練習答案34
2.7擴展閱讀36
第二部分軟件質量
第3章速度的要求:時間效率40
3.1常數時間內完成加水(Speed1)41
3.2常數時間內添加連接(Speed2)43
3.2.1用循環鏈表來表示容器組43
3.2.2延遲更新46
3.3優選的平衡:並查集算法(Speed3)49
3.3.2連接容器樹52
3.3.3最壞情況時間復雜度53
3.3.4攤銷時間復雜度55
3.3.5可調整大小數組的攤銷分析56
3.4比較各種實現59
3.4.1實驗59
3.4.2理論與實踐60
3.5來點兒新鮮的61
3.5.1快速插入62
3.5.2快速查詢62
3.5.3讓三個方法都變快63
3.6真實世界的用例63
3.7學以致用64
3.8小結65
3.9小測驗答案和練習答案65
3.10擴展閱讀68
第4章寶貴的內存:空間效率70
4.1稍微擠一下(Memory1)70
4.2普通數組(Memory2)75
4.3棄用對像(Memory3)78
4.3.1無對像的API79
4.3.2字段和getAmount方法81
4.3.3用一個工廠方法來創建容器82
4.3.4通過ID連接容器84
4.3.5空間復雜度和時間復雜度87
4.4黑洞(Memory4)87
4.5空間和時間的權衡90
4.6來點兒新鮮的92
4.6.1重復對像少的情況92
4.6.素多的情況93
4.7真實世界的用例94
4.8學以致用94
4.9小結96
4.10小測驗答案和練習答案96
4.11擴展閱讀100
第5章有自我意識的代碼:通過監控實現可靠性102
5.1契約式設計102
5.1.1前置條件和後置條件102
5.1.2不變式104
5.1.3正確性和穩健性105
5.1.4檢查契約106
5.1.5更廣泛的情況108
5.2基於契約設計水容器109
5.3檢查契約的容器(Contracts)111
5.3.1檢查addWater方法的契約114
5.4檢查不變式的容器(Invariants)117
5.4.1檢查connectTo方法的不變式118
5.4.2檢查addWater方法的不變式120
5.5來點兒新鮮的120
5.5.1契約121
5.5.2一個基線版本實現121
5.5.3檢查契約122
5.5.4檢查不變式123
5.6真實世界的用例124
5.7學以致用125
5.8小結126
5.9小測驗答案和練習答案126
5.10擴展閱讀131
第6章別對我撒謊:通過測試保證可靠性132
6.1測試的基本概念132
6.1.1測試的覆蓋率133
6.1.2測試和契約式設計133
6.1.3JUnit134
6.2測試水容器(UnitTests)136
6.2.1初始化測試136
6.2.2測試addWater138
6.2.3測試connectTo方法143
6.2.4運行測試144
6.2.5衡量代碼覆蓋率145
6.3可測試性(Testable)146
6.3.1可控性146
6.3.2可觀察性147
6.3.3隔離:切斷依賴關繫148
6.4來點兒新鮮的149
6.4.1提高可測試性150
6.4.2一個測試套件151
6.5真實世界的用例153
6.6學以致用154
6.7小結155
6.8小測驗答案和練習答案155
6.9擴展閱讀160
第7章讓代碼說話:可讀性161
7.1關於可讀性的一些觀點161
7.1.1企業編碼風格規範162
7.1.2可讀性因素163
7.2結構性的可讀性特征164
7.2.1控制流語句164
7.2.2表達式和局部變量166
7.3外部可讀性特征167
7.3.1注釋167
7.3.2命名168
7.3.3空白及縮進169
7.4可讀的容器(Readable)169
7.4.1用Javadoc描述類的頭部170
7.4.2整理connectTo方法173
7.4.3整理addWater方法177
7.5可讀性的終極思考178
7.6來點兒新鮮的179
7.7真實世界的用例181
7.8學以致用181
7.9小結183
7.10小測驗答案和練習答案183
7.11擴展閱讀186
第8章多個廚師一鍋飯:線程安全188
8.1線程安全面臨的挑戰188
8.1.1並發級別190
8.1.2水容器的並發策略192
8.2處理死鎖193
8.2.1原子的鎖序列194
8.2.2有序的鎖序列195
8.2.3一個隱藏的競爭條件196
8.3線程安全的水容器(ThreadSafe)198
8.3.1同步connectTo方法198
8.3.2同步addWater和getAmount方法199
8.4不可變性(Immutable)201
8.4.1API202
8.4.2實現204
8.5來點兒新鮮的206
8.6真實世界的用例208
8.7學以致用209
8.8小結210
8.9小測驗答案和練習答案211
8.10擴展閱讀213
第9章請重復利用:可復用性215
9.1確立邊界215
9.2通用框架216
9.2.1屬性API219
9.2.2可變收集器220
9.2.3將Attribute適配到函數接口224
9.3一個通用容器的實現225
9.4通用的考慮227
9.5復原水容器(Generic)228
9.5.1更新用例228
9.5.2設計具體的屬性228
9.5.3定義具體的水容器類230
9.6社交網絡的帖子230
9.7來點兒新鮮的231
9.7.1參數函數的接口233
9.7.2一個通信模式235
9.8真實世界的用例237
9.9學以致用238
9.10總結240
9.11小測驗答案和練習答案240
9.12擴展閱讀245
附錄A代碼高爾夫:簡潔性246
附錄B終極水容器類249
列表:每一章中主要的類252
本書的核心思想是通過對各方面的代碼質量進行比較,使讀者了解經驗豐富的開發者擁有的思維模式。為了展示軟件開發很好實踐,作者對一個水容器示例進行多次重構,討論了18種實現,分別從7個方面改進代碼質量:時間效率、空間效率、監控與可靠性、測試與可靠性、可讀性、線程安全、可復用性。在此過程中,作者還探討了與計算機科學、Java編程以及軟件工程相關的專業話題,這些知識都有助於讀者寫出更好的代碼。本書面向初級和中級Java程序員,其他面向對像編程人員也能從中受益。