




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第二章軟件設(shè)計的層次
丁二玉南京大學(xué),軟件學(xué)院課程交流有明確的體系結(jié)構(gòu)設(shè)計過程嗎?如何完成?質(zhì)量如何評價?有明確的模塊與類結(jié)構(gòu)設(shè)計過程嗎?如何完成?質(zhì)量如何評價?程序代碼編寫過程有明確規(guī)范嗎?如何完成?質(zhì)量如何評價主要內(nèi)容低層設(shè)計:代碼設(shè)計中層設(shè)計:模塊與類結(jié)構(gòu)設(shè)計高層設(shè)計:體系結(jié)構(gòu)設(shè)計程序設(shè)計的建立1950s第一代語言,第二代語言語句為最小單位1960s第三代語言類型與函數(shù):第一次復(fù)雜系統(tǒng)分割1970s類型與函數(shù)的成熟:形式化方法數(shù)據(jù)結(jié)構(gòu)+算法=程序低層設(shè)計將基本的語言單位(類型與語句),組織起來,建立高質(zhì)量的數(shù)據(jù)結(jié)構(gòu)+算法常見設(shè)計場景:數(shù)組的使用,鏈表的使用,內(nèi)存的使用,遍歷算法,遞歸算法…經(jīng)典場景:堆棧,隊列,樹,排序算法,查找算法…質(zhì)量:數(shù)據(jù)結(jié)構(gòu)合理易用,算法高效易讀<計算機程序設(shè)計藝術(shù)>低層設(shè)計的本質(zhì)屏蔽程序中復(fù)雜數(shù)據(jù)結(jié)構(gòu)與算法的實現(xiàn)細節(jié)!評價:易讀,易維護抽象層接口層精化層實現(xiàn)層數(shù)據(jù)結(jié)構(gòu)的含義與使用算法的語義與復(fù)雜度結(jié)構(gòu)的類型定義存儲空間的使用與更改書寫控制語句分支的處理技巧對數(shù)據(jù)的操縱低層設(shè)計:代碼設(shè)計對一個方法/函數(shù)的內(nèi)部代碼進行設(shè)計又被稱為軟件構(gòu)造“softwareconstruction”,通常由程序員獨立完成依賴于語言提供的機制(程序設(shè)計課程)OOorStructuralReferenceorAddressPoint…有慣例用法(數(shù)據(jù)結(jié)構(gòu)課程)也存在一些方法與技巧(缺失?。┑蛯釉O(shè)計:代碼設(shè)計,常見技術(shù)防御式編程DefensiveProgramming斷言式編程AssertiveprogrammingDesign-by-Contract測試驅(qū)動開發(fā)Test-Drivenprogramming配置式編程ConfiguringProgramming表驅(qū)動編程Table-drivenProgramming基于狀態(tài)機編程State-machinebasedProgramming異常處理Errorhandling,exceptionhandling….低層設(shè)計:代碼設(shè)計推薦資源《代碼大全》《從小工到專家》《HowToWriteUnmaintainableCode》低層設(shè)計:代碼設(shè)計工具剖面性能分析切片工具主要內(nèi)容低層設(shè)計:代碼設(shè)計中層設(shè)計:模塊與類結(jié)構(gòu)設(shè)計高層設(shè)計:體系結(jié)構(gòu)設(shè)計程序的分割1970s模塊1980sOO模塊模塊化信息隱藏面向?qū)ο笤O(shè)計模式…模塊劃分模塊劃分將系統(tǒng)分成簡單片段片段有名字,可以被反復(fù)使用名字和使用方法稱為模塊的抽象與接口模塊內(nèi)部的程序片段為精華與實現(xiàn)模塊劃分:中層設(shè)計的開始模塊劃分隱藏一些程序片段(數(shù)據(jù)結(jié)構(gòu)+算法)的細節(jié),暴露接口于外界抽象層接口層精化層實現(xiàn)層數(shù)據(jù)結(jié)構(gòu)的含義與使用算法的語義與復(fù)雜度結(jié)構(gòu)的類型定義存儲空間的使用與更改書寫控制語句分支的處理技巧對數(shù)據(jù)的操縱程序細節(jié)模塊接口模塊化的初始考慮模塊劃分的質(zhì)量評價簡潔性Simplicity易開發(fā)易修改易復(fù)用可觀察性O(shè)bservability看上去“顯然是正確的”“ObviouslyCorrect”易開發(fā),易調(diào)試,易維護模塊化的目標:完全獨立性完全獨立有助于理解使用與復(fù)用開發(fā)修改模塊化的問題與困難程序片段之間不可能是完全獨立的方法:實現(xiàn)盡可能的獨立低耦合CouplingMinimizingtherelationshipsamongmodules高內(nèi)聚CohesionMaximizingrelationshipsamongelementsinthesamemodule模塊間的聯(lián)系鏈接:Connections對名字的使用或者對地址的訪問Aconnectionisareferencetosomelabeloraddressdefinedelsewhere耦合就是衡量模塊間鏈接的強度強度越小,模塊越獨立耦合強度衡量耦合層次THESESAREFORBIDDEN!模塊化的啟示要求:PrinciplesfromModularization1:GlobalVariablesConsiderHarmful2:TobeExplicit3:DonotRepeat4:ProgrammingtoInterface5:DesignbyContract內(nèi)聚的衡量:連接因素bindingCoincidentalBinding:NoBindingLogicalBinding:BindingbylogicalsimilarityTemporalBinding:SameTimeCommunicationalBinding:SameDataSequentialBinding:SameProblemFunctionalBinding:SamegoalInformationalBinding:SameAbstraction內(nèi)聚Equalcohesion!Forbidden!判斷內(nèi)聚
用一句話描述一個模塊如果只有一個簡單語句,功能內(nèi)聚組合語句,多個動詞
不是功能內(nèi)聚 …ClassA{
Private: FinancialReportfr; WeatherDatawd; Inttotalcount; Public: voidinit();}voidinit(){/*initializationModule*///initializesfinancialreportfr=new(FinancialReport);fr.setRatio(5);fr.setYear(”2010”);//initializescurrentweatherwd=new(WeatherData);wd.setCity(“Nanjing”);wd.setCode(“210093”);//initializesmastercounttotalcount=0;}信息隱藏:DavidParnas
模塊化方法1按照處理流程,每個功能一個模塊模塊化方法2信息隱藏每個模塊有1或多個秘密Eachmodulehasoneormore"secrets”每個模塊實現(xiàn)了一個重要決策,而且只有自己知道細節(jié)決策類型1:需求,即一個模塊的接口功能與模塊內(nèi)部的程序細節(jié)分離決策類型2:變化,將要發(fā)生變化的程序部分需要進行一個決策不同決策之間互相獨立《Onthecriteriatobeusedindecomposingsystemsintomodules》KWICExampleInput: barsock cardog townfog Output:
barsock cardog dogcar fogtown sockbar townfogFoursteps: Input Circularshift Alphabetize OutputIndex:Circularshiftpositions: 1510141823Alphabetize: 1101423518按功能設(shè)計按照信息隱藏設(shè)計Lineshowcharacters/linesarestoredCircularShifteralgorithmforshifting,storageforshiftsAlphabetizeralgorithmforalpha,lazinessofalpha可修改性比較可能的修改輸入數(shù)據(jù):(1,1)字符儲存:(all,1)字符打包:(all,1)更改轉(zhuǎn)置算法:(3,1)更改排序算法:(2,1模塊化與信息隱藏模塊化=按功能設(shè)計給出功能接口,隱藏功能實現(xiàn)程序的細節(jié)信息隱藏=模塊化+可修改性給出功能接口,隱藏功能實現(xiàn)程序的細節(jié)給出要修改部分的接口,隱藏待修改部分的實現(xiàn)程序細節(jié)不要只是按照流程設(shè)計信息隱藏的應(yīng)用:ModuleGuide為每一個模塊書寫一個規(guī)格說明:模塊在整個系統(tǒng)設(shè)計中扮演的角色,即承擔(dān)的功能模塊對外提供的接口主要秘密:模塊承擔(dān)的需求決策(0~N)來源與需求規(guī)格說明書次要秘密模塊承擔(dān)的修改決策(0~N)來源于對可修改性的預(yù)測在設(shè)計的高層,可以運行一個模塊有多個秘密在設(shè)計的細節(jié)層,一個模塊只能有一個秘密《TheModularStructureofComplexSystems》常見的可修改性決策hardwaredependenciesinputandoutputformatsnonstandardlanguagefeaturesandlibraryroutines;difficultdesignandimplementationareascomplexdatastructurescomplexlogicglobalvariablesConstraintsandbusinessrules<“MissinginAction:InformationHiding”>面向?qū)ο竽K化+可修改性=信息隱藏抽象數(shù)據(jù)類型屬于信息隱藏數(shù)據(jù)封裝屬于信息隱藏模塊化+信息隱藏+(抽象數(shù)據(jù)類型、封裝、繼承、多態(tài))=面向?qū)ο罄硐氲膶ο笮畔?nèi)聚代表現(xiàn)實世界中不超過一個事物功能內(nèi)聚只有一個目的信息隱藏只有一個秘密繼承符合多態(tài)思想LSP面向?qū)ο笤O(shè)計原則SingleResponsibilityPrinciple(SRP)Open/ClosedPrinciple(OCP)LiskovSubstitutionPrinciple(LSP)a.k.a.DesignbyContractDependencyInversionPrinciple(DIP)InterfaceSegregationPrinciple(ISP)中層設(shè)計隱藏程序片段(數(shù)據(jù)結(jié)構(gòu)+算法)的實現(xiàn)細節(jié),通過接口對外交互評價質(zhì)量標準:模塊化;信息隱藏;OO原則抽象層接口層精化層實現(xiàn)層數(shù)據(jù)結(jié)構(gòu)的含義與使用算法的語義與復(fù)雜度結(jié)構(gòu)的類型定義存儲空間的使用與更改書寫控制語句分支的處理技巧對數(shù)據(jù)的操縱程序細節(jié)對象、模塊主要內(nèi)容低層設(shè)計:代碼設(shè)計中層設(shè)計:模塊與類結(jié)構(gòu)設(shè)計高層設(shè)計:體系結(jié)構(gòu)設(shè)計Programming-in-the-SmallVS
Programming-in-the-Large
Programming-in-theSmall中低層設(shè)計的問題《Programming-in-the-SmallVS
Programming-in-the-Large》過于依賴細節(jié)連接與依賴,接口與實現(xiàn)忽略的關(guān)鍵因素:無法有效抽象部件的整體特性總體結(jié)構(gòu)質(zhì)量屬性大型軟件開發(fā)的一個根本不同是它更關(guān)注如何將大批獨立模塊組織形成一個“系統(tǒng)”,也就是說更重視系統(tǒng)的總體組織高層設(shè)計:體系結(jié)構(gòu)部件承載了系統(tǒng)主要的計算與狀態(tài)連接件承載部件之間的交互部件與連接件都是抽象的類型定義(就像類定義),它們的實例(就像類的對象實例)組織構(gòu)成軟件系統(tǒng)的整體結(jié)構(gòu),配置將它們的實例連接起來連接件是一個與部件平等的單位體系結(jié)構(gòu)示例AbstractspecificationVSImplementationArchitectureas-designVSas-implementationFunctionalorganizationsVSimplementedmechanismstosoftware軟件體系結(jié)構(gòu)設(shè)計的關(guān)鍵在大型軟件系統(tǒng)的開發(fā)中,質(zhì)量屬性是影響軟件系統(tǒng)復(fù)雜度的關(guān)鍵因素,軟件體系結(jié)構(gòu)是處理質(zhì)量屬性和控制復(fù)雜性的主要手段為什么質(zhì)量屬性在高層設(shè)計中是重要的?影響廣泛。與質(zhì)量屬性相關(guān)的設(shè)計決策可能會影響到軟件體系結(jié)構(gòu)的很多元素,甚至是絕大部分的元素。互相交織。質(zhì)量屬性之間并不是完全獨立的,它們可能互相沖突,也可能互相促進,這擴大了它們的影響范圍。易于被違反。因為與質(zhì)量屬性相關(guān)的設(shè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家裝施工方案范本
- 水電工法展示樣板施工方案
- 挖掘機打管樁施工方案
- 工廠環(huán)氧地坪工程施工方案
- 初一下人教版數(shù)學(xué)試卷
- 香港動力源國際有限公司股東全部權(quán)益價值資產(chǎn)評估報告
- 寧波復(fù)式屋頂花園施工方案
- 鋼結(jié)構(gòu)機電工程施工方案
- 玻璃鋼船體膠衣施工方案
- 智能工廠建設(shè)的關(guān)鍵要素分析
- 特種設(shè)備安全日管控-周排查-月調(diào)度制度-
- 司馬遷與《史記·管晏列傳》
- 口腔診所信息管理制度
- 內(nèi)科年終總結(jié)和工作計劃
- 浙江省大學(xué)生網(wǎng)簽協(xié)議書范文
- 政府合同范本(2篇)
- 深圳市保障性住房標準化設(shè)計圖集(一)
- 肺部感染臨床路徑
- 高中英語3500詞(亂序版)
- 新教材高中政治 4.2 實現(xiàn)中華民族偉大復(fù)興的中國夢說課稿 新人教版必修1
- 人美版美術(shù) 二年級下冊全冊教學(xué)設(shè)計(表格式)
評論
0/150
提交評論