摘要:大綱什么是軟件復(fù)用如何衡量可復(fù)用性可復(fù)用組件的級別和形態(tài)源代碼級別復(fù)用模塊級別的復(fù)用類抽象類接口庫級別的復(fù)用包系統(tǒng)級別的復(fù)用框架對可復(fù)用性的外部觀察類型變化例行分組實(shí)施變更代表獨(dú)立分解常見行為總結(jié)什么是軟件復(fù)用軟件復(fù)用軟件復(fù)用是使用現(xiàn)有軟件
大綱
什么是軟件復(fù)用?
如何衡量“可復(fù)用性”?
可復(fù)用組件的級別和形態(tài)
源代碼級別復(fù)用
模塊級別的復(fù)用:類/抽象類/接口
庫級別的復(fù)用:API /包
系統(tǒng)級別的復(fù)用:框架
對可復(fù)用性的外部觀察
類型變化
例行分組
實(shí)施變更
代表獨(dú)立
分解常見行為
總結(jié)
什么是軟件復(fù)用?軟件復(fù)用
軟件復(fù)用是使用現(xiàn)有軟件組件實(shí)施或更新軟件系統(tǒng)的過程。
軟件復(fù)用的兩個觀點(diǎn)
創(chuàng)建:以系統(tǒng)方式創(chuàng)建可復(fù)用資源(面向復(fù)用編程:開發(fā)出可復(fù)用的軟件)
使用:復(fù)用資源作為創(chuàng)建新系統(tǒng)的構(gòu)建塊(基于復(fù)用編程:利用已有的可復(fù)用軟件搭建應(yīng)用系統(tǒng))
為什么復(fù)用?
“創(chuàng)造可重復(fù)使用而不是暫時性文物的動力具有審美和知識以及經(jīng)濟(jì)動機(jī),并且是人類對不朽渴望的一部分。
它將人與其他生物區(qū)分開來,并從原始社會文明“(Wegner,1989)。
為什么復(fù)用?
重復(fù)使用具有成本效益,并且具有及時性降低成本和開發(fā)時間
通過縮短軟件生產(chǎn)周期時間來提高軟件生產(chǎn)力(開發(fā)速度更快,人員更少的軟件)
不浪費(fèi)資源不必要地“重新發(fā)明輪子”
降低維護(hù)成本(可生產(chǎn)更好的質(zhì)量,更可靠和更高效的軟件)
經(jīng)過充分測試,可靠,穩(wěn)定,生成可靠的軟件
重復(fù)使用已經(jīng)存在一段時間并被調(diào)試的功能是構(gòu)建穩(wěn)定子系統(tǒng)的基礎(chǔ)
重復(fù)使用標(biāo)準(zhǔn)化,在不同應(yīng)用中保持一致
復(fù)用GUI庫可在應(yīng)用程序中產(chǎn)生常見的外觀。
與常規(guī),一致的設(shè)計(jì)保持一致。
重復(fù)使用成本
可復(fù)用組件的設(shè)計(jì)和構(gòu)建應(yīng)該采用明確,開放的方式,具有簡潔的接口規(guī)范,易于理解的文檔以及面向未來的使用。做到這些,需要代價。
復(fù)用成本很高:涉及跨越組織,技術(shù)和流程變更,以及支持這些變更的工具成本,以及培訓(xùn)人員使用新工具和變更的成本。 不僅面向復(fù)用編程代價高,基于復(fù)用編程代價也高
面向復(fù)用開發(fā):開發(fā)可復(fù)用的軟件
可復(fù)用組件的開發(fā)成本高于特定等價物的成本。 這種額外的可復(fù)用性增強(qiáng)成本應(yīng)該是一個組織而不是項(xiàng)目成本。 開發(fā)成本高于一般軟件的成本:要有足夠高的適應(yīng)性
通用組件的空間效率可能較低,執(zhí)行時間可能長于其特定的等效項(xiàng)。 性能差些:針對更普通場景,缺少足夠的針對性。
基于復(fù)用開發(fā):使用已有軟件進(jìn)行開發(fā)
必須開發(fā)和維護(hù)用于體系結(jié)構(gòu),設(shè)計(jì),文檔和代碼的組件管理工具,例如存儲庫??蓮?fù)用軟件庫,對其進(jìn)行有效的管理
一個關(guān)鍵問題:適應(yīng)往往無法拿來就用,需要適配
可能需要將額外的功能添加到組件。 添加完成后,新組件可以重新使用。
可以從組件中刪除不需要的功能,以提高其性能或減少其空間要求
某些組件操作的實(shí)現(xiàn)可能需要修改。
如何衡量“可復(fù)用性”?衡量可復(fù)用性
軟件資產(chǎn)在不同應(yīng)用場景中的重復(fù)使用頻率如何?
資產(chǎn)使用的可能性越高,其可復(fù)用性越高。
編寫一次,重復(fù)使用多次。
為重復(fù)使用此資產(chǎn)需支付多少費(fèi)用?
購買資產(chǎn)和其他強(qiáng)制性庫的成本
調(diào)整和擴(kuò)展它的成本
實(shí)例化它的成本
更改與其交互的系統(tǒng)的其他部分的成本
可復(fù)用性
可復(fù)用性意味著對構(gòu)建,打包,分發(fā),安裝,配置,部署,維護(hù)和升級問題進(jìn)行一些明確的管理。
具有高可復(fù)用性的軟件資產(chǎn)應(yīng)該:
簡短(小尺寸)和簡單(低復(fù)雜度)
便攜式和標(biāo)準(zhǔn)合規(guī)性
適應(yīng)性和靈活性
可擴(kuò)展性
通用和參數(shù)化
模塊化
易變(可變)設(shè)計(jì)假設(shè)的本地化
改變要求時的穩(wěn)定性
豐富的文檔
可重復(fù)使用組件的級別和形態(tài)復(fù)用水平
可復(fù)用組件可能是代碼
最普遍:大多數(shù)程序員與復(fù)用有關(guān)
但是,從更廣泛和更高層次上看待可以重復(fù)使用的觀點(diǎn)帶來的好處。
要求
設(shè)計(jì)和規(guī)格
數(shù)據(jù)
測試用例
文件
我們在這節(jié)課中關(guān)注的是什么
源代碼級別:方法,語句等
模塊級別:類和接口
庫級別:API
Java庫,.jar
架構(gòu)級別:框架框架
代碼復(fù)用的類型
白盒復(fù)用:源代碼可見,可修改和擴(kuò)展
代碼本身可用時復(fù)用代碼。 通常需要某種修改或改編
Pro:您可以自定義模塊以適應(yīng)特定的情況,這允許在更多情況下復(fù)用
Con:你現(xiàn)在擁有自定義的結(jié)果,所以它增加了你的代碼復(fù)雜度。 您需要內(nèi)部組件的內(nèi)在知識。
黑盒復(fù)用:源代碼不可見,不能修改
通過提供一些“膠水”來重新組合現(xiàn)有代碼的形式,但不必更改代碼本身 - 通常是因?yàn)槟鸁o法訪問代碼。只能通過API接口來使用,無法修改代碼
Pro:簡潔和清潔
Con:很多時候這是不可能的
可復(fù)用組件分布的格式
形式:
源代碼
包,如.jar,.gem,.dll,
可復(fù)用軟件組件的來源:
組織的內(nèi)部代碼庫(Guava)
第三方提供的庫(Apache)
語言自己提供的庫(JDK)
來自教程,示例,書籍等的代碼示例
本地代碼專家或知識淵博的同事
現(xiàn)有的系統(tǒng)代碼
開源產(chǎn)品(請務(wù)必遵守任何許可協(xié)議)
(1)源代碼復(fù)用
復(fù)用代碼 - 最低級別
將部分/全部復(fù)制/粘貼到您的程序中
維護(hù)問題
需要在多個地方更正代碼
使用太多的代碼(很多版本)
過程中出現(xiàn)錯誤的風(fēng)險很高
可能需要知道如何使用的軟件工作
需要訪問源代碼
(2)模塊級復(fù)用:類/接口
復(fù)用類
類是代碼復(fù)用的原子單元
不需要源代碼,類文件或jar / zip
只需要包含在類路徑中
可以使用javap工具來獲取類的公共方法頭
文檔非常重要(Java API)
封裝有助于復(fù)用
代碼管理較少
版本控制,向后兼容性仍然存在問題
需要一起打包相關(guān)的類 - 靜態(tài)鏈接
復(fù)用類的方法:繼承
Java提供了一種名為Inheritance的代碼復(fù)用方法
類擴(kuò)展現(xiàn)有類的屬性/行為
另外,他們可能會覆蓋現(xiàn)有的行為
不需要放置僅僅轉(zhuǎn)發(fā)或委托工作的虛擬方法
更好地捕捉現(xiàn)實(shí)世界
通常需要在實(shí)現(xiàn)之前設(shè)計(jì)繼承層次結(jié)構(gòu)
無法取消屬性或方法,因此一定要小心,不要過分
復(fù)用類的方法:委托
委托只是當(dāng)一個對象依賴另一個對象來實(shí)現(xiàn)其功能的某個子集時(一個實(shí)體將某個事物傳遞給另一個實(shí)體)
例如分揀機(jī)正在委托比較器的功能
審慎的委托支持代碼復(fù)用
分揀機(jī)可以重復(fù)使用任意的排序順序
比較器可以重復(fù)使用需要比較整數(shù)的任意客戶端代碼
顯式委托:將發(fā)送對象傳遞給接收對象
隱式委托:由語言的成員查找規(guī)則
委托可以被描述為在實(shí)體之間共享代碼和數(shù)據(jù)的低級機(jī)制。
(3)庫級復(fù)用:API /包
庫:一組提供可復(fù)用功能的類和方法(API)
框架:可以定制到應(yīng)用程序中的可重復(fù)使用的框架代碼
框架調(diào)用回客戶端代碼
好萊塢原則:“不要打電話給我們。 我們會打電話給你?!?/p>
一般區(qū)別:庫與框架
框架作為主程序加執(zhí)行,執(zhí)行過程中調(diào)用開發(fā)者所寫的程序
開發(fā)者構(gòu)造可運(yùn)行軟件實(shí)體,其中涉及到對可復(fù)用庫的調(diào)用
(4)系統(tǒng)級復(fù)用:框架
應(yīng)用程序框架
框架是子系統(tǒng)設(shè)計(jì),包含一系列抽象和具體類以及每個類之間的接口
框架:一組具體類,抽象類,及其之間的連接關(guān)系 - 只有“骨架”,沒有“血肉”
框架是一種抽象,其中提供通用功能的軟件可以通過額外的用戶編寫的代碼進(jìn)行選擇性更改,從而提供特定于應(yīng)用程序的軟件。 開發(fā)者根據(jù)框架的規(guī)約,填充自己的代碼進(jìn)去,形成完整系統(tǒng)
可復(fù)用性利用了應(yīng)用領(lǐng)域知識和經(jīng)驗(yàn)豐富的開發(fā)人員的先前努力
數(shù)據(jù)處理,圖形用戶界面等
將框架看作是更大規(guī)模的API復(fù)用,除了提供可復(fù)用的API,還將這些模塊之間的關(guān)系都確定下來,形成了整體應(yīng)用的領(lǐng)域復(fù)用
框架:領(lǐng)域復(fù)用
系統(tǒng)通過添加組件來填充缺失的設(shè)計(jì)元素并實(shí)例化抽象類來實(shí)現(xiàn)
通常通過選擇性覆蓋來擴(kuò)展框架; 或者程序員可以添加專門的用戶代碼來提供特定的功能---定義從抽象類祖先繼承操作的具體類
鉤子方法,被應(yīng)用程序覆蓋以擴(kuò)展框架。 鉤子(Hook)方法系統(tǒng)地將應(yīng)用程序域的接口和行為與應(yīng)用程序在特定上下文中所需的變體解耦。
控制反轉(zhuǎn):與庫或標(biāo)準(zhǔn)用戶應(yīng)用程序不同,控制流不是由調(diào)用者決定的,而是由框架決定的。
不可修改的框架代碼:框架代碼不應(yīng)該被修改,同時接受用戶實(shí)現(xiàn)的擴(kuò)展。 換句話說,用戶可以擴(kuò)展框架,但不應(yīng)修改其代碼。
控制反轉(zhuǎn)(Inverse of Control)
由第三方的容器來控制對象之間的依賴關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中由代碼直接操控。
控制權(quán)由代碼中轉(zhuǎn)到了外部容器,帶來的好處就是降低了對象之間的依賴程度,提高靈活性和可維護(hù)性。
框架設(shè)計(jì)
框架與應(yīng)用程序不同
抽象級別不同,因?yàn)榭蚣転橄嚓P(guān)問題家族提供解決方案,而不是單一解決方案。
為了適應(yīng)這一系列問題,該框架是不完整的,包含熱點(diǎn)和掛鉤以允許定制
框架可以用擴(kuò)展它們的技術(shù)來分類。
白盒框架
黑盒框架
白盒和黑盒框架
白盒框架:
通過繼承和動態(tài)綁定實(shí)現(xiàn)的可擴(kuò)展性。
通過繼承框架基類并重寫預(yù)定義的鉤子方法來擴(kuò)展現(xiàn)有功能
通常使用模板方法模式等設(shè)計(jì)模式來覆蓋鉤子方法。
黑盒框架
通過為可插入框架的組件定義接口來實(shí)現(xiàn)可擴(kuò)展性。
通過定義符合特定接口的組件來復(fù)用現(xiàn)有功能
這些組件通過委托與框架集成。
類庫與框架
類庫:
較少的域特定
提供更小的復(fù)用范圍。
類庫是被動的; 對控制流程沒有限制。
框架:
類為相關(guān)應(yīng)用系列合作。
框架活動; 影響控制流程。
在實(shí)踐中,開發(fā)人員經(jīng)常使用兩種:
框架通常在內(nèi)部使用類庫來簡化框架的開發(fā)。
框架事件處理程序使用類庫來執(zhí)行基本任務(wù)(例如字符串處理,文件管理,數(shù)值分析......)。
組件與框架
組件
類的獨(dú)立實(shí)例
連接在一起形成完整的應(yīng)用程序。
黑盒定義了一套連貫的操作,
可以基于接口的語法和語義使用。
組件甚至可以在二進(jìn)制代碼級復(fù)用。
?優(yōu)點(diǎn)是應(yīng)用程序不一定需要在組件更改時重新編譯。
構(gòu)架:
經(jīng)常用于開發(fā)組件
組件通常插入黑盒框架。
可復(fù)用性的外部觀察對可復(fù)用性的外部觀察
類型可變
功能分組
實(shí)現(xiàn)可變
表示獨(dú)立
共性抽取
類型可變
可復(fù)用組件應(yīng)該是類型參數(shù)化的,以便它們可以適應(yīng)不同的數(shù)據(jù)類型(輸入,計(jì)算和輸出);
可重復(fù)使用的模塊應(yīng)該適用于許多不同類型的元素,而不需要開發(fā)人員對軟件文本進(jìn)行手動更改。
換句話說,我們需要一個用于描述類型參數(shù)化模塊的工具,這個模塊也被稱為通用模塊。
通用性:可復(fù)用組件應(yīng)該是通用的。
類型可變(泛型):適應(yīng)不同的類型,且滿足LSP
實(shí)現(xiàn)可變
在實(shí)踐中有很多種適用的數(shù)據(jù)結(jié)構(gòu)和算法。
我們不能期望單個模塊能夠處理所有可能性,這種變化確實(shí)是這樣; 這將是巨大的。
我們需要一系列模塊來涵蓋所有不同的實(shí)現(xiàn)。
實(shí)現(xiàn)可變:ADT有多種不同的實(shí)現(xiàn),提供不同的表示和抽象功能,但具有同樣的規(guī)范(前置條件,后置條件,不變式),從而可以適應(yīng)不同的應(yīng)用場景
功能分組
一個自給自足的可復(fù)用模塊需要包含一組功能,每個操作一個功能。
完整性
提供完備的細(xì)粒度操作,保證功能的完整性,不同場景下復(fù)用不同的操作(及其組合)
表示獨(dú)立性
可復(fù)用模塊的一般形式應(yīng)該使客戶能夠指定一個操作而不知道它是如何實(shí)現(xiàn)的。
表示獨(dú)立性是信息隱藏規(guī)則的延伸,對于大型系統(tǒng)的順利開發(fā)至關(guān)重要:實(shí)施決策經(jīng)常會改變,客戶應(yīng)該受到保護(hù)。 內(nèi)部實(shí)現(xiàn)可能會經(jīng)常變化,但客戶端不應(yīng)受到影響。
表示獨(dú)立反映了客戶對可復(fù)用性的看法 - 忽略內(nèi)部實(shí)現(xiàn)細(xì)節(jié)和變體的能力
表示獨(dú)立性,信息隱藏
共性抽取
分解共同行為,反映了供應(yīng)商的觀點(diǎn),更一般地反映了可復(fù)用類的開發(fā)者的觀點(diǎn)。
目標(biāo)是利用家庭或?qū)嵤┳酉盗兄锌赡艽嬖诘娜魏瓮ㄓ眯浴?br>將共同的行為(共性)抽象出來,形成可復(fù)用實(shí)體
如上所述,在某些問題領(lǐng)域可用的各種實(shí)現(xiàn)通常需要基于模塊族的解決方案。
這些類別中的每一個都涵蓋了許多變體,但通??梢栽谶@些變體之間找到顯著的共性。
什么是軟件復(fù)用?
如何衡量“可復(fù)用性”?
可復(fù)用組件的級別和形態(tài)
源代碼級別復(fù)用
模塊級復(fù)用:類/接口
庫級:API /包
系統(tǒng)級復(fù)用:框架
對可復(fù)用性的外部觀察
類型可變
功能分組
實(shí)現(xiàn)可變
表示獨(dú)立
共性抽取
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71350.html
摘要:代碼使用泛型類中不依賴于類型參數(shù)的方法。委托依賴于動態(tài)綁定,因?yàn)樗蠼o定的方法調(diào)用可以在運(yùn)行時調(diào)用不同的代碼段。委托捕獲操作并將其發(fā)送給另一個對象。委托可以被看作是在對象層次上的復(fù)用機(jī)制,而繼承是類層次上的復(fù)用機(jī)制。 大綱 設(shè)計(jì)可復(fù)用的類 繼承和重寫 重載(Overloading) 參數(shù)多態(tài)和泛型編程 行為子類型與Liskov替換原則 組合與委托 設(shè)計(jì)可復(fù)用庫與框架 API和庫...
摘要:共性的步驟在抽象類內(nèi)公共實(shí)現(xiàn),差異化的步驟在各個子類中實(shí)現(xiàn)子類為每個步驟提供不同的實(shí)現(xiàn)。模板方法將算法的骨架定義為抽象類,允許其子類提供具體行為。迭代器依次訪問對象的元素而不暴露其基礎(chǔ)表示。 大綱 結(jié)構(gòu)模式 Adapter允許具有不兼容接口的類通過將自己的接口包裝到已有類的接口中來一起工作。 Decorator動態(tài)添加/覆蓋對象的現(xiàn)有方法中的行為。 Facade為大量代碼提供簡化的界...
摘要:設(shè)計(jì)方案的容易改變這就是所謂的軟件構(gòu)建的可維護(hù)性,可擴(kuò)展性和靈活性。這也可能表明類型或方法可能難以維護(hù)?;谠创a中不同運(yùn)算符和操作數(shù)的數(shù)量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護(hù)和演變可維護(hù)性度量模塊化設(shè)計(jì)和模塊化原則OO設(shè)計(jì)原則:SOLIDOO設(shè)計(jì)原則:GRASP總結(jié) 軟件維護(hù)和演變 什么是軟件維護(hù)? 軟件工程中的軟件維護(hù)是交付后修改軟件產(chǎn)品以糾正故障...
摘要:解釋模塊耦合性的含義,對不同的耦合舉例說明耦合性,也叫耦合度,是對模塊間關(guān)聯(lián)程度的度量。模塊間的耦合度是指模塊之間的依賴關(guān)系,包括控制關(guān)系調(diào)用關(guān)系數(shù)據(jù)傳遞關(guān)系。軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚度作為衡量模塊獨(dú)立程度的標(biāo)準(zhǔn)。 ...
摘要:抽象工廠模式將具有共同主題的對象工廠分組。對可重用性和可維護(hù)性設(shè)計(jì)模式的高層考慮創(chuàng)造性模式工廠方法模式也稱為虛擬構(gòu)造器意圖定義一個用于創(chuàng)建對象的接口,但讓子類決定實(shí)例化哪個類。 大綱 創(chuàng)造性模式 工廠方法模式創(chuàng)建對象而不指定要創(chuàng)建的確切類。 抽象工廠模式將具有共同主題的對象工廠分組。 Builder模式通過分離構(gòu)造和表示來構(gòu)造復(fù)雜的對象。 結(jié)構(gòu)模式 Bridge將抽象從其實(shí)現(xiàn)中分...
閱讀 2203·2023-04-25 19:06
閱讀 1408·2021-11-17 09:33
閱讀 1794·2019-08-30 15:53
閱讀 2616·2019-08-30 14:20
閱讀 3576·2019-08-29 12:58
閱讀 3575·2019-08-26 13:27
閱讀 533·2019-08-26 12:23
閱讀 516·2019-08-26 12:22