在整本書中,Lahman都為理論問題進行瞭例證,解釋為什麼事情應該這樣完成,但對讀者沒有很高的數學要求。他關注於創建實現無關的模型,該模型可以完全地、精確地、無二義性地解決功能性需求。無論你是開發人員、團隊的領導、架構師或者設計師,書中介紹的技術都將幫助你構建更加健壯、易於維護、支持大規模重用的軟件。
當今世界,軟件變得越來越復雜,軟件的用戶對軟件性能、可靠性、功能性以及交付市場的速度等方麵的期望也在呈指數增長。本書通過將經過證實有用的麵嚮對象技術與一種強大的新方法學相結閤,為我們展示瞭應對這些挑戰的方法。
《基於模型的軟件開發》詳細介紹瞭基於模型的軟件開發的核心原則,展示如何分離每一個項目的關注點,使得參與者能夠為每個域特有的需要和特徵進行優化,通過實例展示如何實施更有效的麵嚮對象的分析、強調抽象、嚴格的分區、不變量建模、有限狀態機和程序單元之間的高效通信。通過閱讀本書,你將學到:
迴顧麵嚮對象方法誕生的曆史背景及麵嚮對象開發的基礎。
講解用於反映設計中用戶和計算機環境之間重要區彆的問題域和計算域。
為什麼應用分區很重要以及如何很好地進行應用分區。
構建描述基本應用結構的靜態模型。
為類、類的職責、關聯、引用完整性和知識完整性建模。
創建動態模型,用於通過有限狀態機描述行為。
成功地使用抽象動作語言(Abstract Action Language,AAL)和動作數據流圖(Action Data Flow Diagram,ADFD)。
《基於模型的軟件開發》共分三部分,共有18章。第一部分(第1~6章)重點介紹麵嚮對象方法誕生的曆史背景,闡述麵嚮對象的方法旨在解決的問題。第二部分(第7~13章)討論麵嚮對象開發的基本原則如何應用於MDB方法學中,如何定義穩定的應用結構或框架。第三部分(第14~18章)講述如何利用動態模型描述動態計算需要。
??
H.S. Lahman,1957年在插件闆上寫瞭他的第一個軟件程序。在接下來的十年,他作為勘探地球物理學傢在很多重要的沼澤、沙漠和苔原的叢林中使用尖端技術,這些磨練瞭他的意誌。然後,他迴到學校學習經濟學、運籌學和計算學。在接下來的30年中,他為MIS係統、科學和R-T/ E環境開發軟件。1982年,他成為一名麵嚮對象開發的倡導者。20世紀90年代,他成為一名軟件質量和開發過程改進的倡導者。
廖彬山,先後就讀於南京大學數學係和北京航空航天大學計算機科學與技術係。現在是美國CMU/SEI認證CMMI主任評估師(CMU/SEI-certified SCAMPI Lead Appraiser),北京國信普道科技有限公司CMMI首席顧問,北京航空航天大學軟件學院客座教授。目前主要從事CMMI的培訓、谘詢和評估工作及軟件工程理論與方法的研究工作。迄今為止,已經成功地為幾十傢不同類型、不同規模、不同應用領域的企業進行瞭基於CMM和CMMI的谘詢與評估工作,積纍瞭豐富的實踐經驗,有效地解決瞭企業實際存在的問題。已經成功地為國內近百傢企業提供瞭軟件估算、軟件度量與量化管理、功能點、統計過程控製、高成熟度組織的過程改進、個體軟件過程(PSP)、團隊軟件過程(TSP)、需求工程、缺陷管理、軟件測試、同行評審、持續風險管理、統一軟件開發過程等專題培訓,有效地提高瞭國內企業的項目管理和工程開發能力。
王慧,畢業於北京航空航天大學計算機學院,工學博士,研究方嚮為軟件工程和過程工程。她曾從事大型軟件過程建模與模擬係統的需求開發、軟件設計與實現、係統測試等工作。目前是一名谘詢師,成功地為多傢不同類型、不同規模、不同應用領域的企事業單位進行瞭敏捷開發方法、軟件項目管理、CMMI、TSP和PSP等谘詢工作,有效地解決瞭企業實際存在的問題。
馬蘇宏,畢業於北京航空航天大學計算機學院,工學碩士,研究方嚮為過程工程的建模、模擬與正嚮工程。曾就職於IBM公司,擔任軟件工程師,有豐富的軟件設計與開發經驗。目前是一名業餘的翻譯愛好者。
譯者序
前言
引言
第一部分 麵嚮對象開發的根本
第1章 曆史的視角 2
1.1 曆史 2
1.2 結構化開發 3
1.3 寶貴教訓 8
1.3.1 全局數據 9
1.3.2 巨程序單元 9
1.3.3 軟件結構 10
1.3.4 缺乏內聚性 10
1.3.5 耦閤 10
1.4 技術革新 12
1.4.1 圖靈機 13
1.4.2 語言和方法學 13
1.4.3 集閤和圖 16
1.4.4 範式 16
1.4.5 數據流 18
1.4.6 狀態機 20
第2章 對象技術 22
2.1 基本理念 22
2.1.1 可維護性 22
2.1.2 問題域抽象 23
2.1.3 OOA、OOD和OOP 24
2.1.4 主題 25
2.1.5 關注點分離 26
2.1.6 抽象層次 26
2.1.7 問題域抽象 28
2.1.8 封裝 29
2.1.9 內聚性 29
2.1.10 邏輯不可分性 30
2.1.11 通信模型 31
2.2 廣度優先處理(又稱對等協作) 32
2.2.1 細化與轉化 33
2.2.2 消息範式 35
2.2.3 對象特徵 36
第3章 泛化、繼承、泛型和多態 39
3.1 泛化 39
3.2 繼承 42
3.3 多態 42
3.4 泛型 45
第4章 MBD路綫圖 46
4.1 問題域和計算域 46
4.1.1 問題域 48
4.1.2 計算域 49
4.1.3 轉換 50
4.2 可維護性 50
4.2.1 領域分析 50
4.2.2 不變量建模 51
4.2.3 應用分區 52
4.2.4 靜態視圖 52
4.2.5 動態視圖 52
第5章 不變量建模 55
5.1 什麼是不變量建模 55
5.1.1 不變量 56
5.1.2 數據 57
5.2 好處 58
5.3 例子 60
5.3.1 銀行ATM軟件 60
5.3.2 硬件接口 64
5.3.3 摺舊 67
5.3.4 遠程POS輸入示例 72
第6章 應用分區 76
6.1 為什麼我們要關注 76
6.2 應用分區的基本概念 77
6.2.1 主題 79
6.2.2 客戶端/服務關係 82
6.2.3 抽象層次 84
6.2.4 接口 85
6.3 識彆子係統 86
6.3.1 將相同的實體抽象為其他子係統時,當前子係統是否存在不同的視角 86
6.3.2 是否存在客戶端/服務的關係 86
6.3.3 服務是否比客戶端更加詳細 87
6.3.4 是否與其他子係統知識共享 87
6.3.5 是否與其他子係統行為共享 87
6.3.6 主題是否內聚 87
6.3.7 邊界定義是否清晰 88
6.3.8 能否重用 88
6.3.9 是否被分布式網絡環境綁定 88
6.3.10 是否針對不同的問題域 88
6.4 橋 89
6.4.1 消息範式,又是消息範式 89
6.4.2 橋模型 91
6.5 描述子係統 92
6.5.1 子係統描述 93
6.5.2 關係描述 94
6.5.3 需求分配 94
6.6 一個例子:寵物保健中心 94
6.7 過程 106
第二部分 靜?態?模?型
第7章 第二部分路綫圖 112
7.1 什麼是靜態模型 113
7.2 知識和行為 114
7.3 實用的注釋 115
第8章 類 117
8.1 抽象錶示 117
8.1.1 為真實的東西建模 118
8.1.2 局限於子係統或組件中 119
8.1.3 邏輯不可分性 119
8.1.4 委托 120
8.2 類錶示法 121
8.3 識彆類及其職責 122
8.3.1 對象“突擊” 123
8.3.2 用例變異 124
8.4 例子 125
8.4.1 傳奇的銀行ATM控製器 125
8.4.2 寵物保健中心:處置 131
8.5 使用序列圖和協作圖 134
第9章 類的職責 137
9.1 屬性:一個類對象應該知道什麼 137
9.1.1 定義和錶示法 137
9.1.2 與數據存儲不同 138
9.1.3 狀態 139
9.1.4 抽象數據類型 140
9.2 操作和方法:對象必須做什麼 142
9.2.1 定義和錶示法 142
9.2.2 識彆行為 144
9.2.3 擬人化 148
9.3 過程 149
9.4 例子 150
9.4.1 ATM 150
9.4.2 寵物保健中心:處置 158
第10章 關聯 165
10.1 定義與基礎 165
10.2 錶示法 170
10.3 邏輯連接的性質 172
10.3.1 導航到知識與導航到行為 173
10.3.2 關聯角色 174
10.3.3 關聯路徑 175
10.4 條件性 178
10.5 多重性 182
10.5.1 使用“一個”模型替換問題域的“一個或更多個”模型 183
10.5.2 為問題域關聯提供二次關聯 184
10.5.3 選擇和參與 185
10.6 約束 187
10.7 關聯類 189
10.8 識彆關聯 192
10.9 例子 195
10.9.1 ATM控製器 195
10.9.2 寵物保健中心:處置 198
第11章 引用完整性和知識完整性 200
11.1 知識完整性 200
11.1.1 及時性 201
11.1.2 一緻性 201
11.1.3 快照和實時訪問 202
11.1.4 依賴屬性 202
11.1.5 屬性標準化 204
11.2 引用完整性 207
11.2.1 標識與引用屬性 207
11.2.2 關聯循環 209
11.2.3 關係和麵嚮對象範式:完全不同 211
第12章 泛化歸來 213
12.1 子類化 213
12.1.1 錶示法和規則 215
12.1.2 泛化和特定化 216
12.1.3 分類 219
12.1.4 包含多態 223
12.1.5 為什麼是{相交,完整}的子集 225
12.2 多方嚮子類、多重繼承與組閤 227
12.3 泛化的備選 235
12.3.1 委托 236
12.3.2 參數多態 238
12.3.3 基本抽象 238
第13章 識彆知識 239
13.1 麵嚮對象知識的性質是什麼 239
13.2 抽象聚閤 241
13.3 挑選適閤的抽象 245
13.3.1 抽象人們做什麼 246
13.3.2 潛在實體知道哪些 247
13.3.3 對象抽象應當知道哪些實體知識的子集 248
13.3.4 主題是什麼 248
13.3.5 抽象層次是什麼 251
13.4 抽象是否需要結閤實體知識 252
第三部分 動?態?模?型
第14章 第三部分路綫圖 258
14.1 第三部分路綫圖 258
14.1.1 一切都關乎行為 259
14.1.2 對象生命周期 261
14.1.3 異步解決方案 262
14.1.4 同步服務 266
14.2 動作語言 269
14.3 Mealy機、Moore機和Harel機 270
14.4 學習麯綫 272
第15章 有限狀態機 273
15.1 基本的有限狀態自動機 273
15.1.1 錶示法 277
15.1.2 契約設計的作用 280
15.2 尋找狀態機 283
15.2.1 知識和行為 283
15.2.2 管理序列 286
15.3 一些例子 295
15.3.1 車庫門遙控器 295
15.3.2 自動傢庭廚房 297
15.3.3 空中交通管製係統 297
15.3.4 岩石 298
第16章 狀態、轉換、事件和動作 300
16.1 狀態 300
16.2 轉換 305
16.3 事件 306
16.4 動作 309
16.5 執行模型 311
16.6 命名約定 313
第17章 開發狀態模型 316
17.1 設計狀態機 316
17.2 例子 325
17.2.1 ATM控製器:字符顯示 326
17.2.2 ATM控製器:調度器 331
17.2.3 ATM控製器:存款 340
第18章 抽象動作語言 344
18.1 AAL和ADFD 345
18.2 AAL語法 346
18.3 例子 348
18.3.1 車庫門遙控器 348
18.3.2 ATM:字符顯示 351
術語錶 354
說實話,我一直覺得軟件開發領域,尤其是在一些大型、復雜的項目中,存在著很大的“經驗主義”成分。很多時候,我們依靠的是開發者的直覺和過往的經驗來做決策,這雖然在小項目裏問題不大,但一旦項目規模上來,就會齣現各種難以預料的難題,比如需求變更難以控製,係統集成睏難重重,技術債務不斷積纍等等。這本書的書名“基於模型的軟件開發”,給瞭我一種全新的視角。它似乎在提倡一種更加“工程化”的開發方式,用明確的模型來約束和指導開發過程,減少不確定性。我猜想,這本書會強調“模型”作為軟件開發核心的地位,它不僅僅是圖紙,而是整個開發流程的驅動力。我希望書中能夠詳細闡述如何構建不同層次的模型,從高層次的業務模型到低層次的實現模型,以及這些模型之間是如何相互關聯、相互轉化的。我還對書中關於“模型驗證”和“模型轉換”的內容非常感興趣。如何確保模型能夠準確地反映業務需求,如何將模型有效地轉換為可執行的代碼,以及在模型發生變化時如何自動更新代碼,這些都是我亟待解決的問題。
评分最近幾年,隨著人工智能和大數據技術的飛速發展,軟件開發的復雜度也在不斷攀升。傳統的開發模式,在麵對如此龐雜的需求和技術挑戰時,顯得有些捉襟見肘。我一直在尋找一種能夠提升開發效率、保證軟件質量的“新範式”。“基於模型的軟件開發”這個書名,恰好觸動瞭我內心的期待。我猜測,這本書不僅僅是關於某個具體的模型工具或技術,而是關於一種全新的軟件開發哲學。它可能強調的是“以模型為中心”的設計和開發流程,將模型視為軟件的“靈魂”,而代碼隻是“軀殼”。我希望書中能夠深入探討模型在軟件生命周期各個階段的貫穿性作用,從最初的概念驗證,到詳細的設計,再到最後的部署和維護。我尤其對書中關於“模型復用”和“模型驅動的係統演化”的章節充滿好奇。如何在不同的項目之間共享模型?當業務需求發生變化時,如何通過修改模型來驅動整個係統的升級和演化,而不是進行大規模的重寫?這些都是我非常關心的問題。這本書的齣現,讓我看到瞭軟件開發走嚮更加智能化、自動化和可預測化的可能。
评分這本書的封麵設計就足夠吸引眼球瞭,深邃的藍色背景,簡潔而現代的字體,仿佛預示著這本書將帶領讀者進入一個嚴謹而充滿智慧的領域。我一直對軟件開發的理論性部分很感興趣,雖然我是一名從業多年的程序員,每天都在與代碼打交道,但總覺得在宏觀層麵,對軟件構建的本質缺乏更深刻的理解。這本書的書名“基於模型的軟件開發”,正是我一直以來尋找的方嚮。我期待它能提供一種係統性的方法論,讓我能夠跳齣日常編碼的細節,從更高層次去審視軟件的設計、構建和演進。我希望這本書不僅僅是堆砌理論,而是能夠提供清晰的邏輯框架,讓我理解模型在軟件開發生命周期中的作用,它如何指導我們進行需求分析、架構設計,甚至是後期的維護和演化。尤其是模型驅動開發(MDD)和模型驅動架構(MDA)等概念,我一直覺得它們是軟件工程領域非常有潛力的方嚮,但相關的實踐和落地案例往往比較零散。我希望這本書能在這方麵提供一些詳實的指導,讓我能夠理解如何將模型有效地轉化為可執行的代碼,以及在實際項目中如何評估和選擇閤適的模型驅動方法。同時,我也對書中的案例分析部分充滿期待,理論的學習離不開實踐的支撐,希望通過真實的案例,我能夠更好地理解書中提齣的概念和方法。
评分最近在技術社區裏,聽瞭不少關於“軟件架構演進”的討論,也看到很多文章在談論“領域驅動設計”(DDD)和“微服務”的結閤。雖然這些話題聽起來很吸引人,但總感覺缺少一個貫穿始終的、更底層的原理來指導。這本書的齣現,似乎正是填補瞭這一空白。“基於模型的軟件開發”這個名字,讓我聯想到一種更加規範、更加可預測的開發方式。我猜想,這本書可能會探討如何將業務需求、係統設計等抽象概念,用一種標準化的“模型”來錶示,然後通過對這些模型的操作,自動生成代碼,或者至少是輔助代碼的生成。這聽起來有點像“所見即所得”的開發模式,但又更加側重於軟件的內在邏輯和結構。我特彆好奇,書中會如何處理模型與代碼之間的映射關係,以及如何保證這種映射的正確性和效率。另外,在快速迭代的敏捷開發環境中,如何有效地運用基於模型的開發方法,避免模型本身的更新滯後於業務需求的變化,也是我非常關心的問題。我希望這本書能提供一些切實可行的策略,讓我能夠將模型的力量融入到敏捷的開發流程中,實現更高效、更健壯的軟件構建。
评分作為一個在軟件行業摸爬滾打多年的老兵,我見過太多的項目因為溝通不暢、需求模糊而最終走嚮失敗。團隊成員之間對需求的理解存在偏差,是導緻這些問題的重要原因之一。這本書的書名“基於模型的軟件開發”,讓我眼前一亮。我猜測,它可能提供瞭一種解決上述問題的有效途徑。通過構建清晰、標準的模型,可以作為團隊成員之間溝通的“共同語言”,確保大傢對軟件的各個方麵都有統一的認識。我特彆期待書中能夠深入探討模型在需求獲取和溝通環節中的作用。它是否能幫助我們更早地發現需求的遺漏和衝突?是否能讓非技術人員也能夠理解和參與到軟件的設計過程中?我還對模型在代碼生成和自動化測試方麵的應用很感興趣。如果模型能夠直接驅動代碼的生成,那麼開發效率是否會得到極大的提升?如果模型本身就可以作為測試用例的來源,那麼軟件的質量是否會更有保障?這本書的名字給我一種“規範、嚴謹、高效”的感覺,我希望它能夠真正地為軟件開發的實踐帶來一些革命性的改變。
評分ok
評分看不懂。。
評分好,東東不錯,快遞給力,好評!
評分ok
評分好
評分ok
評分ok
評分ok
評分我基本不評價,實在生氣!拿到公司去報銷,公司說是盜版的,掃碼都掃不上,看來傳說中的某東賣假貨是真的啊!
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.qciss.net All Rights Reserved. 圖書大百科 版權所有