軟件工程技術(shù)與設(shè)計第二講學(xué)生_第1頁
軟件工程技術(shù)與設(shè)計第二講學(xué)生_第2頁
軟件工程技術(shù)與設(shè)計第二講學(xué)生_第3頁
軟件工程技術(shù)與設(shè)計第二講學(xué)生_第4頁
軟件工程技術(shù)與設(shè)計第二講學(xué)生_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

軟件工程技術(shù)與設(shè)計第二講學(xué)生第一頁,共五十七頁,編輯于2023年,星期三正確性資源結(jié)構(gòu)工程用法解的完全性和正確性;靜態(tài)類和動態(tài)類的安全性;多線程的安全性;容錯性處理能力;保密性和魯棒性。執(zhí)行效率,時間復(fù)雜度、消息數(shù)、帶寬要求等;空間消耗,包括存儲單元、對象、線程、過程、通信通道。處理器等的使用情況;增加的資源,一些隨選信息;動態(tài)策略,包括公正性、平衡性、穩(wěn)定性等。模塊性、封裝、耦合、獨立性;可延展性,包括子類、可協(xié)調(diào)性、發(fā)展性、可維護(hù)性等;可重用性、開放性、可組合性。便攜性、可插入性;前后依賴性;互用性;等等??衫斫庑?、簡單、高雅;執(zhí)行中的易錯性;與其他軟件的共存性;系統(tǒng)可維護(hù)性;開發(fā)過程的影響;開發(fā)隊伍結(jié)構(gòu)及動態(tài)特性的影響;用戶參與的影響;生產(chǎn)力、時間安排、成本的影響;等等。使用規(guī)范;人為因素,如可學(xué)習(xí)性、恢復(fù)能力等;對不斷變化的環(huán)境的適應(yīng)性;藝術(shù)性;醫(yī)學(xué)和環(huán)境的影響;社會、經(jīng)濟(jì)、政治的影響;等等。設(shè)計過程中,針對設(shè)計目標(biāo)約束沖突給出的非功能性需求判斷準(zhǔn)則。第二頁,共五十七頁,編輯于2023年,星期三核心共同思想原則:重點解決軟件系統(tǒng)可維護(hù)性和復(fù)用性矛盾。普遍基本單純隱藏重現(xiàn)第三頁,共五十七頁,編輯于2023年,星期三可維護(hù)性好的系統(tǒng)應(yīng)有性質(zhì)(PerterCoad)

可擴(kuò)展性容易加入新的性能靈活性代碼修改少波及其他模塊可插入性容易抽出加入類第四頁,共五十七頁,編輯于2023年,星期三傳統(tǒng)的復(fù)用代碼的剪貼復(fù)用算法的復(fù)用數(shù)據(jù)結(jié)構(gòu)的復(fù)用程序1程序4程序3程序2代碼/算法/數(shù)據(jù)結(jié)構(gòu)第五頁,共五十七頁,編輯于2023年,星期三傳統(tǒng)的復(fù)用的風(fēng)險:影響可擴(kuò)展性——過于僵硬修改多個軟件成分中復(fù)用源代碼時,需要獨立地修改檢測每一拷貝。很難在一個軟件系統(tǒng)里加入一個新功能。影響靈活性——過于脆弱對一個地方的修改會導(dǎo)致另一個地方發(fā)生故障,難以跟蹤代碼的變異和使用。模塊A和B同時使用模塊C的功能。那么當(dāng)A需要C增加一個新的行為的時候,B有可能不需要、甚至不允許C增加這個新行為。影響可插入性——粘度過高代碼、函數(shù)、模塊對系統(tǒng)的依賴,改動意味著破壞原始意圖和框架第六頁,共五十七頁,編輯于2023年,星期三面向?qū)ο笤O(shè)計的重要語言特性數(shù)據(jù)抽象繼承封裝多態(tài)性實現(xiàn)概念和定義復(fù)用,促進(jìn)系統(tǒng)的可維護(hù)性。第七頁,共五十七頁,編輯于2023年,星期三接口(interface):對象全部操作(對象可以處理的所有請求)的特征(操作的名稱、參數(shù)和返回值)的集合。聲明對象的類型(Type)——接口標(biāo)記(signature)

包括:變量的類型聲明參量的類型聲明方法的返還類型聲明數(shù)據(jù)類型的轉(zhuǎn)換等第八頁,共五十七頁,編輯于2023年,星期三接口和類的區(qū)別:接口——只描述方法的特征,而不給出方法的實現(xiàn),接口把方法的特征和實現(xiàn)分割開來。類——不僅給出方法的特征,面且給出方法的實現(xiàn)。接口常常代表一個角色(role),它包裝與該角色相關(guān)的操作和屬性,而實現(xiàn)這個接口的類使是扮演這個角色的演員。一個角色可以由不同的演員來演.而不同的演員之間除了扮演一個共同的角色之外,并不要求有任何其他的共同之處。第九頁,共五十七頁,編輯于2023年,星期三類、類型和對象之間區(qū)別和聯(lián)系:類(class)——定義了一類對象的共性實現(xiàn),即對象的內(nèi)部數(shù)據(jù)與其操作的實現(xiàn)。類型(type)——只涉及接口(即對象能作出反應(yīng)的請求的集合)。類定義了一類對象可執(zhí)行的操作,也定義了對象的類型。一個對象是一個類的實例指這個對象支持該類定義的接口。第十頁,共五十七頁,編輯于2023年,星期三同一種類型的對象共享接口部分同一類型接口的對象可以有不同實現(xiàn),即不同類的對象可以有相同的類型。一個角色可以由不同的演員來演一個對象可以有多種類型。一個類可以同時實現(xiàn)幾個接口。一個演員可以演不同的角色子類型包含(繼承)了超類型的接口接口是實現(xiàn)構(gòu)件可插入性的關(guān)鍵。第十一頁,共五十七頁,編輯于2023年,星期三抽象類——為子類定義通用接口。將實現(xiàn)由子類定義的操作完成?!梢該碛袑嵗兞浚约耙粋€或多個構(gòu)造子(函數(shù))?!獦?gòu)造子不能被調(diào)用來創(chuàng)建實例,抽象類不可以實例化?!獦?gòu)造子可以被子類調(diào)用,所有子類都可以有共有的實現(xiàn)抽象類通常代表一個抽象概念提供一個繼承的出發(fā)點。由于抽象類不可以實例化,因此一個抽象類一定是用來繼承的。第十二頁,共五十七頁,編輯于2023年,星期三抽象類和接口的區(qū)別抽象類允許有所有派生類公共的狀態(tài)和行為。是一種相關(guān)實體聚集的方式。關(guān)注如何設(shè)計實現(xiàn)并封裝這些具體實體(派生類),而不會與任何特定于實現(xiàn)的細(xì)節(jié)相耦合。接口關(guān)注點派生類或?qū)崿F(xiàn)類的對象的使用。派生類或?qū)崿F(xiàn)類的對象為了完成其功能應(yīng)該有什么樣的接口。沒有實例變量和構(gòu)造子(函數(shù))第十三頁,共五十七頁,編輯于2023年,星期三抽象類的作用:用較少的冗余實現(xiàn)一組具有公共狀態(tài)或行為的對象設(shè)計一個接口找出已定義對象的公共狀態(tài)或行為用一個抽象類實現(xiàn)該接口從這個抽象類派生具有公共狀態(tài)或行為的對象優(yōu)點:使實現(xiàn)類更簡單,更容易維護(hù)。第十四頁,共五十七頁,編輯于2023年,星期三具體類非抽象的類稱為具體類,實現(xiàn)由自身完成。具體類可以實例化??梢詫嵗?,給出一個有邏輯實現(xiàn)的對象模版。具體類不是用來繼承的。(可以繼承)第十五頁,共五十七頁,編輯于2023年,星期三混合類向其他類提供接口,也提供部分接口實現(xiàn)。與抽象類相似,不能用實例說明。可以繼承第十六頁,共五十七頁,編輯于2023年,星期三假設(shè)蛋代表抽象,而雞代表具體。蛋決定雞的性伏,雞是蛋的“實現(xiàn)”,蛋的類型決定了雞的類型。從這個角度來講,先有蛋,后有雞。第十七頁,共五十七頁,編輯于2023年,星期三類繼承和接口繼承:繼承:一個類是另一個類的子類類繼承(實現(xiàn)繼承):——根據(jù)某個原有對象的實現(xiàn)來定義另一個新的對象的實現(xiàn)?!獜囊延蓄惱^承必要的需求?!蚕砭幋a和表示方法。接口繼承:——是一個類實現(xiàn)了另一個類的一個接口——何時可用一個對象替換另一個對象。——共享類型?!焕^承抽象類。第十八頁,共五十七頁,編輯于2023年,星期三[問題]:加入一個新的類,與現(xiàn)有具體類行為有不同的實現(xiàn)——動態(tài)的具體類可插入性問題1.使用超類繼承:在類結(jié)構(gòu)中增加一個超類,聲明出子類要提供的行為為這個抽象超類提供多個具體子類,以不同的方法實現(xiàn)了超類所聲明的行為??蛻舳藙討B(tài)地決定使用哪一個具體子類。第十九頁,共五十七頁,編輯于2023年,星期三如何在具體類繼承結(jié)構(gòu)中增加一個抽象超類:單繼承的語言,一個類只能有一個超類。當(dāng)具體類可能已經(jīng)有了一個超類,不可能加上新的超類。加新的超類到已有的超類上面,形成超超類?;蛘呃^續(xù)向上移動,直到類等級結(jié)構(gòu)的最頂端?!粋€具體類的可插入性設(shè)計.就變成了對整個等級結(jié)構(gòu)中所有的類的修改??刹迦胄詻]有保證。具體類超類新超超類新具體類。。。。。。與現(xiàn)有具體類行為有不同的實現(xiàn)第二十頁,共五十七頁,編輯于2023年,星期三2.使用接口概念在一個類等級結(jié)構(gòu)中的任何類都是實現(xiàn)一個接口這個接口會影響到此類的所有子類,但是不會影響到此類的任何超類。此類將實現(xiàn)這個接口所規(guī)定的方法,而其子類則可以從此類自動繼承到這些方法,子類可以選擇置換其中的某一些方法或所有方法。這時候,子類就具有了可插入性。接口類具體類新具體類第二十一頁,共五十七頁,編輯于2023年,星期三關(guān)聯(lián)的可插入性關(guān)聯(lián):一個對象知道其他對象針對接口的關(guān)聯(lián):不是針對具體類任何實現(xiàn)這個接口的類都可以滿足關(guān)聯(lián)要求??梢詣討B(tài)地將關(guān)聯(lián)從一個具體類轉(zhuǎn)換到另一個具體類第二十二頁,共五十七頁,編輯于2023年,星期三調(diào)用的可插入性對象調(diào)用其他對象的方法。針對接口的調(diào)用:不是針對具體類,而是一個接口。任何實現(xiàn)這個接口的類都可以被當(dāng)前對象調(diào)用??梢詣討B(tài)地決定當(dāng)前對象調(diào)用哪一個具體類的實例接口提供了方法調(diào)用上的可插入性。第二十三頁,共五十七頁,編輯于2023年,星期三軟件系統(tǒng)的規(guī)模越大,生命周期越長,接口的重要性就越大。接口使得軟件系統(tǒng)在靈活性和可擴(kuò)展性,可插入性得到保證。第二十四頁,共五十七頁,編輯于2023年,星期三相同接口具有不同的實現(xiàn),對象的行為具有多種形態(tài)的特性。簡化了客戶定義。使客戶對象除了支持特定接口外,不做其他設(shè)定。相同接口的對象具有了可替換性。復(fù)用對象的實現(xiàn)和應(yīng)用第二十五頁,共五十七頁,編輯于2023年,星期三繼承和對象合成的關(guān)系繼承:根據(jù)一個類定義另一個類的執(zhí)行過程。在編譯時靜態(tài)定義,直接被程序設(shè)計語言支持,使用直接。便于修改正在復(fù)用的實現(xiàn)。

————白盒復(fù)用“白盒”指可見性,通過繼承,父類的內(nèi)部可被子類所見。第二十六頁,共五十七頁,編輯于2023年,星期三問題:1)實際運行時不能改變在編譯時所定義繼承的執(zhí)行過程2)子類的依賴性:繼承把父類執(zhí)行過程的細(xì)節(jié)暴露給子類,破壞了封裝。子類的物理表示、執(zhí)行過程與父類有密切關(guān)系父類執(zhí)行過程的任何改變都會強(qiáng)迫子類發(fā)生改變。這種依賴性限制了適應(yīng)性,最終也限制了可復(fù)用性。第二十七頁,共五十七頁,編輯于2023年,星期三動態(tài)連接:在運行時將請求連接到一個對象和該對象的一個操作上?!馕吨埱蟛恍柚付ㄌ囟ǖ膶崿F(xiàn)。任何有適當(dāng)接口的對象都會接收請求。相同接口的對象可以互相替換。第二十八頁,共五十七頁,編輯于2023年,星期三對象合成:通過組合對象得到新的更復(fù)雜的功能。要求被組合對象有定義好的接口。特點:對象合成在運行時動態(tài)地通過對象請求訪問其他對象。組合要求對象考慮相互的接口,精心設(shè)計接口。任何一個對象都可在運行時被另一個有相同的類型對象替代。黑盒復(fù)用————對象的內(nèi)部細(xì)節(jié)不可見,對象顯得像一個黑盒。

第二十九頁,共五十七頁,編輯于2023年,星期三優(yōu)點:對象只能由其接口訪問,不破壞封裝。對象的實現(xiàn)根據(jù)接口編寫,依賴性減少。有助于類的封裝,使每個類集中于一個任務(wù)。 缺點:系統(tǒng)的行為不是在類中定義,而依賴于對象的相互關(guān)系。采用對象合成優(yōu)于采用類繼承(合成/聚合復(fù)用原則)。第三十頁,共五十七頁,編輯于2023年,星期三委托(delegation):對象合成的特例。一個控制請求的執(zhí)行:繼承方法:子類將請求交給父類執(zhí)行。委托方法:接收操作的對象把操作委托給它的代理對象。接收操作的對象把自己本身也傳給委托者,以使被委托操作指向接收對象。第三十一頁,共五十七頁,編輯于2023年,星期三[例]窗口類的實現(xiàn)繼承方法:使窗口類成為矩形的子類,繼承其操作。窗口類將請求交給矩形父類執(zhí)行代理方法:產(chǎn)生一個矩形實例,并代理復(fù)用矩形的行為窗口將請求傳給此矩形實例把操作委托給矩形實例把自己本身也傳給矩形實例,以使被委托操作指向接收對象讓窗口好像是一個矩形在運行中用圓實例代替矩形實例就適用圓形窗口窗口矩形窗口矩形第三十二頁,共五十七頁,編輯于2023年,星期三窗口類對矩型類實例的引用第三十三頁,共五十七頁,編輯于2023年,星期三優(yōu)點:容易組合運行時的行為,改變行為組合的方式。缺點:難理解、運行效率低。依賴具體情況及設(shè)計者經(jīng)驗。在標(biāo)準(zhǔn)模式中使用效果較好。第三十四頁,共五十七頁,編輯于2023年,星期三參數(shù)化類型。定義類時不規(guī)定它所用的數(shù)據(jù)元素類型。這些類型在使用時作為參數(shù)提供。[例]:列表類——將元素的類型提供給列表的類型參數(shù),實現(xiàn)時為列表類建立每種元素的可定制形式。整數(shù)列表——把類型“整數(shù)”作為參數(shù)。字符串列表——類型“字符串”作為參數(shù)。第三十五頁,共五十七頁,編輯于2023年,星期三設(shè)計模式:更高的層次上的可復(fù)用性(宏觀邏輯的抽象層次復(fù)用)解決:1.合適的對象(類)的尋找2.對象(類)粒度的確定:如何分解粒度合適的類3.對象(類)接口的確定:如何定義類接口和繼承體系4.對象(類)實現(xiàn)的確定5.復(fù)用機(jī)制的處理:如何建立類(類)的關(guān)鍵聯(lián)系6.運行結(jié)構(gòu)和編譯結(jié)構(gòu)的處理7.設(shè)計中變動的處理第三十六頁,共五十七頁,編輯于2023年,星期三1.尋找合適的對象系統(tǒng)分解為對象的困難:多種矛盾因素兼顧:封裝、粒度、依賴性、靈活性、性能、發(fā)展、可重用性。多種分解對象方法優(yōu)劣的確定:(1)問題陳述→找出名詞和動詞→構(gòu)造相應(yīng)的對象和操作;(2)集中考慮系統(tǒng)中的協(xié)作和職責(zé);(3)構(gòu)造現(xiàn)實世界模型,把分析得到的對象轉(zhuǎn)換到設(shè)計中?,F(xiàn)實世界+非現(xiàn)實世界的類,如數(shù)組、抽象類等。解決辦法:用設(shè)計模式幫助確定設(shè)計抽象和相應(yīng)的對象。第三十七頁,共五十七頁,編輯于2023年,星期三2.確定對象的粒度設(shè)計模式幫助確定在存在大小和數(shù)量差別的事物第三十八頁,共五十七頁,編輯于2023年,星期三3.確定對象的接口設(shè)計模式幫助確定:(1)接口定義。識別關(guān)鍵元素和由接口取得的數(shù)據(jù)的類型。(2)規(guī)定接口間的關(guān)系和接口限制。第三十九頁,共五十七頁,編輯于2023年,星期三4.確定對象實現(xiàn)對象的實現(xiàn)由它的類來定義。a.類的表示抽象類/具體類/混合類b.類的實現(xiàn)類繼承/接口繼承第四十頁,共五十七頁,編輯于2023年,星期三5.處理復(fù)用機(jī)制理想情況下,應(yīng)該只通過對象合成來得到所需的功能。但限于可用部件的集合不夠豐富。繼承和對象合成可以互相補(bǔ)充。第四十一頁,共五十七頁,編輯于2023年,星期三一個設(shè)計可以用三種組合行為技術(shù)中的任一種來實現(xiàn)。區(qū)別:繼承——允許提供操作的缺省實現(xiàn)并允許子類超越父類操作。對象合成——允許運行時改變被組合的行為,但間接完成,效率不高。參數(shù)化類型——允許改變一個類可用的類型。但不能在運行中改變。哪種方法最好取決于設(shè)計和實現(xiàn)約束。第四十二頁,共五十七頁,編輯于2023年,星期三6.運行結(jié)構(gòu)和編譯結(jié)構(gòu)編譯結(jié)構(gòu)(代碼結(jié)構(gòu))——編譯時即被凍結(jié),由具有固定繼承關(guān)系的類組成。編譯結(jié)構(gòu)代碼不能顯示出一個系統(tǒng)工作的全部情況。運行結(jié)構(gòu)——由迅速變化的通信對象網(wǎng)組成。系統(tǒng)運行結(jié)構(gòu)的優(yōu)劣主要由設(shè)計者設(shè)計的對象及其類型之間的關(guān)系來決定,而不是由語言來決定的。第四十三頁,共五十七頁,編輯于2023年,星期三[例]:運行結(jié)構(gòu)和編譯結(jié)構(gòu)不同聚集(aggregation)和關(guān)聯(lián)(acquaintance)關(guān)系。聚集——對象包含另一個對象或?qū)α硪粚ο筘?fù)責(zé),或為另一個對象的一部分,具有相同生命期。關(guān)聯(lián)——一個對象只知道另一個對象。關(guān)聯(lián)對象之間可互相請求操作,但不對對方負(fù)責(zé)。是比聚集弱的聯(lián)系,提供了對象間的松耦合?!\行結(jié)構(gòu)不同

聚集和關(guān)聯(lián)常用相同的方法編譯實現(xiàn):在Smalltalk中:都是其他對象的引用。聚集和關(guān)聯(lián)沒有區(qū)別。在C++中:都用指針和引用來實現(xiàn)。

——編譯結(jié)構(gòu)相同由此可見:關(guān)聯(lián)和聚集關(guān)系主要由設(shè)計含義決定,而不是由語言機(jī)制決定。在編譯結(jié)構(gòu)中,關(guān)聯(lián)和聚集之間的差別小,在源代碼中難以辨認(rèn)。差別:聚集關(guān)系往往會比關(guān)聯(lián)關(guān)系少而更穩(wěn)定。關(guān)聯(lián)關(guān)系出現(xiàn)頻繁,有時只在一個操作持續(xù)的時間中存在。動態(tài)性更強(qiáng)。第四十四頁,共五十七頁,編輯于2023年,星期三7.處理設(shè)計中的變動達(dá)到最大復(fù)用程度的關(guān)鍵:設(shè)計中預(yù)先考慮生命期內(nèi)新需求和現(xiàn)有需求的變化。包括:類的重定義和重新實現(xiàn)、客戶修改和重新測試。設(shè)計模式的作用:確保系統(tǒng)只用特定的方式發(fā)生改變。允許系統(tǒng)結(jié)構(gòu)的某些部分的變化獨立于另外部分,因此有較高的健壯性。封裝變化第四十五頁,共五十七頁,編輯于2023年,星期三應(yīng)用系統(tǒng)、工具包、框架設(shè)計難度:應(yīng)用系統(tǒng)<工具包<框架第四十六頁,共五十七頁,編輯于2023年,星期三(1)設(shè)計模式在應(yīng)用系統(tǒng)中的作用:設(shè)計模式的松散耦合,封裝使操作、算法、和表示的依賴性減少,提高了對象類與其他類互操作的可能性——增加了內(nèi)部復(fù)用可能。減少對平臺依賴性——系統(tǒng)的可維護(hù)性變強(qiáng)。利用類繼承關(guān)系和對象合成,使類耦合減少,一個類不依賴于其他類——提高可擴(kuò)展性。第四十七頁,共五十七頁,編輯于2023年,星期三(2)設(shè)計模式在工具包中的作用:工具包——類庫中預(yù)先定義的相關(guān)的可復(fù)用的類的集合,面向?qū)ο蟮淖映绦驇?。——只為?yīng)用系統(tǒng)提供某些通用功能。如列表、聯(lián)合表、棧等,C++的I/O流庫等。——強(qiáng)調(diào)代碼復(fù)用,沒有特定的設(shè)計要求。第四十八頁,共五十七頁,編輯于2023年,星期三設(shè)計特點:比應(yīng)用系統(tǒng)的設(shè)計難。要在多種應(yīng)用系統(tǒng)中工作。設(shè)計者不知應(yīng)用系統(tǒng)情況和特殊要求。要求:避免假設(shè)和依賴性,依賴性會限制工具包的適應(yīng)性,進(jìn)而限制可利用性和效率。設(shè)計模式有助于工具包的適用性。

第四十九頁,共五十七頁,編輯于2023年,星期三(3)設(shè)計模式在框架中的作用:框架——為特定要求的軟件構(gòu)成的可復(fù)用的設(shè)計??蚣軓?qiáng)調(diào)設(shè)計復(fù)用而不僅是代碼復(fù)用。特定應(yīng)用的框架是框架抽象類的特定應(yīng)用子

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論