軟件設(shè)計是軟件開發(fā)的核心活動,軟件設(shè)計理論的發(fā)展推動著軟件工程的發(fā)展。本書梳理了基礎(chǔ)的軟件設(shè)計理論,可幫助讀者更好地理解各種軟件設(shè)計技術(shù)。全書共分為5章,第1章介紹軟件設(shè)計基礎(chǔ)原則;第2章介紹程序設(shè)計,幫助讀者深刻認識程序設(shè)計工作背后的機理,而不是僅僅停留在掌握一門或幾門程序設(shè)計語言上;第3章介紹復雜軟件設(shè)計,重點包括模塊化設(shè)計、信息隱藏與設(shè)計原則;第4章介紹軟件設(shè)計方法學,指導讀者用系統(tǒng)化、規(guī)范化的方式開展軟件設(shè)計活動,解決軟件設(shè)計問題;第5章介紹大規(guī)模軟件系統(tǒng)設(shè)計,關(guān)注可靠性、效率、可移植性、市場特性、人員與分工等各種要素。
本書適合作為軟件工程相關(guān)專業(yè)本科生和研究生的教材,也可作為軟件領(lǐng)域相關(guān)技術(shù)人員的參考書。
本書面向軟件設(shè)計初學者和有一定經(jīng)驗的軟件設(shè)計師,介紹和探討軟件設(shè)計活動中蘊藏的基礎(chǔ)理論和原則,突出軟件設(shè)計關(guān)鍵理論和決策中的質(zhì)量和審美追求,包括程序設(shè)計與正確性、復雜軟件設(shè)計與模塊化、信息隱藏及其背后的可修改性等質(zhì)量、大規(guī)模系統(tǒng)體系結(jié)構(gòu)設(shè)計與可靠性等系統(tǒng)質(zhì)量。主要特點總結(jié)和探討了軟件設(shè)計的基礎(chǔ)要素,包括軟件設(shè)計的根本目標、衡量標準、抽象與分解、物理與邏輯、設(shè)計決策等。基于基礎(chǔ)要素分析各種軟件設(shè)計方法和技術(shù)的關(guān)鍵考慮點,包括結(jié)構(gòu)化編程理論、類型、模塊化、信息隱藏、軟件設(shè)計方法學、軟件體系結(jié)構(gòu)理論等。始終貫徹軟件設(shè)計的基礎(chǔ)要素,尤其是質(zhì)量和審美觀念,分析不同規(guī)模軟件設(shè)計活動對方法和技術(shù)的要求,包括小規(guī)模軟件的程序正確性,中大規(guī)模系統(tǒng)的可修改性,大規(guī)模軟件系統(tǒng)的可靠性、性能、安全等。結(jié)合案例解釋較為晦澀難懂的設(shè)計方法和技術(shù),力求做到深入淺出。
前 言
軟件設(shè)計是軟件開發(fā)的核心活動,軟件設(shè)計理論的發(fā)展推動著軟件工程的發(fā)展。很多基礎(chǔ)的軟件設(shè)計理論因為產(chǎn)生時間較早,已經(jīng)很少被人提及,但它們?nèi)匀皇抢斫廛浖O(shè)計、做好軟件設(shè)計活動的基礎(chǔ)。
本書的目的是重新將這些基礎(chǔ)的軟件設(shè)計理論梳理出來,作為學習軟件設(shè)計新方法的基礎(chǔ),幫助讀者更好地理解各種軟件設(shè)計技術(shù)。
本書的基本思路是:
1)介紹最為基礎(chǔ)的軟件設(shè)計理論,包括結(jié)構(gòu)化編程理論、類型、模塊化、信息隱藏、面向?qū)ο笤O(shè)計原則、軟件設(shè)計方法學、軟件體系結(jié)構(gòu)理論等。這些理論構(gòu)成了不同階段、不同類型軟件設(shè)計活動的基礎(chǔ)。
2)始終貫徹軟件設(shè)計最為重要的質(zhì)量觀念。從小規(guī)模軟件的程序正確性,到中大規(guī)模系統(tǒng)的可修改性,再到大規(guī)模軟件系統(tǒng)的可靠性、性能、安全性等質(zhì)量,關(guān)注各種設(shè)計理論對這些質(zhì)量的滿足能力。
3)書中設(shè)計了大量案例,通過案例解釋較為晦澀難懂的設(shè)計方法和技術(shù),力求做到深入淺出。
4)探索軟件設(shè)計的根本目標、衡量標準、抽象與分解、物理與邏輯等較為深入的內(nèi)容,希望能幫助讀者更深刻地理解軟件設(shè)計。
在過去的數(shù)年間,作者多次嘗試寫作本書,都因為各種緣由耽擱下來。直到這次,終于有時間完成。其中必有不足之處,希望后續(xù)能在讀者的反饋中完善。有建議和意見的讀者可以聯(lián)系eryuding@hotmail.com。
本書寫作過程中,得到了家人和朋友的大力支持。非常感謝他們,沒有他們的鼓勵,我可能沒有毅力堅持完成本書的寫作。
作者
2024年1月于南京
曾任職南京大學軟件學院教師、院長助理,主講軟件需求工程和軟件設(shè)計課程。先后多次獲得國家級、省部級教學獎項,出版著作多部。
近些年創(chuàng)立源圖品牌,從事軟件產(chǎn)業(yè)的人才數(shù)字化管理工作,包括崗位勝任力定義、能力測評、個性化培養(yǎng)、人才畫像與盤點等,成功服務(wù)于數(shù)十家國內(nèi)頭部金融企業(yè)和數(shù)百家軟件企業(yè)。
目錄
前言
第1章 軟件設(shè)計基礎(chǔ)原則 1
1.1 什么是軟件設(shè)計 1
1.1.1 設(shè)計是一種“規(guī)劃” 1
1.1.2 軟件的材料載體與廣義的軟件設(shè)計內(nèi)涵 2
1.1.3 狹義的軟件設(shè)計內(nèi)涵 2
1.2 為什么要進行軟件設(shè)計 2
1.3 復雜度控制的關(guān)鍵之一: 設(shè)計分層 3
1.3.1 分層抽象方法 3
1.3.2 軟件設(shè)計的分層 3
1.3.3 設(shè)計層次驗證 4
1.3.4 軟件設(shè)計分層要點 4
1.3.5 產(chǎn)品設(shè)計與工程設(shè)計 5
1.4 復雜度控制的關(guān)鍵之二:關(guān)注點分離 6
1.4.1 分離設(shè)計主題 6
1.4.2 多視點方法 6
1.5 軟件設(shè)計的目標與衡量標準 7
1.5.1 根本標準:功能、質(zhì)量、審美 8
1.5.2 設(shè)計目標和衡量標準應(yīng)用示例 8
1.5.3 功能是設(shè)計方案的特征 12
1.5.4 質(zhì)量是工程設(shè)計的重點 12
1.5.5 審美是超越合格達到優(yōu)秀的路徑 14
1.5.6 軟件設(shè)計的結(jié)果是一種折中與妥協(xié) 16
1.6 外部表現(xiàn)與內(nèi)部結(jié)構(gòu) 17
1.6.1 軟件設(shè)計的重點是堅固、優(yōu)雅的內(nèi)部結(jié)構(gòu) 17
1.6.2 外部表現(xiàn)和內(nèi)部結(jié)構(gòu)的區(qū)分示例 17
1.6.3 抽象、分解與層次結(jié)構(gòu) 21
1.6.4 常見的設(shè)計對象及其外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 23
1.6.5 設(shè)計整個系統(tǒng)時區(qū)分外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 24
1.6.6 設(shè)計模塊時區(qū)分外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 25
1.6.7 設(shè)計類時區(qū)分外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 29
1.6.8 設(shè)計數(shù)據(jù)結(jié)構(gòu)時區(qū)分外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 33
1.6.9 設(shè)計代碼時區(qū)分外部表現(xiàn)和內(nèi)部結(jié)構(gòu) 34
1.7 邏輯設(shè)計與物理設(shè)計 35
1.7.1 載體介質(zhì)及其匹配 35
1.7.2 區(qū)分邏輯設(shè)計與物理設(shè)計 35
1.7.3 設(shè)計數(shù)據(jù)類型時邏輯設(shè)計與物理設(shè)計的失配 36
1.7.4 設(shè)計數(shù)據(jù)結(jié)構(gòu)時邏輯設(shè)計與物理設(shè)計的失配 37
1.7.5 設(shè)計面向?qū)ο髾C制時邏輯設(shè)計與物理設(shè)計的失配 37
1.7.6 設(shè)計模塊時邏輯設(shè)計與物理設(shè)計的失配 38
1.7.7 設(shè)計質(zhì)量時邏輯設(shè)計與物理設(shè)計的失配 38
1.8 軟件設(shè)計是持續(xù)決策的過程 39
1.8.1 設(shè)計結(jié)果與設(shè)計過程 39
1.8.2 決策的要素 39
1.8.3 設(shè)計是一個跳躍性過程,驗證設(shè)計是一個推理過程 40
1.8.4 選擇一個可行答案,沒有唯一正確答案 40
1.8.5 設(shè)計決策有順序影響,而且影響不可逆 41
1.8.6 設(shè)計約束:是友非敵 41
1.9 工程與藝術(shù) 42
1.9.1 工程設(shè)計與藝術(shù)設(shè)計 42
1.9.2 理性主義與經(jīng)驗主義 42
1.9.3 設(shè)計兼具科學性與藝術(shù)性 43
1.10 總結(jié) 43
第2章 程序設(shè)計 44
2.1 如何保證程序正確性 44
2.1.1 像設(shè)計硬件一樣設(shè)計軟件嗎 44
2.1.2 測試不能保證正確性 45
2.1.3 用程序設(shè)計方法實現(xiàn)正確性 45
2.2 結(jié)構(gòu)化編程與功能正確性 46
2.2.1 使用簡單結(jié)構(gòu)—三種控制結(jié)構(gòu) 46
2.2.2 使用塊結(jié)構(gòu)組織復雜代碼 48
2.2.3 兼顧正確性與復雜度控制:函數(shù)/方法 54
2.3 數(shù)據(jù)抽象、類型與數(shù)據(jù)操作正確性 55
2.3.1 類型 55
2.3.2 結(jié)構(gòu)化類型:強正確性保證 56
2.3.3 非結(jié)構(gòu)化類型:弱正確性保證 57
2.3.4 復雜抽象數(shù)據(jù)類型(數(shù)據(jù)結(jié)構(gòu))及其質(zhì)量 60
2.4 程序契約與正確性 62
2.4.1 前置條件與后置條件 62
2.4.2 不變量 63
2.4.3 程序契約的局限性 64
2.5 面向?qū)ο缶幊膛c可復用性 64
2.5.1 可復用性需要的出現(xiàn) 64
2.5.2 面向?qū)ο缶幊膛c可復用性 65
2.5.3 類和對象 65
2.5.4 封裝 68
2.5.5 繼承 71
2.5.6 多態(tài) 73
2.6 軟件構(gòu)造與更多代碼質(zhì)量 73
2.6.1 什么是軟件構(gòu)造 73
2.6.2 軟件構(gòu)造技術(shù)與代碼質(zhì)量 74
2.6.3 軟件構(gòu)造技術(shù)示例 75
2.7 總結(jié) 81
第3章 復雜軟件設(shè)計 82
3.1 控制更高的復雜度需要模塊 82
3.1.1 模塊 82
3.1.2 模塊分解質(zhì)量與模塊化、信息隱藏 83
3.2 模塊化 83
3.2.1 模塊分割的質(zhì)量考慮 83
3.2.2 理想中的模塊分割—完全獨立 83
3.2.3 現(xiàn)實中的模塊分割—低耦合、高內(nèi)聚 84
3.2.4 代碼組織及聯(lián)系方式分析 84
3.3。ńY(jié)構(gòu)化)函數(shù)/方法之間的耦合 86
3.3.1 內(nèi)容耦合 86
3.3.2 公共耦合 88
3.3.3 控制耦合 90
3.3.4 印記耦合 92
3.3.5 數(shù)據(jù)耦合 95
3.3.6 隱式的耦合 97
3.3.7 函數(shù)/方法之間的耦合小結(jié) 100
3.4。ńY(jié)構(gòu)化)函數(shù)/方法的內(nèi)聚 101
3.4.1 偶然內(nèi)聚 102
3.4.2 邏輯內(nèi)聚 102
3.4.3 時間內(nèi)聚 103
3.4.4 過程內(nèi)聚 104
3.4.5 通信內(nèi)聚 106
3.4.6 順序內(nèi)聚 107
3.4.7 功能內(nèi)聚 108
3.4.8 函數(shù)/方法的內(nèi)聚小結(jié) 110
3.5。嫦?qū)ο螅╊?對象之間的耦合 110
3.5.1 類/對象之間的耦合類型 110
3.5.2 方法之間的