內容簡介
本書詳細介紹了面向對象的分析與設計,全面探討了面向對象概念、軟體開發過程、UML和多層技術。 本書使用最常見的技術和方法,通過一個貫穿全書的案例分析,對面向對象的 軟體開發過程和使用面向對象技術的編程過程進行了透徹的討論。首先闡述了面 向對象軟體項目的基本概念,然後基於廣泛使用的方法,介紹了使用進行以測試 為驅動的開發過程,最後研究了現實世界中的開發問題。
圖書目錄
第1章 入門 1
1.1 背景 1
1.2 編程簡史 1
1.3 方法學 2
1.4 關於本書 2
1.4.1 內容概述 3
1.4.2 案例分析 3
1.4.3 導航 3
第Ⅰ部分 設 置 場 景
第2章 對象的概念 7
2.1 引言 7
2.2 什麼是對象 8
2.3 相同還是相等 10
2.4 描述對象 12
2.5 封裝 13
2.6 關聯和聚合 13
2.7 圖和樹 15
2.8 連結和可導航性 16
2.9 訊息 17
2.10 啟動操作 19
2.11 協作示例 19
2.12 面向對象程式的工作原理 21
2.13 垃圾收集 22
2.14 類 22
2.15 類定義的內容 24
2.16 共享數據和共享操作 26
2.17 類型 27
2.18 術語 27
2.19 重用代碼 29
2.20 小結 32
2.21 課外閱讀 32
2.22 複習題 32
2.23 練習1的答案 33
2.24 複習題答案 33
第3章 繼承 34
3.1 引言 34
3.2 設計類層次結構 35
3.3 給類層次結構添加實現代碼 36
3.4 抽象類 38
3.5 重定義方法 40
3.6 實現棧類 40
3.6.1 使用繼承實現棧 41
3.6.2 使用複合實現棧 42
3.6.3 繼承和複合 43
3.7 多重繼承 44
3.8 使用繼承的規則 47
3.9 小結 47
3.10 課外閱讀 47
3.11 複習題 47
3.12 複習題答案 49
第4章 類型系統 50
4.1 引言 50
4.2 動態和靜態類型系統 50
4.3 多態性 51
4.3.1 多態變數 52
4.3.2 多態訊息 53
4.4 動態綁定 54
4.5 多態性規則 56
4.6 類型轉換 56
4.7 顯式類型轉換 57
4.8 使用模板進行泛化 59
4.9 小結 60
4.10 課外閱讀 60
7.5.3 通信圖中的元素 127
7.5.4 給類添加操作 128
7.5.5 職責 129
7.5.6 狀態建模 129
7.6 小結 130
7.7 課外閱讀 130
7.8 複習題 131
7.9 練習4的答案 133
7.10 複習題答案 133
第Ⅲ部分 設計解決方案
第8章 設計系統體系結構 137
8.1 引言 137
8.2 設計優先權 138
8.3 系統設計中的步驟 138
8.4 選擇聯網的系統拓撲 139
8.4.1 網路體系結構的簡史 139
8.4.2 三層體系結構 140
8.4.3 個人計算機 142
8.4.4 網路計算機 142
8.4.5 網際網路和全球資訊網 143
8.4.6 內聯網 143
8.4.7 外聯網和虛擬私人網路 144
8.4.8 客戶機-伺服器與
分散式體系結構 144
8.4.9 用UML描述網路拓撲 146
8.5 並發設計 147
8.6 安全設計 148
8.6.1 數字加密和解密 148
8.6.2 一般安全規則 149
8.7 分解軟體 150
8.7.1 系統和子系統 150
8.7.2 層 151
8.7.3 Java層:套用小程式和RMI 153
8.7.4 層中的訊息流 155
8.8 小結 158
8.9 課外閱讀 158
8.10 複習題 158
8.11 複習題答案 159
第9章 選擇技術 160
9.1 引言 160
9.2 客戶層技術 160
9.3 客戶層到中間層的協定 162
9.4 中間層技術 163
9.5 中間層到數據層的技術 164
9.6 其他技術 165
9.7 一般前端配置 166
9.7.1 HTML/CGI和腳本 166
9.7.2 HTML/CGI和服務小程式 167
9.7.3 RMI 168
9.7.4 CORBA 169
9.7.5 EJB 170
9.8 後端配置 171
9.9 Java電子商務配置 171
9.10 UML包 174
9.11 小結 177
9.12 課外閱讀 177
9.13 複習題 178
9.14 複習題答案 178
第10章 設計子系統 179
10.1 引言 179
10.2 把分析的類模型映射為
設計的類模型 180
10.2.1 映射操作 180
10.2.2 變數類型 180
10.2.3 欄位的可見性 180
10.2.4 訪問器 181
10.2.5 映射類、屬性和複合 181
10.2.6 映射其他類型的關聯 182
10.2.7 通用標識符 186
10.3 使用關係資料庫實現存儲 187
10.3.1 資料庫管理系統 187
10.3.2 關係模型 188
10.3.3 映射實體類 190
10.3.4 映射關聯 190
10.3.5 映射對象狀態 193
10.4 最終確定用戶界面 196
10.5 設計業務服務 200
10.5.1 使用代理和副本 201
10.5.2 給業務服務分類 203
10.5.3 會話標識符 204
10.5.4 業務服務的實現 204
10.6 使用模式、框架和庫 206
10.7 事務 206
10.7.1 保守並發和開放並發 207
10.7.2 使用事務和對象的
一般規則 207
10.7.3 上層中的事務 207
10.8 處理多個活動 208
10.8.1 控制多個任務 208
10.8.2 控制多個執行緒 208
10.8.3 執行緒安全 209
10.9 小結 212
10.10 課外閱讀 212
10.11 複習題 212
10.12 複習題答案 213
第11章 可重用的設計模式 214
11.1 引言 214
11.1.1 模式簡史 214
11.1.2 目前的軟體模式 215
11.2 模式模板 215
11.3 常見的設計模式 216
11.3.1 觀察器模式 216
11.3.2 單一模式 220
11.3.3 多重模式 223
11.3.4 疊代器模式 224
11.3.5 工廠方法和抽象工廠 226
11.3.6 狀態模式 227
11.3.7 門面模式 231
11.3.8 適配器模式 231
11.3.9 策略模式和模板方法 233
11.3.10 次輕量級模式 235
11.3.11 複合模式 236
11.3.12 代理模式 239
11.4 使用模式 240
11.5 發現、合併和調整模式 241
11.6 小結 243
11.7 課外閱讀 243
第12章 指定類的接口 244
12.1 引言 244
12.2 規範的定義 245
12.3 正式規範 245
12.4 非正式規範 247
12.5 動態檢查 248
12.6 面向對象的規範 250
12.6.1 OCL中的正式規範 250
12.6.2 Eiffel中的非正式規範 251
12.7 按契約設計 252
12.7.1 契約和繼承 255
12.7.2 減少錯誤檢查代碼 256
12.7.3 履行契約 258
12.7.4 應用程式防火牆 259
12.8 Java中的非正式規範 259
12.8.1 使用注釋編寫契約文檔 259
12.8.2 動態檢查條件 260
12.8.3 使用RuntimeException
發出違反契約的信號 260
12.8.4 外部系統 261
12.8.5 啟用和禁用動態檢查 263
12.9 小結 264
12.10 課外閱讀 264
12.11 複習題 265
12.12 複習題答案 265
第13章 不間斷的測試 266
13.1 引言 266
13.2 測試術語 266
13.2.1 黑盒子測試 267
13.2.2 白盒子測試 268
13.3 測試的類型 268
13.3.1 單元測試 269
13.3.2 完整性測試 269
13.3.3 Alpha測試 269
13.3.4 beta測試 270
13.3.5 用例測試 270
13.3.6 組件測試 270
13.3.7 構建測試 271
13.3.8 負載測試 272
13.3.9 安裝測試 273
13.3.10 接受測試 273
13.3.11 衰退測試 273
13.3.12 說明文檔測試 274
13.3.13 安全測試 274
13.3.14 衡量標準 274
13.4 測試的自動化 275
13.5 準備測試 276
13.6 測試策略 277
13.6.1 開發過程中的測試 277
13.6.2 測試階段中的測試 278
13.6.3 發布後的測試 278
13.7 測試的內容 278
13.8 測試驅動的開發 281
13.9 使用JUnit進行測試驅動
的開發示例 282
13.9.1 測試Car類 283
13.9.2 實現Car類 284
13.9.3 重新安排測試 286
13.9.4 為衰退測試創建測試套件 288
13.9.5 測試Across方法 290
13.9.6 完成Store類 290
13.10 小結 292
13.11 課外閱讀 293
附錄A Ripple小結 294
附錄B iCoot案例分析 297
B.1 業務需求 297
B.1.1 顧客的任務陳述 297
B.1.2 參與者列表 297
B.1.3 用例列表 298
B.1.4 用例的通信圖 298
B.1.5 用例的活動圖 298
B.1.6 用例的細節 299
B.2 系統需求 302
B.2.1 用戶界面草圖 302
B.2.2 參與者列表 303
B.2.3 用例列表 303
B.2.4 用例圖 304
B.2.5 用例調查 304
B.2.6 用例細節 305
B.2.7 輔助需求 308
B.2.8 用例的優先權 308
B.3 分析 308
B.3.1 類圖 308
B.3.2 屬性 309
B.3.3 操作列表 309
B.3.4 預約的狀態機 311
B.3.5 用例的實現 311
B.4 系統設計 316
B.4.1 選擇技術 316
B.4.2 層圖 317
B.4.3 層互動策略 318
B.4.4 包 318
B.4.5 部署圖 319
B.4.6 安全策略 320
B.4.7 並發策略 320
B.5 子系統設計 320
B.5.1 業務服務 321
B.5.2 ServletsLayer類圖 321
B.5.3 ServletsLayer的欄位列表 321
B.5.4 ServletsLayer的訊息列表 322
B.5.5 ServerLayer類圖 322
B.5.6 ServerLayer的欄位列表 323
B.5.7 ServerLayer的訊息列表 323
B.5.8 BusinessLayer類圖 324
B.5.9 BusinessLayer的欄位列表 325
B.5.10 協定對象的類圖 328
B.5.11 資料庫模式 329
B.5.12 用戶界面設計 330
B.5.13 業務服務的實現 330
B.6 類的規範 342
B.6.1 伺服器類的規範 342
B.6.2 業務邏輯類的規範 344
B.7 測試計畫概述 346
B.7.1 引言 346
B.7.2 螺旋式遞增方式的作用 346
B.7.3 非代碼製品的測試 347
B.7.4 代碼的評估 347
B.7.5 測試驅動的開發 347
B.7.6 斷言 347
B.7.7 測試階段 347
B.7.8 說明文檔的測試 348
B.7.9 構建測試 348
B.7.10 測試建檔和記錄日誌 348
B.7.11 分階段的測試活動 348
B.8 術語表 350
附錄C UML表示法小結 356