本教程是與計算機軟件工程專業學生“軟件體系結構”課程配套的實訓教材,包括三個各為3~5周的實訓課程。全書共9章,分別是:第1章軟件架構設計實訓課程導論,第2章軟件的邏輯與思維訓練,第3章基于Arduino的前端開發,第4章基于樹莓派的開發與集成,第5章物聯網服務器的開發與集成,第6章STKUI的總體架構分析,第7章STKUI的基本功能分析與二次開發,第8章STKUI的擴展功能分析與二次開發,第9章面向服務的STKUI架構再造。其中第2章、第3~5章、第6~9章分別為三個完整的實訓課程,因為篇幅關系,分在各章中。三個實訓課程在軟件架構知識、學生認知能力、系統與項目開發規模與綜合體驗的復雜程度上,是三個遞進、迭代層次,目標分別是系統邏輯思維訓練、小系統開發與集成實訓、大型“企業級”應用系統分析與二次開發實訓。可根據學生情況和課程需要,分別或持續組織教學實施。由于是實訓課程教材,因此,教程僅僅在需要的地方,簡單回顧軟件架構設計有關的相關知識點和內容,全書重點是圍繞三個實訓的若干個項目,讓讀者從項目開發實踐中體會軟件架構設計的深度和廣度。教程配有全部PPT和項目源代碼,方便老師和學生使用。本書主要用作軟件工程相關專業的“軟件體系結構”課程的配套實訓課程,也可作為其他相關專業的教學用書,或作為從事軟件開發的科技人員的參考書、培訓教材等。
從軟件企業中的“碼農”成長為一名架構師,是不少IT人的“職業追求”,也是職業生涯中十分巨大的“成長跨越”。學校沒有合適的“教科書”,企業沒有合適的導師指導,很多時候只能靠自己的自發努力和悟性,成功率很低,希望本書內容可以幫到你。
與一般理論課程不同,本書完全以實戰形式設計課程中的項目開發目標、需求、開發過程、驗收標準,并結合學生實際情況教學和講解,包括作為二次開發基礎的項目背景與系統代碼、架構分析、二次開發的需求與實現技術方案設計與分析等。學生在這個基礎上完成實訓課程要求的二次開發任務,掌握相關知識,獲得相關訓練。
本教程以架構師培養為目標,安排了軟件邏輯思維訓練、小型系統集成實訓、企業級應用系統分析與二次開發實訓等三個不同認知和能力層次的實訓項目。三個項目在軟件架構知識深度,學生認知能力水平,系統與項目開發規模、復雜性,架構分析與設計綜合性等方面是三個遞進、迭代的層次,版主讀者通過實際開發訓練獲得架構設計體驗,提升能力。
第1章軟件架構設計實訓課程導論1
1.1實訓課程的培養目標1
1.1.1架構師是軟件開發的“老兵”2
1.1.2架構師的知識與能力積累3
1.1.3課程目標: “架構意識”的啟蒙4
1.2實訓課程的主要內容5
1.2.1實訓課程的主要內容和課時安排5
1.2.2傳統主課程的知識結構和內容安排6
1.2.3《軟件架構設計實踐教程》的知識結構和內容安排6
1.2.4與《軟件架構設計實踐教程》的互補性7
1.2.5如何使用本教程8
1.3實訓課程計劃與考核9
1.3.1軟件邏輯體驗實訓課程計劃9
1.3.2樹莓派系統開發與集成實訓課程計劃10
1.3.3企業級系統分析與二次開發實訓課程11
1.3.4考試方法與成績評定12
1.3.5實訓課程考核的思路12
1.4實訓課程的課程資源14
1.4.1課程資源14
1.4.2參考書目14
1.5實訓課程的難點與關鍵點14
1.5.1大系統與小系統的區別15
1.5.2引進大型系統的難度15
1.6構建完整的實訓課程體系17
1.6.1構建完整實訓體系的目標與指導思想17
1.6.2主課程改革的三階段總體設計18
1.6.3配套進行的實訓課程三階段設計20
1.6.4實訓課程的企業本質20第2章軟件的邏輯與思維訓練22
2.1從代碼到架構的邏輯思維層次22
2.1.1邏輯與程序邏輯23
2.1.2程序邏輯與算法邏輯25
2.1.3超越程序和算法的系統邏輯26
2.1.4邏輯架構與架構邏輯29
2.2邏輯思維訓練的實訓設計31
2.2.1本次實訓課程的目標31
2.2.2本次實訓課程的時機安排32
2.2.3本次實訓的二次開發項目選擇32
2.2.4本次實訓課程的授課方法33
2.2.5項目二次開發的意義 33
2.2.6平臺選擇34
2.2.7實訓課程的意義和價值檢驗34
2.2.8課程要求35
2.2.9動手能力基礎35
2.2.10師傅帶徒弟式的教學方法36
2.3理解程序邏輯36
2.3.1讀懂別人程序的辦法37
2.3.2看什么不看什么38
2.3.3萬年歷代碼的模塊抽取38
2.3.4歸納出程序的邏輯流程圖41
2.3.5增加農歷的具體實現步驟分解42
2.3.6計算農歷的代碼42
2.3.7顯示農歷的代碼43
2.3.8課程小結44
2.4從程序到算法44
2.4.1修改程序44
2.4.2簡單改進需求的實現45
2.4.324點計算的第一次優化47
2.4.4更復雜的情況 49
2.4.5課程小結49
2.5從算法到業務邏輯50
2.5.1五子棋程序的系統構成50
2.5.2模塊劃分與子系統設計54
2.5.3添加“人機對弈”功能的系統實現方案 55
2.5.4智能機器人58
2.5.5課程總結61
2.6感受架構邏輯思維62
2.6.1推箱子游戲的新需求介紹62
2.6.2系統層面的新需求分析 64
2.6.3推箱子程序的主程序代碼分析66
2.6.4推箱子的move模塊代碼分析 67
2.6.5推箱子模塊的修改70
2.6.6關鍵質量屬性需求 71
2.6.7推箱子的關鍵機制分析73
2.6.8課程小結 75第3章基于Arduino的前端開發77
3.1從“碼工”到架構師77
3.1.1“系統級”應用的概念78
3.1.2從“碼工”到架構師的沉淀80
3.1.3“企業級”系統學習與實踐的缺失81
3.2小型系統開發與集成實訓82
3.2.1本次實訓課程的目標83
3.2.2本次實訓課程的課時計劃84
3.2.3實驗設備配置86
3.2.4本次實訓的二次開發項目選擇87
3.2.5本次實訓課程的授課方法88
3.2.6實訓課程的意義、價值與檢驗88
3.3樹莓派應用開發與參賽89
3.3.1樹莓派與物聯網89
3.3.2樹莓派與云計算92
3.3.3樹莓派與大數據 93
3.4應用平臺選擇與體驗95
3.4.1物聯網應用系統的邏輯與物理架構95
3.4.2物聯網應用系統的邏輯和運行架構96
3.4.3配置樹莓派97
3.4.4實現樹莓派的遠程登錄101
3.4.5讓樹莓派成為samba文件服務器105
3.4.6讓樹莓派成為Web服務器108
3.4.7讓樹莓派成為媒體服務器110
3.4.8課程小結112
3.5用樹莓派GPIO控制LED113
3.5.1認識樹莓派的GPIO113
3.5.2GPIO接口編程體驗117
3.5.3使用函數庫實現GPIO接口控制121
3.6了解Arduino開發平臺125
3.6.1Arduino平臺介紹126
3.6.2Windows環境下的Arduino IDE127
3.6.3樹莓派環境下的Arduino IDE131
3.6.4樹莓派與Arduino IDE通信131
3.7用DHT11獲取溫度135
3.7.1DHT11溫濕度傳感器簡介135
3.7.2DHT11傳感器的技術指標136
3.7.3連接電路136
3.7.4DHT11的時序137
3.7.5硬件接線138
3.7.6DHT11傳感器信息采集軟件138
3.7.7編譯運行140
3.8用四位數碼管顯示溫度141
3.8.1四位共陰數碼管介紹141
3.8.2數碼管接口說明141
3.8.374HC595的控制邏輯142
3.8.4數碼管的片選與刷新143
3.8.5代碼說明143
3.9課程小結146第4章基于樹莓派的開發與集成147
4.1樹莓派平臺集成的需求147
4.2選擇樹莓派上的PyQt界面框架148
4.3顯示樹莓派CPU溫度的界面150
4.4前端Arduino與樹莓派通信集成153
4.5實現溫度顯示與控制的集成155
4.6課程小結156第5章物聯網服務器的開發與集成158
5.1與Yeelink服務器集成159
5.1.1物聯網服務器Yeelink的功能與局限159
5.1.2Yeelink的接入設備與存儲數據類型160
5.1.3在Yeelink上創建自己的設備和傳感器161
5.1.4HTTP協議簡介162
5.1.5有關Requests 164
5.1.6有關JSON庫167
5.1.7上傳數據到Yeelink168
5.1.8Yeelink服務器的客戶端APP170
5.2開發自己的云服務器應用170
5.2.1搭建蘇寧云服務器環境171
5.2.2把應用搬到云服務器上去175
5.2.3開發自己的Web應用178
5.2.4樹莓派與Web服務器交互178
5.2.5搭建一個Web網站179
5.2.6在云上直接控制樹莓派點亮LED184
5.3將本例改造成電梯群控系統186
5.3.1電梯群控的物理架構與系統集成187
5.3.2電梯群控的運行架構與功能邊界劃分187
5.3.3電梯群控的邏輯架構與系統信息交互188
5.3.4電梯群控的可行性分析189
5.4參加物聯網創意大賽190
5.4.1參賽的項目層面考慮191
5.4.2從獲獎項目中了解參賽的機會與目標192
5.4.3關注數據來源194
5.4.4關注數據采集方式195
5.4.5關注數據應用195
5.5階段課程小結195第6章STKUI的總體架構分析197
6.1軟件系統分析的基本概念197
6.1.1軟件系統分析的目標與過程198
6.1.2軟件架構的五個基本架構描述方法201
6.1.3軟件架構分析的UML描述方法202
6.1.4基于架構的軟件系統分析204
6.1.5軟件系統的逆向分析205
6.1.6應用系統的關鍵需求與架構206
6.1.7基于軟件工程過程文檔的系統分析206
6.1.8理解企業級應用系統的基礎與應用框架208
6.2股票軟件的功能與實現要點209
6.2.1股票軟件功能及其軟件實現概述209
6.2.2股票行情功能及其軟件實現212
6.2.3股票指標分析功能及其軟件實現214
6.2.4股票交易功能及其軟件實現215
6.3STKUI系統的物理架構分析216
6.3.1STKUI的物理架構216
6.3.2STKUI物理架構分析的意義216
6.4STKUI系統的開發架構分析217
6.4.1STKUI系統的9個開發工程包217
6.4.2STKUI開發架構分析與綜述221
6.4.3理解軟件系統開發架構的意義和作用222
6.5STKUI系統的運行架構分析222
6.5.1系統登錄與數據接口界面223
6.5.2STKUI的功能層次結構223
6.5.3STKUI菜單、工具條按鈕與功能窗口226
6.5.4STKUI運行架構的評價與改進228
6.6STKUI系統的邏輯架構分析230
6.6.1理解MFC的應用程序框架231
6.6.2從菜單追蹤到代碼235
6.6.3邏輯架構分析中的繼承關系與調用關系239
6.6.4STKUI的類與繼承關系240
6.6.5STKUI的類與調用關系244
6.6.6STKUI的全局變量245
6.7STKUI系統的數據架構分析245第7章STKUI的基本功能分析與二次開發247
7.1股票軟件系統的分析與二次開發實訓247
7.1.1本次實訓課程的目標247
7.1.2本次實訓課程的課時計劃249
7.1.3本次實訓的二次開發項目選擇249
7.1.4實訓課題的意義、價值與檢驗250
7.2股票用戶圖形界面的實現分析與二次開發250
7.2.1MFC文檔與視圖的簡單回顧250
7.2.2STKUI所使用的第三方用戶界面框架252
7.2.3STKUI的窗口實現255
7.2.4STKUI的菜單與工具條實現257
7.2.5Qt5及其用戶界面開發260
7.2.6基于Qt5+VS 2010的STKUI用戶界面二次開發264
7.2.7STKUI移植的可行性實驗266
7.2.8STKUI的移植開發271
7.3股票分時行情顯示的實現分析與二次開發271
7.3.1STKUI的行情功能271
7.3.2STKUI的分時曲線繪制及其軟件實現273
7.3.3STKUI行情功能的二次開發276
7.4股票指標分析的實現分析與二次開發277
7.4.1股票指標分析算法概述277
7.4.2股票指標分析的軟件實現281
7.4.3股票指標分析的二次開發294
7.5STKUI數據接口的實現分析與二次開發298
7.5.1有關接口的概念298
7.5.2STKUI的數據接口分析300
7.5.3從接口到硬盤306
7.5.4通過接口獲得實時數據308
7.5.5有關數據接口的二次開發309
7.6STKUI數據存儲結構的實現分析311
7.6.1STKUI的數據存儲311
7.6.2STKUI的數據獲取過程315
7.6.3數據的使用方法320
7.7課程小結322第8章STKUI的擴展功能分析與二次開發323
8.1策略模型的建立與模擬交易分析324
8.1.1策略及其意義 324
8.1.2STKUI策略系統的功能實現分析328
8.1.3STKUI策略的實現代碼分析 332
8.1.4STKUI策略實現的改進與二次開發336
8.2基于策略模擬的程序化交易實現338
8.2.1STKUI的程序交易338
8.2.2一個程序交易程序的DEMO340
8.2.3程序交易接口的概念341
8.2.4通達信程序化交易接口342
8.2.5程序交易的實現方案349
8.2.6從策略模擬到量化投資352
8.3基于盤口的數據技術分析354
8.3.1什么是“盤口”355
8.3.2盤口數據與Level2355
8.3.3基于盤口Level2的數據分析軟件358
8.3.4盤口數據程序來源于接口364
8.3.5基于盤口數據的二次開發368
8.4股票的大數據分析與應用370
8.4.1大數據技術的基本概念370
8.4.2股市輿情的大數據分析372
8.4.3熱點股票的大數據輿情分析373
8.4.4 “百度股市通”軟件374
8.4.5第三維看股374
8.5課程小結376第9章面向服務的STKUI架構再造377
9.1面向服務的系統新需求377
9.1.1機構可提供的股票服務378
9.1.2面向股票服務的新需求379
9.2面向服務需求與架構關系分析380
9.2.1STKUI功能與架構的關系380
9.2.2面向服務的關鍵質量需求382
9.2.3DAlpha系統的架構藍圖參考384
9.3FB2K的架構設計新思路與參考385
9.3.1FB2K的用戶界面框架樣式386
9.3.2FB2K界面框架與插件的載入與使用設置388
9.3.3架構師眼中的FB2K插件邏輯390
9.3.4面向對象設計模式的工廠方法392
9.3.5FB2K SDK工廠方法的運用396
9.3.6SDK部分代碼分析399
9.4輕量級行業框架的系統架構設計403
9.4.1框架與行業應用框架的概念403
9.4.2輕量級框架的概念404
9.4.3面向股票的行業框架與輕量化方案405
9.5輕量級框架下的插件開發406
9.5.1業務插件的分類407
9.5.2業務插件的加載方式407
9.5.3加載業務插件的呈現408
9.5.4業務插件的接口標準409
9.5.5業務插件的開發實現409
9.6面向服務的SOA架構分析411
9.6.1服務提供的架構和機制411
9.6.2面向服務的SOA架構413
9.6.3SOA架構的實現機制415
9.6.4基于SOA的應用案例需求416
9.6.5基于SOA特色的應用案例實現418
9.7基于SOA的公式自定義設計與實現 423
9.7.1股票軟件公式的自定義423
9.7.2華泰專業版Ⅱ的公式自定義功能425
9.7.3STKUI的公式自定義功能實現427
9.7.4面向服務的公式自定義設計與實現430
9.8階段課程小結432參考文獻433