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