本書得到全國高等院校計算機基礎教育研究會立項支持。本書對軟件體系結構和軟件設計的基本原理和實例進行了系統(tǒng)的闡述,包括軟件體系結構的定義和研究內(nèi)容、經(jīng)典軟件體系結構風格、分布式軟件體系結構風格、MVC風格與Struts框架、軟件設計的目標、面向對象軟件設計方法、設計原則、設計模式等內(nèi)容。本書在介紹軟件體系結構和軟件設計原理的前提下,特別注重實用性。書中含有大量精心設計的程序實例,方便讀者學習。本書集作者多年的教學經(jīng)驗編寫而成,語言通俗易懂,內(nèi)容安排合理,講解深入淺出。本書適合為普通高等學校軟件工程專業(yè)、計算機科學與技術專業(yè)以及信息類相關專業(yè)本科生和研究生的教材,也可作為軟件工程培訓教材,以及軟件開發(fā)人員的參考書。
軟件設計與體系結構是軟件工程專業(yè)的核心課程。根據(jù)教育部高等學校計算機科學與技術教學指導委員會制定的《軟件工程(本科)專業(yè)規(guī)范》,本課程主要是在學習軟件工程概論的基礎上,進一步深入學習軟件體系結構和軟件設計,從而提高軟件的質量。本書面向普通高等學校的學生和從事軟件開發(fā)以及相關領域的工程技術人員,緊密結合軟件工程專業(yè)規(guī)范,覆蓋規(guī)范中軟件設計與體系結構課程要求的知識單元和知識點;同時,充分考慮普通高等院校學生的實際情況,加強實踐教學的內(nèi)容。
作者根據(jù)多年的教學和軟件開發(fā)經(jīng)驗,對本書的內(nèi)容取舍、組織編排和實例都進行了精心設計。在難易程度上遵循由淺入深、循序漸進的原則,特別考慮到普通高等學校本科學生的實際理解和接受能力。與以往許多軟件工程相關教材主要以理論為主不同,本書突出實踐性,將復雜的理論融于具體的實例和程序之中。書中的實例都是經(jīng)過精心設計的,程序代碼都認真做了調(diào)試,可以直接運行,方便讀者理解和使用。同時,為了培養(yǎng)學生自學的能力、獲取知識的能力,在編寫本書的過程中,作者力圖在內(nèi)容編排、敘述方法上留有教師發(fā)揮的空間和學生自學的空間。
全書共分9章,第1章講述軟件體系結構和軟件設計的基本概念;第2章講述軟件體系結構的定義、組件與連接件、軟件體系結構等內(nèi)容;第3章講述經(jīng)典軟件體系結構風格,包括主程序-子程序風格、面向對象風格、批處理風格、管道/過濾器風格、層次風格、基于事件的隱式調(diào)用風格、倉庫風格、解釋器風格、反饋控制環(huán)風格等;第4章講述分布式軟件體系結構風格,包括兩層C/S、三層C/S、B/S、P2P以及中間件等;第5章講述MVC風格的概念及其應用、Struts框架的原理;第6章講述軟件設計的目標,包括正確性、健壯性、可復用性、可維護性和高效性等;第7章講述面向對象軟件設計,包括問題域部分、人機交互部分、數(shù)據(jù)管理部分和任務管理部分;第8章講述軟件設計原則,包括開-閉原則、里氏代換原則、合成/聚合復用原則、依賴倒轉原則、迪米特法則、接口隔離原則和單一職責原則等;第9章從原理、結構和示意源代碼三方面介紹主要的創(chuàng)建型設計模式、結構型設計模式和行為型設計模式。
本書由劉其成、畢遠偉主編,其中:第1~8章由劉其成編寫,第9章由畢遠偉編寫,劉霄、王瑩潔、王凱、蘇浩、鮑凱麗、龐書杰參與了部分內(nèi)容的編寫。劉其成設計了全書的結構,并做了全書的統(tǒng)稿工作。
在本書的編寫過程中,參閱了大量書籍和網(wǎng)站等資料,得到了童向榮教授及中國鐵道出版社的支持和幫助,在此表示衷心感謝。
本書得到全國高等院校計算機基礎教育研究會立項支持。
盡管書稿幾經(jīng)修改,但由于作者學識有限,書中仍難免有疏漏與不當之處,懇請各位同仁、讀者不吝賜教。
編 者
2018年5月
第1章 概述 1
1.1 軟件工程方法學 1
1.1.1
結構化方法 1
1.1.2
面向對象方法 3
1.2 軟件設計與體系結構 5
習題 6
第2章 軟件體系結構 7
2.1 軟件體系結構的定義 7
2.2 組件與連接件 8
2.2.1
組件 8
2.2.2
連接與連接件 9
2.2.3
實例 10
2.3 軟件體系結構的研究內(nèi)容
14
2.4 軟件體系結構風格 18
習題 20
第3章 經(jīng)典軟件體系結構風格 21
3.1 調(diào)用-返回風格 21
3.1.1
主程序-子程序風格 21
3.1.2
面向對象風格 23
3.2 數(shù)據(jù)流風格 28
3.2.1
批處理風格 28
3.2.2
管道/過濾器風格 30
3.3 基于事件的隱式調(diào)用風格
34
3.3.1
原理 34
3.3.2
實例 35
3.4 層次風格 41
3.4.1
原理 41
3.4.2
實例 42
3.5 倉庫風格 45
3.5.1
原理 45
3.5.2
實例 46
3.6 解釋器風格 47
3.6.1
原理 47
3.6.2
實例 48
3.7 反饋控制環(huán)風格 50
3.7.1
原理 50
3.7.2
實例 51
習題 53
第4章 分布式軟件體系結構風格
54
4.1 概述 54
4.2 兩層C/S體系結構風格 55
4.2.1
原理 55
4.2.2
實例 57
4.3
P2P體系結構風格 67
4.4 三層C/S體系結構風格 68
4.5
B/S體系結構風格 70
4.5.1
原理 70
4.5.2
實例 72
4.6
C/S與B/S混合軟件體系結構 74
4.6.1
原理 74
4.6.2
實例 75
4.7 中間件 76
4.7.1
中間件簡介 76
4.7.2
分布式系統(tǒng)中的中間件 79
習題 82
第5章 MVC風格與Struts框架 83
5.1
MVC風格 83
5.1.1
MVC風格概述 83
5.1.2
MVC在Java EE中的應用 85
5.1.3
實例 87
5.2
Struts框架 94
5.2.1
Struts框架概述 94
5.2.2
Struts框架的組件 96
5.2.3
實例 100
習題 104
第6章 軟件設計的目標 105
6.1 概述 105
6.1.1
基本概念 105
6.1.2
實例與分析 106
6.2 健壯性 106
6.2.1
概念與實例 106
6.2.2
Java異常處理機制 108
6.3 可復用性 110
6.3.1
基本概念 110
6.3.2
例子 110
6.4 可維護性 112
6.4.1
基本概念 112
6.4.2
實例 112
6.5 高效性 119
6.6 軟件設計度量、軟件再工程和逆向工程 120
習題 120
第7章 軟件設計面向對象方法
122
7.1 問題域部分的設計 122
7.1.1
復用已有的類 122
7.1.2
增加一般類 123
7.1.3
對多重繼承的調(diào)整 123
7.1.4
對多態(tài)性的調(diào)整 129
7.1.5
提高性能 130
7.2 人機交互部分的設計 134
7.2.1
概述 134
7.2.2
可視化編程環(huán)境下的人機界面設計策略 134
7.2.3
界面類與問題域類間通信的設計 138
7.3 數(shù)據(jù)管理部分的設計 138
7.3.1
概述 138
7.3.2
針對關系數(shù)據(jù)庫的數(shù)據(jù)存儲設計 139
7.3.3
設計數(shù)據(jù)管理部分的其他方法 146
7.4 控制驅動部分的設計 146
7.4.1
概述 146
7.4.2
系統(tǒng)的并行/并發(fā)性 147
7.4.3
設計控制驅動部分的方法 153
習題 158
第8章 設計原則 160
8.1 概述 160
8.1.1
軟件系統(tǒng)的可維護性 160
8.1.2
系統(tǒng)的可復用性 161
8.1.3
可維護性復用、設計原則和設計模式 162
8.2 開-閉原則 162
8.2.1
概念 162
8.2.2
實現(xiàn)方法 163
8.2.3
與其他設計原則的關系 163
8.2.4
實例 163
8.3 里氏代換原則 164
8.3.1
概念 164
8.3.2
Java語言與里氏代換原則 165
8.3.3
實例 166
8.4 依賴倒轉原則 170
8.4.1
倒轉的含義 170
8.4.2
概念 171
8.4.3
實例 173
8.5 合成/聚合復用原則 177
8.5.1
概念 177
8.5.2
合成/聚合復用與繼承復用 178
8.5.3
實例 178
8.6 迪米特法則 180
8.6.1
概念 180
8.6.2
實例 182
8.7 單一職責原則 184
8.7.1
概念 184
8.7.2
實例 185
8.8 接口隔離原則 185
8.8.1
概念 185
8.8.2
實例 186
習題 188
第9章 設計模式 189
9.1 概述 189
9.2 創(chuàng)建型模式 190
9.2.1
簡單工廠模式 191
9.2.2
工廠方法模式 193
9.2.3
抽象工廠模式 196
9.2.4
單例模式 200
9.2.5
原型模式 201
9.2.6
建造者模式 205
9.3 結構型模式 208
9.3.1
外觀模式 209
9.3.2
適配器模式 212
9.3.3
橋接模式 214
9.3.4
組合模式 217
9.3.5
裝飾模式 220
9.3.6
代理模式 223
9.3.7
享元模式 225
9.4 行為型模式 229
9.4.1
模板方法模式 229
9.4.2
策略模式 232
9.4.3
狀態(tài)模式 234
9.4.4
責任鏈模式 236
9.4.5
命令模式 239
9.4.6
觀察者模式 242
9.4.7
中介者模式 245
9.4.8
迭代器模式 248
9.4.9
訪問者模式 251
9.4.10
備忘錄模式 254
9.4.11
解釋器模式 257
習題 261
參考文獻 262