本書主要介紹統(tǒng)一建模語言及其應用。首先介紹面向?qū)ο蠓椒ㄅc軟件過程、面向?qū)ο蠓治、面向(qū)ο笤O(shè)計、面向?qū)ο蟪绦蛟O(shè)計等與面向?qū)ο筌浖こ滔嚓P(guān)的內(nèi)容,然后基于UML 2.5.1 規(guī)范,介紹UML的基本概念、用例模型與用例圖、類模型與類圖、狀態(tài)機與狀態(tài)機圖、活動圖、交互圖、包圖、組件圖和部署圖等常用的模型和圖,后以一個學生選課系統(tǒng)的案例研究綜合展示了幾個模型。每章后面都附有思考題。本書以面向?qū)ο蟪绦蛟O(shè)計語言Java作為模型的實現(xiàn)語言,使用StarUML作為建模工具,不僅闡述UML圖的語法,還強調(diào)模型與代碼的映射。書后有三個附錄: StarUML、UML標準版型和中英文術(shù)語對照。 本書可作為計算機專業(yè)高年級本科生和電子信息專業(yè)碩士學位研究生學習UML與面向?qū)ο蠼5慕滩,也可作為軟件開發(fā)人員自學UML與面向?qū)ο筌浖こ痰膮⒖紩?/p>
(1)以控制復雜性作為軟件設(shè)計哲學理念,從依賴關(guān)系和可理解性兩個角度組織內(nèi)容。
(2)強調(diào)從模型到代碼的映射,方便讀者根據(jù)程序設(shè)計語言的語義理解圖形元素的語義。
(3)區(qū)分建立UML模型和編輯UML圖的工程過程,分離UML模型元素和圖形元素。
當前,軟件已經(jīng)融入社會生活的各個角落,成為一種社會服務。遺憾的是,軟件服務的提供者感到服務的構(gòu)建越來越復雜;軟件服務的客戶感到對軟件系統(tǒng)的變更越來越困難,對服務供應商的變更也越來越困難。其本質(zhì)原因在于軟件的復雜性。
結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄊ强刂栖浖到y(tǒng)復雜性的有效方法。面向數(shù)據(jù)流的功能分解、把對數(shù)據(jù)流的變換映射到模塊是結(jié)構(gòu)化分析和設(shè)計方法的要點;把現(xiàn)實世界問題空間的事物映射到計算機系統(tǒng)內(nèi)求解空間的對象,通過對象間消息的交互完成業(yè)務功能則是面向?qū)ο筌浖_發(fā)方法的范型。
控制復雜性的另外一個方面是控制軟件的可理解性。結(jié)構(gòu)化方法使用數(shù)據(jù)流圖、數(shù)據(jù)字典、程序流程圖,使得人們不必學習計算機程序設(shè)計語言就能理解軟件的結(jié)構(gòu)和行為;統(tǒng)一建模語言(UML)綜合了各種對象建模模型,成為工業(yè)界流行的建模語言,支持UML的建模工具也很多。用例模型、類模型和狀態(tài)機等為早期軟件開發(fā)階段的分析提供了表達工具;交互圖(順序圖、協(xié)作圖、交互概覽圖和時序圖)和活動圖有力地表達了面向?qū)ο蟮脑O(shè)計決策和業(yè)務流程;包圖、組件圖和部署圖則更多關(guān)注實現(xiàn)和部署。
大多數(shù)理工科的畢業(yè)生都至少學習過一門高級程序設(shè)計語言,程序設(shè)計語言中的控制結(jié)構(gòu)、模塊調(diào)用、人機交互等概念形成軟件服務的利益相關(guān)者理解軟件行為的本體。另外,建立模型的終目標也是為了得到可運行的程序。所以本書把從模型到代碼的映射作為范式,使得讀者能夠根據(jù)源代碼的語義理解UML模型或者UML圖的語義。
全書內(nèi)容分為三部分: 面向?qū)ο蠓缎汀ML以及案例研究。面向?qū)ο蠓缎筒糠纸榻B面向?qū)ο蠓椒ā⒓夹g(shù)以及面向?qū)ο筌浖こ踢^程。從控制依賴復雜性角度,介紹了架構(gòu)設(shè)計、設(shè)計模式等;從可理解性角度出發(fā),還介紹了編碼規(guī)范和軟件質(zhì)量等內(nèi)容。UML部分根據(jù)UML 2.5.1介紹了常用的UML模型和UML圖。使用StarUML作為建模工具,該工具支持模型元素與圖形元素分離。后一部分內(nèi)容是一個綜合案例面向?qū)ο蟮膶W生選課系統(tǒng)開發(fā)。該案例以迭代開發(fā)方式,依次設(shè)計和構(gòu)建了無界面無持久化設(shè)施的控制臺應用版本、無界面并以文件作為持久化設(shè)施的應用版本、無界面以MySQL數(shù)據(jù)庫管理系統(tǒng)作為持久化設(shè)施的應用版本、有桌面圖形用戶界面但無持久化設(shè)施的GUI版本以及基于Web的版本。通過該案例,不僅展示了如何應用面向?qū)ο蟮姆椒ê图夹g(shù)構(gòu)造系統(tǒng),還展示了界面、業(yè)務邏輯和持久化等重要的架構(gòu)設(shè)計概念。
三個附錄依次是如何使用建模工具StarUML、UML標準版型和中英文術(shù)語對照表。
書中所用案例是2012年以來作者面向?qū)I(yè)碩士講授的學位基礎(chǔ)課面向?qū)ο筌浖こ趟褂玫陌咐木啺,該案例?019年被評為省級專業(yè)學位教學案例(庫)。其他內(nèi)容是在講義的基礎(chǔ)上進一步修改和補充資料而成。在UML章節(jié),每章都是先介紹模型元素,再介紹UML圖的語法和語義,后是一個小型案例研究。所有章節(jié)后面均有思考題。
限于學識,書中不當和疏漏之處敬請讀者批評指正。
董東于河北師范大學2021年8月
主講課程本科生課程2門:Java面向?qū)ο蟪绦蛟O(shè)計(河北師范大學雙語示范課程)、編譯原理;主講研究生課程2門:面向?qū)ο蠹夹g(shù) 高級軟件工程。
第1章面向?qū)ο蠓椒ㄅc過程/1
1.1控制軟件復雜性1
1.2面向?qū)ο蠓缎?
1.2.1面向?qū)ο笳Z言的發(fā)展4
1.2.2面向?qū)ο蠓缎偷幕靖拍?
1.2.3面向?qū)ο蟪绦蛟O(shè)計語言Java8
1.2.4面向?qū)ο蟪绦蛟O(shè)計的特點13
1.2.5面向?qū)ο蟪绦蛟O(shè)計的原則17
1.3面向?qū)ο蟮能浖_發(fā)方法23
1.4軟件開發(fā)過程24
1.4.1軟件開發(fā)過程概述24
1.4.2統(tǒng)一軟件開發(fā)過程26
1.4.3RUP 4 1視圖26
1.4.4RUP主要概念28
1.4.5RUP軟件生命周期31
思考題32
第2章面向?qū)ο蠓治?33
2.1分析技術(shù)34
2.1.1名詞動詞分析34
2.1.2基于對象關(guān)系的分析38
2.1.3角色分析38
2.1.4基于場景的分析39
2.1.5類職責協(xié)作者分析40
2.2質(zhì)量需求分析42
思考題45
第3章面向?qū)ο笤O(shè)計/46
3.1軟件體系結(jié)構(gòu)風格48
3.1.1Layer風格49UML面向?qū)ο蠓治雠c設(shè)計目錄3.1.2Tier風格50
3.1.3模型視圖控制器54
3.1.4面向服務的架構(gòu)56
3.1.5微服務架構(gòu)57
3.2組消息通信模式58
3.2.1消息隊列58
3.2.2發(fā)布/訂閱58
3.3設(shè)計模式59
3.3.1單例模式60
3.3.2抽象工廠模式61
3.3.3工廠方法模式62
3.3.4原型模式64
3.3.5建造者模式65
3.3.6適配器67
3.3.7外觀模式68
3.3.8代理模式70
3.3.9策略模式72
3.3.10觀察者模式74
3.3.11迭代器模式78
3.3.12訪問者模式79
3.3.13命令模式81
3.4模塊設(shè)計83
3.4.1內(nèi)容耦合84
3.4.2公用耦合85
3.4.3控制耦合85
3.4.4標記耦合87
3.4.5數(shù)據(jù)耦合87
3.4.6例程調(diào)用耦合87
3.4.7類型使用耦合88
3.4.8導入耦合88
3.4.9外部耦合88
思考題89
第4章實現(xiàn)與維護/90
4.1代碼習慣用語90
4.1.1對象相等equals()方法的實現(xiàn)90
4.1.2生成某區(qū)間內(nèi)的隨機整數(shù)91
4.1.3tryfinally塊91
4.1.4驗證實在參數(shù)92
4.1.5遍歷時刪除92
4.2代碼異味93
4.3代碼規(guī)范95
4.4可維護性101
4.5重構(gòu)103
思考題106
第5章UML概述/109
5.1UML的作用109
5.2UML的發(fā)展111
5.3UML的特點113
5.4UML建模工具113
5.4.1StarUML114
5.4.2Enterprise Architect114
5.4.3Rational Software Architect115
思考題116
第6章UML基本概念/117
6.1類型和多重性117
6.2名字空間118
6.3特征集119
6.4關(guān)聯(lián)124
6.5依賴126
6.6約束128
6.7類129
6.8模型和圖130
6.9概要圖132
思考題133
第7章用例模型與用例圖/134
7.1用例模型134
7.2用例圖136
7.3用例的規(guī)格說明139
7.4建立用例模型141
7.4.1尋找參與者的方法142
7.4.2識別用例142
7.4.3識別用例關(guān)系142
7.5案例研究145
思考題147
第8章類模型與類圖/150
8.1類模型150
8.1.1定義類的屬性150
8.1.2類的操作151
8.1.3類之間的關(guān)系153
8.2類圖160
8.2.1類的記號160
8.2.2實體類、控制類和邊界類161
8.2.3類之間的關(guān)系162
8.3建立類模型166
8.3.1識別類167
8.3.2識別關(guān)系167
8.3.3識別屬性168
8.3.4識別操作168
8.4對象關(guān)系映射168
8.4.1關(guān)系模型168
8.4.2把類映射到關(guān)系169
8.5對象圖172
8.6案例研究173
思考題176
第9章狀態(tài)機與狀態(tài)機圖/179
9.1狀態(tài)機179
9.1.1狀態(tài)180
9.1.2轉(zhuǎn)移180
9.1.3事件181
9.2狀態(tài)機圖181
9.2.1狀態(tài)的記號182
9.2.2轉(zhuǎn)移183
9.2.3區(qū)域184
9.2.4狀態(tài)的內(nèi)部行為184
9.2.5偽狀態(tài)185
9.3建立狀態(tài)機圖188
9.4案例研究189
思考題191
第10章活動圖/193
10.1模型元素193
10.1.1令牌194
10.1.2可執(zhí)行節(jié)點的執(zhí)行194
10.1.3控制節(jié)點的執(zhí)行195
10.1.4對象節(jié)點與對象令牌195
10.1.5異常196
10.1.6活動組196
10.2活動圖196
10.2.1動作節(jié)點和對象節(jié)點197
10.2.2邊199
10.2.3控制節(jié)點200
10.2.4分區(qū)202
10.3繪制活動圖204
10.4案例研究205
思考題207
第11章交互圖/208
11.1順序圖208
11.1.1生命線208
11.1.2消息210
11.1.3交互片段213
11.1.4順序圖的繪制方法222
11.2協(xié)作圖222
11.3交互概覽圖224
11.4時序圖225
11.5案例研究227
思考題233
第12章物理模型/235
12.1包圖235
12.1.1包與包之間的關(guān)系236
12.1.2包的歸并238
12.1.3案例研究240
12.1.4設(shè)計包的原則24312.2組件圖245
12.2.1組件245
12.2.2案例研究248
12.3部署圖249
12.3.1部署圖的組成249
12.3.2案例研究251
思考題251
第13章面向?qū)ο蟮膶W生選課系統(tǒng)開發(fā)/254
13.1引言254
13.2用例模型254
13.3類模型255
13.3.1名詞短語分析255
13.3.2確定關(guān)聯(lián)類256
13.3.3識別屬性256
13.3.4識別方法258
13.4把類模型映射到代碼259
13.5控制臺應用269
13.5.1創(chuàng)建接口269
13.5.2創(chuàng)建實現(xiàn)類272
13.5.3運行一個業(yè)務場景279
13.6使用文件作為持久化設(shè)置282
13.6.1從文件記錄創(chuàng)建對象282
13.6.2封裝持久化細節(jié)284
13.6.3運行同一個業(yè)務場景292
13.7使用MySQL作為持久化設(shè)施293
13.7.1準備數(shù)據(jù)庫和建表294
13.7.2創(chuàng)建數(shù)據(jù)庫訪問實用類296
13.7.3運行業(yè)務場景306
13.8圖形用戶界面307
13.8.1界面需求分析308
13.8.2開發(fā)工具準備308
13.8.3設(shè)計309
13.9Web應用313
`13.9.1準備開發(fā)環(huán)境313
13.9.2設(shè)計基于Web的學生選課系統(tǒng)314思考題323
附錄AStarUML/325
附錄BUML標準版型/329
附錄C中英文術(shù)語對照/331
參考文獻/335