內容提要
Jolt 大獎素有“軟體業之奧斯卡”的美稱,Jolt大獎精選叢書精選自Jolt 歷屆獲獎圖書,以植根於開發實踐中的獨到工程思想與傑出方法論為主要甄選方向。本書第1 版和第2 版分別於1991 年和1993 年榮獲Jolt 震撼獎。
《面向對象分析與設計(第3版)(修訂版)》是UML 創始人Grady Booch 的代表作之一。
《面向對象分析與設計(第3版)(修訂版)》分為理論和套用兩部分。理論部分深刻剖析了面向對象分析與設計(OOAD)的概念和方法。套用部分連續列出了5 個不同類型、不同領域的套用,描述如何從初始階段到交付階段,將OOAD 理論和方法套用到項目中。套用部分所涉及的領域包括系統架構、數據獲取、密碼分析、控制系統和Web 開發,還給出了一些關於重要問題的有效建議,包括分類、實現策略和高性價比的項目管理。《面向對象分析與設計(第3版)(修訂版)》中介紹的概念都基於牢固的理論基礎。同時,作者十分注重實效,基於其豐富的經驗,面向軟體工程實踐者的實際需要,提出了改進的對象開發方法,用於解決系統和軟體開發者面臨的複雜問題;運用大量例子說明了基本概念,解釋了方法,並展示了在不同領域的成功套用。
《面向對象分析與設計(第3版)(修訂版)》的表示法採用最新的UML 2.0,因此本書是學習UML 2.0 不可多得的參考書。本書非常適合實際系統和軟體的開發者、系統分析師或架構師、項目經理閱讀,也可以作為高等院校軟體工程和高級編程課程的教材使用。
目錄
第 1 篇 概念
第 1 章 複雜性 ....................................................................................... 2
1.1 複雜系統的結構 ....................................................................................... 3
1.1.1 個人計算機的結構 ....................................................................... 3
1.1.2 植物和動物的結構 ....................................................................... 4
1.1.3 物質的結構 ................................................................................... 5
1.1.4 社會機構的結構 ........................................................................... 5
1.2 軟體固有的複雜性 ................................................................................... 6
1.2.1 定義軟體複雜性 ........................................................................... 6
1.2.2 為什麼軟體在本質上是複雜的 ................................................... 7
1.3 複雜系統的 5 個屬性 ............................................................................. 11
1.3.1 層次結構 ..................................................................................... 11
1.3.2 相對本原 ..................................................................................... 12
1.3.3 關注點分離 ................................................................................. 12
1.3.4 共同模式 ..................................................................................... 12
1.3.5 穩定的中間形式 ......................................................................... 13
1.4 有組織和無組織的複雜性 ..................................................................... 13
1.4.1 複雜系統的規範形式 ................................................................. 13
1.4.2 人在處理複雜性時的能力局限 ................................................. 16
1.5 從混沌到有序 ......................................................................................... 17
1.5.1 分解的作用 ................................................................................. 17
1.5.2 抽象的作用 ................................................................................. 21
1.5.3 層次結構的作用 ......................................................................... 22
1.6 複雜系統的設計 ..................................................................................... 23
1.6.1 作為科學和藝術的工程 ............................................................. 23
1.6.2 設計的含義 ................................................................................. 23
1.7 小結 ......................................................................................................... 26
第 2 章 對象模型 ................................................................................. 27
2.1 對象模型的演進 ..................................................................................... 27
2.1.1 程式設計語言的換代 ................................................................. 28
2.1.2 第一代和第二代早期程式設計語言的拓撲結構 ..................... 30
2.1.3 第二代後期和第三代早期程式設計語言的結構 ..................... 31
2.1.4 第三代後期程式設計語言的結構 ............................................. 32
2.1.5 基於對象和面向對象的程式設計語言的結構 ......................... 33
2.2 對象模型基礎 ......................................................................................... 35
2.2.1 面向對象編程 ............................................................................. 38
2.2.2 面向對象設計 ............................................................................. 39
2.2.3 面向對象分析 ............................................................................. 40
2.3 對象模型要素 ......................................................................................... 40
2.3.1 抽象的意義 ................................................................................. 42
2.3.2 封裝的意義 ................................................................................. 48
2.3.3 模組化的意義 ............................................................................. 51
2.3.4 層次結構的意義 ......................................................................... 55
2.3.5 類型的意義 ................................................................................. 61
2.3.6 並發的意義 ................................................................................. 64
2.3.7 持久的意義 ................................................................................. 66
2.4 套用對象模型 ......................................................................................... 68
2.4.1 對象模型的好處 ......................................................................... 69
2.4.2 開放式問題 ................................................................................. 70
2.5 小結 ......................................................................................................... 70
第 3 章 類與對象 ................................................................................. 71
3.1 對象的本質 ............................................................................................. 71
3.1.1 什麼是對象,什麼不是對象 ..................................................... 72
3.1.2 狀態 ............................................................................................. 74
3.1.3 行為 ............................................................................................. 77
3.1.4 標識符 ......................................................................................... 81
3.2 對象之間的關係 ..................................................................................... 83
3.2.1 連結 ............................................................................................. 84
3.2.2 聚合 ............................................................................................. 87
3.3 類的本質 ................................................................................................. 88
3.3.1 什麼是類,什麼不是類 ............................................................. 88
3.3.2 接口和實現 ................................................................................. 90
3.3.3 類的生命周期 ............................................................................. 91
3.4 類之間的關係 ......................................................................................... 92
3.4.1 關聯 ............................................................................................. 92
3.4.2 繼承 ............................................................................................. 94
3.4.3 聚合 ........................................................................................... 105
3.4.4 依賴關係 ................................................................................... 106
3.5 類與對象的互動 ................................................................................... 106
3.5.1 類與對象的關係 ....................................................................... 107
3.5.2 類與對象在分析和設計中的角色 ........................................... 107
3.6 創建高品質的類與對象 ....................................................................... 107
3.6.1 評判一種抽象的品質 ............................................................... 108
3.6.2 選擇操作 ................................................................................... 109
3.6.3 選擇關係 ................................................................................... 111
3.6.4 選擇實現 ................................................................................... 113
3.7 小結 ....................................................................................................... 114
第 4 章 分類........................................................................................115
4.1 正確分類的重要性 ............................................................................... 115
4.1.1 分類的困難 ............................................................................... 116
4.1.2 分類的增量和疊代本質 ........................................................... 118
4.2 確定類和對象 ....................................................................................... 120
4.2.1 經典方法和現代方法 ............................................................... 120
4.2.2 面向對象分析 ........................................................................... 124
4.3 關鍵抽象與機制 ................................................................................... 132
4.3.1 確定關鍵抽象 ........................................................................... 132
4.3.2 識別機制 ................................................................................... 134
4.4 小結 ....................................................................................................... 137
第 2 篇 方法
第 5 章 表示法 ................................................................................... 140
5.1 統一建模語言 ....................................................................................... 140
5.1.1 簡單歷史回顧 ........................................................................... 141
5.1.2 模型與多重視圖 ....................................................................... 141
5.1.3 圖分類 ....................................................................................... 142
5.1.4 在實踐中使用圖 ....................................................................... 144
5.1.5 概念模型、邏輯模型和物理模型 ........................................... 145
5.1.6 工具的角色 ............................................................................... 145
5.1.7 面向對象開發的產品 ............................................................... 146
5.1.8 規模上的伸縮 ........................................................................... 147
5.1.9 UML 的語法和語義 ................................................................. 147
5.1.10 UML 2.0 信息資源 ................................................................. 148
5.2 包圖 ....................................................................................................... 148
5.2.1 基本概念:包表示法 ............................................................... 149
5.2.2 基本概念:元素的可見性 ....................................................... 150
5.2.3 基本概念:依賴關係 ............................................................... 151
5.2.4 基本概念:包圖 ....................................................................... 152
5.2.5 高級概念:導入和訪問 ........................................................... 154
5.3 組件圖 ................................................................................................... 156
5.3.1 基本概念:組件表示法 ........................................................... 157
5.3.2 基本概念:組件圖 ................................................................... 158
5.3.3 基本概念:組件接口 ............................................................... 160
5.3.4 基本概念:組件實現 ............................................................... 161
5.3.5 高級概念:組件的內部結構 ................................................... 163
5.4 部署圖 ................................................................................................... 164
5.4.1 基本概念:工件表示法 ........................................................... 165
5.4.2 基本概念:節點表示法 ........................................................... 165
5.4.3 基本概念:部署圖 ................................................................... 166
5.5 用例圖 ................................................................................................... 168
5.5.1 基本概念:執行者 ................................................................... 169
5.5.2 基本概念:用例 ....................................................................... 169
5.5.3 基本概念:用例圖 ................................................................... 169
5.5.4 高級概念: ?include?和?extend?關係..................................... 172
5.5.5 高級概念:泛化 ....................................................................... 176
5.6 活動圖 ................................................................................................... 177
5.6.1 基本概念:動作 ....................................................................... 178
5.6.2 基本概念:開始和停止 ........................................................... 178
5.6.3 基本概念:判斷節點和合併節點 ........................................... 179
5.6.4 基本概念:分區 ....................................................................... 179
5.6.5 高級概念:分叉、結合和並發 ............................................... 180
5.6.6 高級概念:對象流 ................................................................... 182
5.6.7 高級概念:其他元素 ............................................................... 182
5.7 類圖 ....................................................................................................... 182
5.7.1 基本概念:類表示法 ............................................................... 184
5.7.2 基本概念:類關係 ................................................................... 186
5.7.3 高級概念:模板(參數化)類 ............................................... 189
5.7.4 高級概念:可見性 ................................................................... 190
5.7.5 高級概念:關聯端名稱和限定符 ........................................... 191
5.7.6 高級概念:約束 ....................................................................... 192
5.7.7 高級概念:關聯類和註解 ....................................................... 196
5.8 序列圖 ................................................................................................... 197
5.8.1 基本概念:對象與互動 ........................................................... 197
5.8.2 基本概念:生命線與訊息 ....................................................... 198
5.8.3 高級概念:銷毀事件 ............................................................... 199
5.8.4 高級概念:執行說明 ............................................................... 200
5.8.5 高級概念:互動使用 ............................................................... 201
5.8.6 高級概念:控制結構 ............................................................... 201
5.9 互動概述圖 ........................................................................................... 204
5.9.1 基本概念:框 ........................................................................... 204
5.9.2 基本概念:控制流元素 ........................................................... 204
5.9.3 基本概念:互動圖元素 ........................................................... 206
5.10 組合結構圖 ......................................................................................... 206
5.10.1 基本概念:組合結構的部分 ................................................. 206
5.10.2 基本概念:組合結構的部分與接口 ..................................... 207
5.10.3 基本概念:組合結構連線器 ................................................. 208
5.10.4 高級概念:協作 ..................................................................... 208
5.11 狀態機圖 .............................................................................................. 209
5.11.1 基本概念:初始狀態、最終狀態和簡單狀態 ..................... 210
5.11.2 基本概念:轉換與事件 ......................................................... 211
5.11.3 高級概念:狀態活動——入口活動、 ................................. 213
執行活動和出口活動 ............................................................. 213
5.11.4 高級概念:控制轉換 ............................................................. 213
5.11.5 高級概念:複合狀態與嵌套狀態 ......................................... 215
5.11.6 高級概念:並發與控制 ......................................................... 216
5.11.7 高級概念:子狀態機狀態 ..................................................... 221
5.11.8 高級概念:其他狀態機圖元素 ............................................. 222
5.12 時間圖 ................................................................................................. 222
5.12.1 基本概念:更多相同之處 ..................................................... 223
5.12.2 基本概念:布局 ..................................................................... 223
5.12.3 基本概念:事件 ..................................................................... 224
5.12.4 基本概念:約束 ..................................................................... 224
5.12.5 高級概念:另一種表示形式 ................................................. 225
5.12.6 高級概念:事件與訊息 ......................................................... 226
5.13 對象圖 ................................................................................................. 226
5.13.1 基本概念:對象 ..................................................................... 227
5.13.2 基本概念:對象關係 ............................................................. 228
5.13.3 高級概念:端點名稱和限定符 ............................................. 229
5.14 通信圖 ................................................................................................. 230
5.14.1 基本概念:對象、連結和訊息 ............................................. 230
5.14.2 基本概念:順序表達式 ......................................................... 230
5.14.3 高級概念:訊息與同步 ......................................................... 233
5.14.4 高級概念:疊代子句和約束條件 ......................................... 233
5.15 小結 ..................................................................................................... 234
第 6 章 過程....................................................................................... 236
6.1 首要原則 ............................................................................................... 236
6.1.1 成功項目的特徵 ....................................................................... 236
6.1.2 追求理性的開發過程 ............................................................... 240
6.2 巨觀過程:軟體開發生命周期 ........................................................... 244
6.2.1 概述 ........................................................................................... 244
6.2.2 巨觀過程的內容維:科目 ....................................................... 246
6.2.3 巨觀過程的時間維:里程碑和階段 ....................................... 249
6.2.4 巨觀過程的時間維:疊代 ....................................................... 255
6.2.5 發行計畫 ................................................................................... 257
6.3 微觀過程:分析與設計過程 ............................................................... 260
6.3.1 概述 ........................................................................................... 260
6.3.2 抽象層次 ................................................................................... 261
6.3.3 活動 ........................................................................................... 262
6.3.4 產品 ........................................................................................... 263
6.3.5 微觀過程與抽象層次 ............................................................... 267
6.3.6 識別元素 ................................................................................... 270
6.3.7 確定元素間的協作 ................................................................... 274
6.3.8 確定元素間的關係 ................................................................... 278
6.3.9 詳細確定元素的語義 ............................................................... 281
6.4 小結 ....................................................................................................... 285
第 7 章 實戰....................................................................................... 287
7.1 管理和計畫 ........................................................................................... 288
7.1.1 風險管理 ................................................................................... 288
7.1.2 任務計畫 ................................................................................... 289
7.1.3 開發複查 ................................................................................... 290
7.2 人員配備 ............................................................................................... 292
7.2.1 資源配置 ................................................................................... 292
7.2.2 開發團隊角色 ........................................................................... 293
7.3 發布版本管理 ....................................................................................... 296
7.3.1 配置管理和版本控制 ............................................................... 296
7.3.2 集成 ........................................................................................... 297
7.3.3 測試 ........................................................................................... 298
7.4 復用 ....................................................................................................... 298
7.4.1 復用的元素 ............................................................................... 298
7.4.2 建立復用制度 ........................................................................... 299
7.5 質量保證和測量指標 ........................................................................... 299
7.5.1 軟體質量 ................................................................................... 300
7.5.2 面向對象測量指標 ................................................................... 301
7.6 文檔化 ................................................................................................... 304
7.6.1 開發遺產 ................................................................................... 304
7.6.2 文檔化的內容 ........................................................................... 305
7.7 工具 ....................................................................................................... 306
7.7.1 工具種類 ................................................................................... 306
7.7.2 組織上的意義 ........................................................................... 307
7.8 特殊主題 ............................................................................................... 308
7.8.1 領域特定問題 ........................................................................... 308
7.8.2 採納面向對象技術 ................................................................... 309
7.9 面向對象開發的好處和風險 ............................................................... 310
7.9.1 面向對象開發的好處 ............................................................... 310
7.9.2 面向對象開發的風險 ............................................................... 311
7.10 小結 ..................................................................................................... 313
第 3 篇 套用
第 8 章 系統架構——基於衛星的導航 ............................................... 316
8.1 初始 ....................................................................................................... 317
8.1.1 衛星導航系統的需求 ............................................................... 318
8.1.2 定義問題的邊界 ....................................................................... 319
8.1.3 確定任務用例 ........................................................................... 322
8.1.4 確定系統用例 ........................................................................... 325
8.2 細化 ....................................................................................................... 329
8.2.1 開發一個好的架構 ................................................................... 329
8.2.2 定義架構開發活動 ................................................................... 330
8.2.3 驗證所建議的系統架構 ........................................................... 331
8.2.4 分配非功能需求和確定接口 ................................................... 339
8.2.5 規定系統架構及其部署 ........................................................... 341
8.2.6 分解系統架構 ........................................................................... 344
8.3 構造 ....................................................................................................... 350
8.4 交付之後 ............................................................................................... 350
8.4.1 添加新的功能 ........................................................................... 351
8.4.2 改變目標硬體 ........................................................................... 352
第 9 章 控制系統——交通管理 .......................................................... 353
9.1 初始 ....................................................................................................... 354
9.1.1 列車交通管理系統的需求 ....................................................... 354
9.1.2 決定系統用例 ........................................................................... 357
9.2 細化 ....................................................................................................... 362
9.2.1 分析系統功能 ........................................................................... 362
9.2.2 定義 TTMS 架構 ...................................................................... 366
9.2.3 從系統工程到硬體和軟體工程 ............................................... 368
9.2.4 關鍵抽象和機制 ....................................................................... 371
9.3 構造 ....................................................................................................... 373
9.3.1 訊息傳送 ................................................................................... 374
9.3.2 列車時刻表計畫 ....................................................................... 377
9.3.3 顯示信息 ................................................................................... 381
9.3.4 感測器數據採集 ....................................................................... 382
9.3.5 發布版本管理 ........................................................................... 383
9.3.6 系統架構 ................................................................................... 384
9.3.7 子系統規格說明 ....................................................................... 385
9.4 交付之後 ............................................................................................... 387
第 10 章 人工智慧——密碼分析 ........................................................ 389
10.1 初始 ..................................................................................................... 390
10.1.1 密碼分析需求 ......................................................................... 390
10.1.2 定義問題的邊界 ..................................................................... 391
10.1.3 黑板框架的架構 ..................................................................... 394
10.1.4 知識源的分析 ......................................................................... 396
10.2 細化 ..................................................................................................... 397
10.2.1 黑板對象 ................................................................................. 397
10.2.2 依賴和認定 ............................................................................. 399
10.3 構造 ..................................................................................................... 401
10.3.1 設計黑板對象 ......................................................................... 402
10.3.2 設計知識源 ............................................................................. 407
10.3.3 設計控制器 ............................................................................. 414
10.3.4 集成黑板框架 ......................................................................... 416
10.3.5 添加新的知識源 ..................................................................... 419
10.4 交付之後 ............................................................................................. 421
10.4.1 系統增強 ................................................................................. 421
10.4.2 改變需求 ................................................................................. 423
第 11 章 數據採集——氣象監測站 .................................................... 424
11.1 初始 ...................................................................................................... 424
11.1.1 氣象監測站需求 ..................................................................... 425
11.1.2 定義問題的邊界 ..................................................................... 425
11.1.3 場景 ......................................................................................... 437
11.2 細化 ...................................................................................................... 438
11.2.1 氣象監測系統用例 ................................................................. 438
11.2.2 架構框架 ................................................................................. 448
11.3 構造 ...................................................................................................... 450
11.3.1 幀機制 ..................................................................................... 450
11.3.2 發布計畫 ................................................................................. 454
11.3.3 感測器機制 ............................................................................. 455
11.3.4 顯示機制 ................................................................................. 457
11.3.5 用戶界面機制 ......................................................................... 458
11.4 交付之後 .............................................................................................. 461
第 12 章 Web 套用——休假跟蹤系統 ............................................... 463
12.1 初始 ..................................................................................................... 464
12.1.1 需求 ......................................................................................... 464
12.1.2 用例模型 ................................................................................. 466
12.2 細化 ..................................................................................................... 467
12.2.1 部署視圖 ................................................................................. 468
12.2.2 邏輯視圖 ................................................................................. 470
12.2.3 進程視圖 ................................................................................. 472
12.2.4 實現視圖 ................................................................................. 475
12.2.5 用例視圖 ................................................................................. 475
12.3 構造 ..................................................................................................... 480
12.3.1 用戶體驗模型 ......................................................................... 480
12.3.2 分析和設計模型 ..................................................................... 482
12.3.3 實體 ......................................................................................... 493
12.3.4 控制器 ..................................................................................... 502
12.3.5 Web 頁面和用戶界面 ............................................................. 503
12.4 交付和交付之後 ................................................................................. 508
附錄 A 面向對象程式語言 ................................................................. 510
附錄 B 進一步閱讀 ............................................................................ 530
註解 ..................................................................................................... 539
術語表 .................................................................................................. 566
精彩節摘
出版說明
經久不息的迴蕩
今時的讀書人,不復有無書可讀之苦,卻時有品種繁多而無從擇優之惑,甚而專業度頗高的技術書領域,亦日趨遭逢亂花迷眼的境地。此時,若得覓權威書評,抑或有公信力的排行榜,可按圖索驥,大大增加選中好書的命中率。然而,如此良助,不可多得,縱觀中外也唯見一枝獨秀——素有“軟體業奧斯卡”之美譽的 Jolt 獎!
震撼世界者為誰
在計算設備已經成為企業生產和日常生活之必備工具的今天, 專業和大眾用戶對於軟體的功能、 性能和用戶體驗的要求都在不斷提高。 在這樣的背景下,如何能夠發揮出軟體開發的最高效率和最大效能, 已經是擺在每一個從業者面前的重大課題,而這也正是 Jolt 大獎橫空出世的初衷及堅持數年的宗旨。
Jolt 大獎歷時 20 餘年, 在圖書及軟體業知名度極高, 廣受推崇。 獎如其名,為引領計算機科學與工程發展主流, Jolt 堅持將每年的獎項只頒給那些給整個IT 業界帶來震撼結果的圖書、工具、產品及理念等,因一流的眼光及超高的專業度而得以聞名遐邇,聲名遠播。
除圖書外, Jolt 針對軟體產品設有諸多獎項分類,如配置管理、協作工具、資料庫引擎/資料庫工具、設計工具/建模、開發環境、企業工具、庫/框架、移動開發工具等。但圖書歷來是 Jolt大獎中最受矚目且傳播最廣的一個獎項分支。Jolt 曾設有通用類圖書、技術類圖書等分類,每個分類又設有“卓越獎”( JoltAward,一般為一個)和“生產力獎”( Productivity Award,一般為 2 或 3 個)。獲獎技術圖書一經公布,即打上經典烙印,可謂一舉“震撼全世界”(贊助商Jolt 可樂的廣告詞)。
作為計算機技術圖書的後進,我們總在追問——是誰在震撼世界,是誰在照亮明天? Jolt 大獎恰似擺在眼前的櫥窗, 讓我們可以近距離觀看潮流在舞蹈,傾聽震撼在轟鳴!
朝花夕拾為哪般
Jolt 像是一年一度的承諾,在茫茫書海中為我們淘礪出一批批經得起歲月沖刷的傑作, 頭頂桂冠的佳作也因而得以一批批引進中國, 為國人開闊了眼界,滋補了技術養分。然而,或因技術差距造就的生不逢時、水土不服,或因翻譯、製作的不如人意,抑或是疏於宣傳等諸多原因,這些經典著作在國內出版後,儘管不乏如獲至寶的擁躉,卻仍不為諸多人所知,從而與大量本應從中獲益的讀者擦肩而過。既然這生生錯失的遺憾本不該發生,則更不應延續。為此,我們邀國外出版同行、國內技術專家一道,踏上朝花夕拾之路,竭力為廣大讀者篩選出歷久彌新、震撼依舊的 Jolt 圖書精品。
Jolt 獲獎圖書皆由業界專家一致評出,並得到軟體從業人員的高度認可,雖然這些書今天讀來, 不再能看到 20 世紀史詩時代那般日新月異的理論突破,以及依賴於高深繁複的科學研究所取得的系統化成果, 更多是在日復一日的開發實踐中總結和提煉出來的工程思想和方法論。重新選材之所以有所棄取,從Jolt 多年來的評獎規律中可窺端倪——一萬小時真理見凡是在工程思想領域取得革命性、顛覆性突破的圖書,就被歸於“震撼”獲獎分類。比如,從基於過程的程式設計模型過渡到面向對象的全新模型,就是軟體開發思想上的一次帶來巨大震撼的革命;再比如,打破傳統的瀑布模型而轉向持續集成的軟體交付模型,這也是一場業界的重大思想轉變。像這樣的重大思想突破,可以說是數年甚至數十年一遇的,而榮獲 Jolt 大獎的圖書中更為常見的,則是基於最佳實踐的“生產效率”獲獎者。獲得此類殊榮的圖書,都是作者們從平凡的、重複的,甚至用一般人的眼光看來不怎么起眼的日常開發實踐中,以獨具的慧眼、過人的耐心和大膽的創新,闖開一條不平常道路的心血與經驗總結。
這些圖書所涉及的主題,都是普通的軟體開發人員每天要面對的工作——代碼閱讀、 撰寫測試用例、 修復軟體問題……但就是這樣貌似平淡無奇的工作,是否能每一天、每一個項目都做好,著實拉開了軟體開發人員素質的差距,也決定了軟體企業開發出來的產品和服務的質量。我們中國有一句古話,叫作熟能生巧;某位著名企業家也說過一句家喻戶曉的名言:“把簡單的事千百萬次地做好,就是不簡單的。”這些樸素而實際的真理,同樣也是本套叢書最能彰顯的所謂程式設計師精神。它建立在腳踏實地的實踐基礎之上,也充滿了對於自由和創新的嚮往。
名作可堪比名曲
就不因歲月流逝而褪色來說,與這些 Jolt 名作相媲美者,只有那些百年響徹、震撼古今的經典名曲。希望本叢書帶給大家的每部著作,也如百聽不厭的樂曲,掩卷良久方餘音繞樑,真知存心。仔細想來,軟體開發與古典音樂豈非有異曲同工之妙?既是人類心智索問精確科學的探究, 亦是尋覓美學享受的追求。工程是藝術的根基,而藝術是工程的極致。衷心地希望各位讀者能夠認真閱讀本叢書的本本珍品,並切實地用於自 己的日常工作中,在充分享受大師魅力的同時,為中國的軟體事業譜寫更多、更震撼的樂章。
謹以本書獻給 Jan:
我的朋友,我的愛人,我的妻子。
——Grady
重看面向對象
軟體的本質是什麼?從不同的角度來看,會有不同的答案。有人認為是程式加文檔, 有人認為是人機互動,有人認為是增刪改查, 有人認為是抽象模型,而我認為是算法。
計算機科學的基石是圖靈機抽象:一個輸入集合,一個輸出集合,一個內部狀態集合,一個計算規則集合。這個抽象十分強大,我們甚至可以認為一頭奶牛也是一個圖靈機:吃的是草,擠的是奶。
一個表達式也是一個圖靈機,其中的運算元是輸入,求值的結果是輸出。一個函式也是圖靈機,參數是輸出,返回值是輸出。編程或設計軟體就是在通用圖靈機的基礎上,設計一個具體的圖靈機。我們設計軟體接受怎樣的輸入,設計軟體內部的狀態,設計表示計算規則的代碼,設計軟體的輸出。
近年來逐漸流行的函式式編程,就是建立在這個抽象的基礎上。而且函式式編程的思想由來已久,可以追溯到最古老的高級語言之一: Lisp。這種思想非常簡單:給定一個輸入集合,經過函式的處理,給出一個輸出集合。由此也導出了 Map-Reduce 等流行的架構設計模式: 一個計算集群仍然是一個圖靈機。純粹的函式有一點不足, 它沒有內部狀態。 可以說, 它是簡化了的圖靈機。但在有些時候,我們確實需要內部狀態。根據內部狀態的不同,對於同樣的輸入,可能給出不一樣的輸出。於是便有了閉包的概念,它是一個函式加上相關的上下文環境狀態。這樣,我們可以毫無困難地構建任何具體的圖靈機(好吧,正確實現一個算法還是比較困難的)。
閉包可以看成是擁有內部狀態的函式,這就相當於一個簡單的對象,它只有一個方法。反過來,對象可以看成是幾個閉包,它們共享了內部狀態。所以有人說:閉包是懶人的對象,對象是懶人的閉包。因此,函式式編程和面向對象思想,在底層基礎上是一致的。
面向對象思想的歷史和函式式一樣久遠。實際上,它們都是我們在設計算法時的一種抽象。只有利用抽象概念,才能實現人與人之間的溝通。“你想吃蘋果嗎?”這裡的“蘋果”就是一個抽象概念,它隱藏了蘋果實現的許多細節。人的大腦喜歡工作在一組抽象概念上。名詞是結構或存在的抽象,動詞是行為或過程的抽象。
我們在設計算法時,既需要函式抽象,也需要對象抽象。今天,面向對象和函式式編程的思想在各種程式語言中融合,可以說是殊途同歸。
抽象是強大的工具,但用得不好,也會產生不良的後果。最重要的問題,就是創建太多不必要的抽象。畢竟,抽象只是我們腦中的概念,我們可以創造出任何概念。比如上帝和各種鬼神,直到科學家說,在科學的系統里不需要假設存在一個上帝。面向對象在這方面遇到的問題比較多。舉例來說,一個 Java的 Hello world 程式,就要涉及好幾個概念,直接導致程式的代碼比較長。而在函式式編程中, 這通常只是一次函式調用。又比如, 在一個使用 Struts、 Spring、Hibernate 構建的 Java Web 應用程式中,處理一個 Get 請求的調用棧,可能是長長的一串。數據在不同的概念抽象之間反覆倒手,白白浪費了計算資源。
任何兩種觀點都是互補的。 面向對象思想在過去的軟體開發中取得了輝煌的成績。函式式編程讓我們能從另一個角度審視面向對象,更進一步體會面向對象抽象的強大,也發現面向對象中一些誤用的地方。如無必要,勿增實體。也許我們不需要假設以太的存在,就能解釋光在真空中的傳播。
多年後重讀這本書, 促使我重新思考, 需要利用哪些抽象來設計我的算法。
這些年來,這本書讓我受益良多,再次向大家鄭重推薦。
王海鵬
2016 年 1 月 5 日
作者簡介
Grady Booch在軟體架構、軟體工程和建模領域的創新工作是世界知名的。從1981年Rational公司創建開始,他就一直擔任該公司的首席科學家。Grady於2003年3月成為了IBM院士(IBM Fellow)。
Grady是統一建模語言(UML)最早的開發者之一,也是幾個Rational產品的最早開發者之一。Grady曾擔任世界各地一些複雜的軟體密集型項目的架構師和架構指導者。
Grady是6本暢銷書的作者,包括UML Users Guide和Object-Oriented Analysis with Applications。Grady發表了幾百篇有關軟體工程的技術文章,其中包括在20世紀80年代早期發表的文章,這些文章最先提出了面向對象設計的術語和實踐。他曾在世界各地演講和諮詢。
Grady是美國計算機協會(ACM)、美國電氣電子工程師學會(IEEE)、美國科學促進會(AAAS)、有社會責任的計算機專家協會(CPSR)的成員。他是IBM院士、ACM院士、世界技術網路院士,也是軟體開發論壇夢想家。Grady是敏捷聯盟、Hillside集團和軟體架構師世界學院的創始委員會成員,也是Northface大學的顧問委員會成員。
Grady於1977年從美國空軍學院獲得學士學位,於1979年從加州大學聖巴巴拉分校獲得電子工程科學碩士學位。
Grady與他的妻子和他的貓生活在科羅拉多。他的興趣包括閱讀、旅行、唱歌和彈奏豎琴。
Robert A. Maksimchuk是Unisys Chief Technology Office的一名研究主管。他關注新出現的建模技術,目的是提升Unisys 3D可視企業建模框架的戰略方向。Bob為這項任務帶來了不同行業的大量系統工程、建模、面向對象分析與設計的專業知識。他是UML for Mere Mortals和UML for Database Design的合著者,也寫了許多文章。他曾經週遊世界各地,在各種技術論壇上作為重要演講者發言,舉辦關於UML和面向對象開發的研討會和培訓。Bob是電氣電子工程師學會(IEEE)和國際系統工程學會(INCOSE)的成員。
Michael W. Engle是洛克希德馬丁公司的首席工程師。他有超過26年的技術和管理經驗——從項目啟動到運營支持,涵蓋了完整的系統開發生命周期。利用系統工程師、軟體工程師和系統架構師的背景,Mike運用了面向對象技術,為複雜的系統開發提供創新的開發方式。
Bobbi J. Young,Ph.D.,是Unisys Chief Technology Office的一名研究主管。她有著多年的IT行業從業經驗,與商業公司和國防部契約供應商一同工作。Young博士是一名諮詢師,她在項目管理、企業架構、系統工程和面向對象分析與設計方面提供現場指導。在她的職業生涯中,她關注於系統生命周期過程和方法學,同時也關注企業架構。Young博士擁有生物學、計算機科學和人工智慧學位,她獲得了管理信息系統的博士學位,也曾是美國海軍預備役的一名指揮官(已退伍)。
Jim Conallen是IBM Rational的模型驅動開發戰略小組的一名軟體工程師。在這個小組中,他積極參與,將對象管理集團(OMG)的模型驅動架構(MDA)計畫套用於IBM Rational的模型工具中。Jim在基於資產的開發和可復用資產規範(RAS)領域也很活躍。Jim經常在會議上演講,也經常寫文章。他的專業領域是Web套用開發。
他開發了UML的Web套用擴展(WAE)。這是對UML的一種擴展,讓開發者能夠利用UML在合適的抽象和細節層面上對Web套用的架構進行建模。這項工作是IBM Rational Rose和Rational XDE Web Modeling功能的基礎。
Jim與人合著了兩個版本的Building Web Applications with UML,第一個版本採用微軟公司的ASP技術,後一個版本採用J2EE技術。
Jim的經驗也來自於加入Rational之前的工作,那時他曾是獨立的諮詢師、Peace Corps的志願者和大學講師。他還是3個孩子的父親。Jim從Widener大學獲得了計算機和軟體工程的學士學位和碩士學位。
Kelli Houston是IBM Rational的IT諮詢專家。她是IBM內部方法的方法架構師,負責編寫方法並集成IBM的方法。除了方法架構師的角色,Kelli還在IBM內部領導Rational Method Composer(RMC)特別興趣小組(SIG)工作,為客戶和IBM內部諮詢師提供有效使用RMC方面的諮詢和現場指導服務。
前言
人類渴望得到精神上的寧靜、美學上的成就、家庭的安全、正義和自由。
這一切都不能通過工業化的生產效率來直接滿足。但是,生產效率讓人們得到充足的物質享受,而不至於與匱乏苦苦鬥爭。這為精神、美學和家庭事務贏得了時間,也使得社會能夠將一些特殊的技能賦予司法機構以及維護權利的機構。
Harlan Mills
DPMA and Human Productivity
作為計算機專業人員,我們努力地去構建能工作而且有用的系統;作為軟體工程師, 我們面臨著在計算資源和人力資源有限的條件下創建複雜系統的任務。面向對象( OO)技術已經發展為管理許多不同種類的系統中內在複雜性的手段。對象模型已被證明是非常有力和統一的概念。
對第 2 版的改動
在本書第 2 版出版以後,我們看到了一些重要的技術進步,其中一些突出的進步如下。
與網際網路的高頻寬、無線連線已經非常普遍;
納米技術已經出現,並開始提供有價值的產品;
機器人在火星表面漫步;
計算機生成的特效使得在電影中能夠完全逼真地再現任何想像中的世界;
出現了個人氣墊船;
手機已無處不在,使用非常方便;
獲得了人類基因圖譜;
面向對象技術已經在工業軟體開發中成為主流技術。
在世界各地都能見到面向對象技術被使用。但是,我們仍然遇到許多人,他們還沒有採用面向對象的開發方式。對於這兩類人,本書的新版本都很有價值。
對於面向對象分析與設計( OOAD)的新手,本書提供了下列信息。
面向對象的概念支持和演進式的觀點;
如何在系統開發生命周期中套用 OOAD 的例子;
對系統和軟體開發中使用的標準表示法統一建模語言(UML 2.0)的介紹。
對於有經驗的 OOAD 實踐者,本書從不同的角度提供了價值。
即使對於有經驗的實踐者, UML 2.0 也是新的。這是可以看到的表示法方面的重要區別。
根據前一版本所收到的反饋,更加關注建模。
通過本書的概念部分的學習,可以了解在面向對象的世界中,“為什麼事情總是像它們現在的樣子”。許多人可能從沒研究過面向對象( OO)概念本身的發展,即使有所了解,在初次學習 OO 方法時,也許未能理解其重要性。
本書這一版和以前的版本相比有四項主要區別,如下所示。
1. UML 2.0 已經正式得到了通過,第 5 章將介紹 UML 2.0。為了加強讀者對這種表示法的理解,特別區分了它的基本元素和高級元素。
2.這一版在應用程式的章節中引入了一些新的領域和背景。例如,應用程式的領域範圍很廣,包括從高級系統架構到基於 Web 的系統的設計細節等各種不同層次的抽象。
3.在前一版出版時,作為 OO 編程的概念來說, C++相對還是比較新的。
讀者告訴我們,這種強調不再是主要的考慮。現在有大量的 OO 編程和技術書籍及培訓,還有許多為 OO 開發而設計的程式語言。因此,大部分關於編碼的討論被刪除了。
4.最後,回響讀者的要求,這一版更關注 OOAD 建模方面。應用程式章
節將展示如何利用 UML,其中每一章強調了整個開發生命周期中的一個階段。
本書的目標
本書在面向對象系統構建方面提供了實用指導。它的具體目標如下。
提供對對象模型的基礎概念及其發展變化的正確理解;
幫助讀者掌握面向對象分析和設計的表示法和過程;
介紹在不同的問題域中面向對象分析和設計的實際套用。
本書介紹的概念都基於牢固的理論基礎,但本書首先是一本注重實效的書,面向架構師和軟體開發者等軟體工程實踐者的實際需要。
讀者對象
本書既是為計算機專業人員也是為學生編寫的。
對於實際系統和軟體的開發者,本書將展示如何高效地利用面向對象技術來解決實際問題。
對於系統分析師或架構師,本書將利用面向對象的分析與設計,提供一條從需求到實現的途徑。 我們幫助分析人員或架構師提高識別能力,以區分不好的面向對象的結構與好的面向對象的結構,並在現實情況反常時權衡可選的設計方案。也許最重要的就是,我們提供了一些讓複雜系統變得有條理的新方法。
對於項目經理,本書可以幫助他們更好地理解開發團隊的資源分配、軟體品質、測量指標以及管理與複雜軟體系統相關的風險。
對於學生,本書提供了一些必要的指導,使得學生能夠開始掌握複雜系統開發的科學與藝術中的一些重要技巧。
本書不僅適合專業研討班和個人學習使用, 也適合作為高等院校本科生和研究生課程的教材。因為它主要闡述了軟體開發的方法,所以非常適合軟體工程和高級編程等課程, 也可以作為涉及具體面向對象程式語言的課程的補充閱讀材料。
本書的組織結構
本書分成 3 篇:概念、方法和套用,其中穿插了大量的補充材料。
概念
第 1 篇研究軟體的內在複雜性及其表現方式。 本書將對象模型作為一種手段來幫助我們管理這種複雜性,詳細地研究了對象模型的基本元素——抽象、封裝、模組化、層次結構,討論了“什麼是類?”以及“什麼是對象?”等基本問題。由於確定有意義的類和對象是面向對象開發中的關鍵任務,因此我們花了相當多的時間來研究分類的本質。具體來說,我們研究了生物學、語言學和心理學等其他學科中的分類方法, 然後將這些經驗套用到發現軟體系統中類和對象的問題上。
方法
第 2 篇基於對象模型提出了複雜系統開發的一種方法。 針對面向對象的分
析與設計,首先提出了一套圖形表示法(即 UML),然後是一個通用的過程框架。還研究了面向對象開發的實踐,具體來說,就是它在軟體開發生命周期中的位置以及它對於項目管理意味著什麼。
應用程式
第 3 篇提供了一組( 5 個)不簡單的例子,涉及不同問題域:系統架構、控制系統、密碼分析、數據獲取和 Web 開發。之所以選擇這些問題域,是因為它們是軟體工程師實踐過程中遇到的複雜問題的代表。 展示某些原則如何套用於簡單的問題是很容易的, 但是因為我們關注的是為現實世界構建有用的系統,所以我們對如何將對象模型套用於複雜應用程式更加感興趣。軟體系統的開發不同於按菜譜做菜,因此我們強調應用程式的增量式開發,這種開發以一些正確的原則和良好的模型作為指導。
補充材料
本書中穿插了大量的補充材料。多數章節中都有補充材料,這些材料對重要的主題提供了相關的信息。本書包括了一個關於面向對象程式語言的附錄,其中總結了一些常見語言的特徵,還提供了常用術語的辭彙表,以及一個擴展的分類參考書目,列出了關於對象模型的參考資料。
工具說明
讀者總是會問創建本書中的圖使用了什麼工具。 我們主要使用兩個很好的工具來畫圖: IBM Rational Software Architect 和 Sparx Systems Enterprise Architect。為什麼不只用一個?市場的實際情況是,沒有哪一種工具可以做所有的事情。實踐 OOAD 的時間越長,最後就會發現有些特別的情況是所有工具都不支持的。(在這種情況下,可能需要尋求基本的繪圖工具來展示你的想法。)但是,不要讓這些很少的情況阻止你使用健壯的 OOAD 工具,如我們提到的這兩種工具。
本書的閱讀方法
對於本書可以一頁一頁地讀,也可以不按現有的組織形式閱讀。如果想對對象模型中的基本概念或面向對象開發的動機有較深的理解, 那么就應該從第1 章開始依次讀下去。如果只對面向對象開發分析與設計中的表示法和過程感興趣,就從第 5 章和第 6 章開始閱讀。第 7 章對使用這種方法管理項目的管理者來說特別有用。如果對針對特定問題域的面向對象技術的應用程式更感興趣,則可以在第 8~12 章中任選一章或者全部閱讀。