




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計準(zhǔn)則設(shè)計準(zhǔn)則I正確性和健壯性正確性和健壯性正確性和充分性正確性和充分性 正確性:每個項目都要滿足指定的需求,正確性:每個項目都要滿足指定的需求,然后一起滿足所有應(yīng)用程序的需求然后一起滿足所有應(yīng)用程序的需求 問題越明確,就能提供越精確的設(shè)計來問題越明確,就能提供越精確的設(shè)計來解決問題解決問題 設(shè)計的正確性通常是指充分性設(shè)計的正確性通常是指充分性 實現(xiàn)正確性的正規(guī)方法是依靠數(shù)學(xué)邏輯實現(xiàn)正確性的正規(guī)方法是依靠數(shù)學(xué)邏輯實現(xiàn)正確性的途徑實現(xiàn)正確性的途徑 非正式方法:判斷設(shè)計是否滿足所需的非正式方法:判斷設(shè)計是否滿足所需的功能功能 正式方法:包含了用數(shù)學(xué)邏輯的方法來正式方法:包含了用數(shù)學(xué)邏輯的方法來分
2、析變量變化的方向分析變量變化的方向 設(shè)計進入詳細(xì)設(shè)計階段時,經(jīng)常采用正設(shè)計進入詳細(xì)設(shè)計階段時,經(jīng)常采用正式方法來判斷正確性式方法來判斷正確性實現(xiàn)正確性的途徑實現(xiàn)正確性的途徑 非正式方法:判斷設(shè)計是否滿足所需的非正式方法:判斷設(shè)計是否滿足所需的功能功能 正式方法:包含了用數(shù)學(xué)邏輯的方法來正式方法:包含了用數(shù)學(xué)邏輯的方法來分析變量變化的方向分析變量變化的方向 設(shè)計進入詳細(xì)設(shè)計階段時,經(jīng)常采用正設(shè)計進入詳細(xì)設(shè)計階段時,經(jīng)常采用正式方法來判斷正確性式方法來判斷正確性實現(xiàn)正確性的非正式方法實現(xiàn)正確性的非正式方法 要求我們在宣布設(shè)計正確之前必須完全要求我們在宣布設(shè)計正確之前必須完全理解它理解它 設(shè)計和實現(xiàn)
3、必須具有可讀性設(shè)計和實現(xiàn)必須具有可讀性 由于人類大腦在處理復(fù)雜問題方面有局由于人類大腦在處理復(fù)雜問題方面有局限性,所以要進行模塊化的設(shè)計,即將限性,所以要進行模塊化的設(shè)計,即將設(shè)計分成獨立的可理解的部分。設(shè)計分成獨立的可理解的部分。 不斷進行簡化和模塊化,直到設(shè)計使人不斷進行簡化和模塊化,直到設(shè)計使人信服信服充分設(shè)計的術(shù)語和理論基礎(chǔ)充分設(shè)計的術(shù)語和理論基礎(chǔ)一個一個足以足以實現(xiàn)需實現(xiàn)需求的設(shè)計求的設(shè)計一個一個正確正確的設(shè)計的設(shè)計有時稱為有時稱為 設(shè)計必須完全設(shè)計必須完全可理解可理解接下來接下來 設(shè)計非常設(shè)計非常模塊化模塊化達到這個目標(biāo)的常用達到這個目標(biāo)的常用方法是方法是 最小目標(biāo)最小目標(biāo)實現(xiàn)正確
4、性的正式方法實現(xiàn)正確性的正式方法 常常基于在嚴(yán)密的控制下跟蹤變量的變常?;谠趪?yán)密的控制下跟蹤變量的變化,一般會指定一個不變式化,一般會指定一個不變式 不變式在變量值之間表示的是一種不變不變式在變量值之間表示的是一種不變關(guān)系關(guān)系 用在類級別設(shè)計中的不變式稱為類不變用在類級別設(shè)計中的不變式稱為類不變式式- 包含變量包含變量 mileage, VehicleID, value, originalPrice, 和和 type:mileage 0 mileage = -300 ($300 是一輛報廢汽車的處理價格是一輛報廢汽車的處理價格)originalPrice = 0( type = “REGUL
5、AR” & value = originalPrice )Automobile 類類的不變式的不變式實現(xiàn)正確性的正式方法實現(xiàn)正確性的正式方法 Automobile類的方法要考慮這些不變式,類的方法要考慮這些不變式,因此將變量設(shè)為私有,并且只能通過公因此將變量設(shè)為私有,并且只能通過公有的存?。ㄓ械拇嫒。╝ccessor)方法才能改變他)方法才能改變他們的值。們的值。 可以對存取方法進行編碼來保持不變式??梢詫Υ嫒》椒ㄟM行編碼來保持不變式。 在在Automobile類中使用類中使用“setter”方法來方法來設(shè)置類不變式設(shè)置類不變式AutomobileAutomobile的一個客戶的的一個客戶的m
6、ain()main()方法方法模塊接口模塊接口 由于模塊化是獲得設(shè)計正確性的方法,由于模塊化是獲得設(shè)計正確性的方法,所以我們首先要理解客戶代碼是如何使所以我們首先要理解客戶代碼是如何使用模塊的。用模塊的。 模塊可以是模塊可以是類或類的包類或類的包 接口是函數(shù)形式(或原型)的集合,讓接口是函數(shù)形式(或原型)的集合,讓設(shè)計更易于理解設(shè)計更易于理解 模塊的接口定義了它的用途模塊的接口定義了它的用途類的接口類的接口 當(dāng)一個類支持的方法有很多種時,將這當(dāng)一個類支持的方法有很多種時,將這些方法成組放置到幾個接口中是很有好些方法成組放置到幾個接口中是很有好處的,可以重用接口。處的,可以重用接口。例例 在一個
7、運輸業(yè)的應(yīng)用程序中的類在一個運輸業(yè)的應(yīng)用程序中的類Shipment。ShipmentsetVehicle()perishable()getWidth()printRoute()describeType()getLength()getDuration()setType()ShipmentsetVehicle()perishable()getWidth()printRoute()describeType()getLength()getDuration()setType()ShipmentDimensionsgetWidth()getLength()getWeight()Transportation
8、MeansgetDuration()setVehicle()printRoute()GoodsTypedescribeType()setType()perishable()ShipmentDimensionsTransportationMeansGoodsType原始原始形式形式使用接口使用接口的形式的形式包的接口包的接口 包的接口與類的接口不同,包不能被實包的接口與類的接口不同,包不能被實例化例化 通過包來使用接口的一種方法是利用包通過包來使用接口的一種方法是利用包中類的指定對象來提供相應(yīng)的接口。中類的指定對象來提供相應(yīng)的接口。包的接口包的接口PricingpurchasesFurnitur
9、eClothingApplianceSelectionClothingTryoutsingletonPurchasesIFParticipant-servicesConversation-services包的接口的示例包的接口的示例ConversationchatServerchatClientDisplayConversationManagerClientCommServerCommbillingAccountingBillFinancialMessage-Reception模塊化模塊化 為了模塊化特定的應(yīng)用程序,在高層需為了模塊化特定的應(yīng)用程序,在高層需要創(chuàng)建包,在底層需要創(chuàng)建類要創(chuàng)建包,
10、在底層需要創(chuàng)建類選擇類選擇類 設(shè)計中用到兩種類:設(shè)計中用到兩種類: 領(lǐng)域類領(lǐng)域類:屬于設(shè)計中的特有類,如一個模擬:屬于設(shè)計中的特有類,如一個模擬銀行的應(yīng)用程序的領(lǐng)域類可能包括銀行的應(yīng)用程序的領(lǐng)域類可能包括BankCustomer類、類、BankTransation類和類和Teller類,但不包括類,但不包括File類和類和Database類。類。 非領(lǐng)域類非領(lǐng)域類:不是程序特有的,如:不是程序特有的,如Customer類和類和Transaction類。類。 通常從領(lǐng)域類開始類的選擇,然后增加通常從領(lǐng)域類開始類的選擇,然后增加非領(lǐng)域類來滿足設(shè)計目標(biāo)非領(lǐng)域類來滿足設(shè)計目標(biāo) 非領(lǐng)域類通常用于概括領(lǐng)域
11、類非領(lǐng)域類通常用于概括領(lǐng)域類領(lǐng)域類領(lǐng)域類VS非領(lǐng)域類非領(lǐng)域類 領(lǐng)域類領(lǐng)域類: 應(yīng)用程序特有的類應(yīng)用程序特有的類 例如例如: BankCustomer, BankTransaction, Teller 通常是非通常是非GUI類類 足以分類所有的需求足以分類所有的需求 非領(lǐng)域類非領(lǐng)域類: 一般類一般類 例如例如: 抽象類抽象類, , 實用類實用類 源于設(shè)計和實現(xiàn)的考慮源于設(shè)計和實現(xiàn)的考慮選擇包選擇包 選擇包是選定應(yīng)用程序體系結(jié)構(gòu)時必須進行的選擇包是選定應(yīng)用程序體系結(jié)構(gòu)時必須進行的一步,任務(wù)是將應(yīng)用程序分組,通常為一步,任務(wù)是將應(yīng)用程序分組,通常為310個個包,然后這些包能用同樣方法進一步分解。包,
12、然后這些包能用同樣方法進一步分解。可供選擇的模塊化方式可供選擇的模塊化方式mechanicspositionground controlonBoardNavigationcontroltrajectoryweather跟蹤運送衛(wèi)星進入預(yù)定軌道跟蹤運送衛(wèi)星進入預(yù)定軌道的運載火箭軌跡的應(yīng)用程序的運載火箭軌跡的應(yīng)用程序選擇選擇 1選擇選擇 2Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.為正確性和充分性而重整為正確性和充分性而
13、重整 極限編程(極限編程(extreme programming)是首先)是首先為給定的需求進行設(shè)計,然后在額外的需求變?yōu)榻o定的需求進行設(shè)計,然后在額外的需求變得透明時對設(shè)計和實現(xiàn)進行修改,這個過程稱得透明時對設(shè)計和實現(xiàn)進行修改,這個過程稱為重整(為重整(refactoring)。)。重整:為類提升一個原始屬性重整:為類提升一個原始屬性 為了適應(yīng)范圍的增長,常常需要引入一個新類為了適應(yīng)范圍的增長,常常需要引入一個新類來進行重整。來進行重整。 如,假設(shè)已經(jīng)有一個包含整形變量如,假設(shè)已經(jīng)有一個包含整形變量mileage的的類類Automobile: class Automobile Mileage
14、 mileage; .重整:為類提升一個原始屬性重整:為類提升一個原始屬性 對于一個使用過的汽車,提出的額外要求也許對于一個使用過的汽車,提出的額外要求也許說明了已使用的汽車上的說明了已使用的汽車上的“mileage”根本不是根本不是一個簡單的變量。一個簡單的變量。 如,引擎也許有另一種表示方式,那么底盤的如,引擎也許有另一種表示方式,那么底盤的英里數(shù)和引擎的就不同。假設(shè)應(yīng)用程序要考慮英里數(shù)和引擎的就不同。假設(shè)應(yīng)用程序要考慮被欺騙的可能性,那么報告的被欺騙的可能性,那么報告的“mileage”就要就要根據(jù)汽車是否曾被偷過這樣的其他屬性來修改。根據(jù)汽車是否曾被偷過這樣的其他屬性來修改。因此,要考
15、慮因此,要考慮“將將mileage提升為一個類提升為一個類”這這樣的重整。樣的重整。重整:為類提升一個原始屬性重整:為類提升一個原始屬性Class Mileage int nominalMileageValue = 0; int chassisMileageValue = 0; int engineMileageValue = 0; public int computeEffectiveMileage()Class Automobile Mileage mileage; 重整:引入抽象基類或接口重整:引入抽象基類或接口 當(dāng)應(yīng)用程序包含幾個具有廣泛通用性的類時。當(dāng)應(yīng)用程序包含幾個具有廣泛通用性的
16、類時。 如如Gymnast(體操運動員)、(體操運動員)、Runner、FootballPlayer類:抽象類就是類:抽象類就是Athlete(運動(運動員)員) Java抽象類幾乎可以包含類的所有特性,只有抽象類幾乎可以包含類的所有特性,只有不能創(chuàng)建類的對象不能創(chuàng)建類的對象重整:引入抽象基類或接口重整:引入抽象基類或接口Abstract class MyAbstractClassClass AnotherClass MyAbstractClass m = new MyAbstractClass();不能編譯,因為試圖建立一個抽象類的對象不能編譯,因為試圖建立一個抽象類的對象重整:引入抽象基類
17、或接口重整:引入抽象基類或接口Abstract class MyAbstractClassClass AnotherClass MyAbstractClass m; m = getObjectOfMyAbstractClass(); / returns obj. of non-abstract subclass m = new ConcreteSubclassOfMyAbstractClass();通常使用通常使用“concrete”(具體)來強調(diào)不是抽象類(具體)來強調(diào)不是抽象類可以編譯可以編譯健壯性健壯性 錯誤的原因錯誤的原因 防止錯誤輸入防止錯誤輸入 用戶輸入用戶輸入 不是用戶的輸入不是
18、用戶的輸入 數(shù)據(jù)通信數(shù)據(jù)通信 其他應(yīng)用程序的方法調(diào)用其他應(yīng)用程序的方法調(diào)用 防止開發(fā)錯誤防止開發(fā)錯誤 錯誤的設(shè)計錯誤的設(shè)計 錯誤的實現(xiàn)錯誤的實現(xiàn)檢查輸入(保證環(huán)境健壯性)檢查輸入(保證環(huán)境健壯性) 在繼續(xù)進行處理之前,可以檢查應(yīng)用程序的所在繼續(xù)進行處理之前,可以檢查應(yīng)用程序的所有輸入的方法。有輸入的方法。 檢查類型檢查類型 檢查與前置條件和不變式不符的輸入檢查與前置條件和不變式不符的輸入為提高健壯性而初始化為提高健壯性而初始化 初始化變量是很好的練習(xí):初始化變量是很好的練習(xí):int I = 0; 因為帶著未初始化的變量執(zhí)行一個程序所受的因為帶著未初始化的變量執(zhí)行一個程序所受的損失比先初始化變量要大得多。損失比先初始化變量要大得多。 當(dāng)應(yīng)用程序的不良性能變得明顯時,初始化版當(dāng)應(yīng)用程序的不良性能變得明顯時,初始化版本的程序可能產(chǎn)生更多有價值的信息。本的程序可能產(chǎn)生更多有價值的信息。提高健壯性的參數(shù)傳遞技術(shù)提高健壯性的參數(shù)傳遞技術(shù) 如如 int computeArea(int aLength, int aBreadth) 如果可行,捕獲在類中的參數(shù)約束如果可行,捕獲在類中的參數(shù)約束 int computeArea(RectangleDimension a RectangleDimension) 在方法注釋中說明所有的參數(shù)約束在方法注釋中說明所有的參數(shù)約束 aLength 0 an
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品產(chǎn)品知識培訓(xùn)
- 醫(yī)學(xué)知識培訓(xùn)課件
- 年終總結(jié)大會發(fā)言稿
- DB31∕T 680.5-2019 城市公共用水定額及其計算方法 第5部分:城市園林綠化管理業(yè)(公園)
- 2025年教學(xué)方法創(chuàng)新:《生理學(xué)》電子教案在情境式學(xué)習(xí)中的應(yīng)用
- 公路養(yǎng)護安全培訓(xùn)課件
- 物流系統(tǒng)分析 課件 任務(wù)三 認(rèn)識物流系統(tǒng)的分類
- 2023年高考真題北京卷化學(xué)試卷
- 壓力容器設(shè)備安裝合同
- 電子表格處理作業(yè)指導(dǎo)書
- 國家煙草行業(yè)物流管理
- “小學(xué)品德與生活教學(xué)關(guān)鍵問題實踐研究”課題研究中期報告
- 畢業(yè)設(shè)計外文文獻-Spring Boot
- 六年級下冊《生命.生態(tài).安全》全冊教案(表格式)
- 采購入庫單模板
- GB/T 15566.6-2007公共信息導(dǎo)向系統(tǒng)設(shè)置原則與要求第6部分:醫(yī)療場所
- 中國電信教育基地市級“三通兩平臺”建設(shè)方案(教育機構(gòu))
- 火力發(fā)電廠節(jié)能技術(shù)經(jīng)濟指標(biāo)釋義
- 智能制造知識課件
- 雙方責(zé)任及工程分工界面
- 中醫(yī)學(xué)-導(dǎo)論課件
評論
0/150
提交評論