《軟件工程》課件第13章_第1頁(yè)
《軟件工程》課件第13章_第2頁(yè)
《軟件工程》課件第13章_第3頁(yè)
《軟件工程》課件第13章_第4頁(yè)
《軟件工程》課件第13章_第5頁(yè)
已閱讀5頁(yè),還剩269頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第13章

軟件復(fù)用和構(gòu)件技術(shù)13.1復(fù)用的概念13.2復(fù)用的障礙與復(fù)用技巧13.3對(duì)象和復(fù)用13.4構(gòu)件及構(gòu)件技術(shù)13.5設(shè)計(jì)和實(shí)現(xiàn)期間的復(fù)用

13.6復(fù)用及互聯(lián)網(wǎng)13.7小結(jié)習(xí)題13

知識(shí)點(diǎn)

軟件復(fù)用,對(duì)象和復(fù)用,構(gòu)件及構(gòu)件技術(shù),構(gòu)件模型,復(fù)用及互聯(lián)網(wǎng)。

難點(diǎn)

如何將理論與實(shí)踐結(jié)合。

基于工作過程的教學(xué)任務(wù)

通過本章學(xué)習(xí),領(lǐng)會(huì)如何進(jìn)行軟件復(fù)用,掌握軟件復(fù)用的技術(shù);理解什么是軟件復(fù)用,了解軟件復(fù)用面臨哪些困難;理解什么是構(gòu)件,了解有哪些主流的構(gòu)件模型,明確構(gòu)件是軟件復(fù)用的關(guān)鍵;了解設(shè)計(jì)和實(shí)現(xiàn)的復(fù)用,了解軟件體系結(jié)構(gòu)、框架、基于構(gòu)件的軟件工程;了解互聯(lián)網(wǎng)對(duì)軟件復(fù)用的影響。

據(jù)統(tǒng)計(jì),開發(fā)一個(gè)新的應(yīng)用系統(tǒng),40%~60%的代碼是重復(fù)以前類似系統(tǒng)的成分,重復(fù)比例有時(shí)甚至更高。因此,軟件復(fù)用能節(jié)約軟件開發(fā)成本,真正有效地提高軟件生產(chǎn)效率。使用軟件復(fù)用技術(shù)可以減少軟件開發(fā)活動(dòng)中大量的重復(fù)性工作,提高軟件生產(chǎn)率,降低開發(fā)成本,縮短開發(fā)周期。同時(shí),由于軟構(gòu)件大都經(jīng)過嚴(yán)格的質(zhì)量認(rèn)證,并在實(shí)際運(yùn)行環(huán)境中得到校驗(yàn),因此,復(fù)用軟構(gòu)件有助于改善軟件質(zhì)量。此外,大量使用軟構(gòu)件,軟件的靈活性和標(biāo)準(zhǔn)化程度也有望得到提高。

13.1復(fù)

軟件復(fù)用(SoftwareReuse,又稱軟件重用或軟件再用)的概念對(duì)于大家來說并不陌生。軟件復(fù)用的觀念起源于制造業(yè)和土木工程領(lǐng)域,通過配件組裝汽車、磚瓦搭建房屋就是很好的例子,基于配件的產(chǎn)品在市場(chǎng)上已取得了很大的成功。軟件配件叫做構(gòu)件,一般認(rèn)為可復(fù)用的二進(jìn)制代碼即為構(gòu)件,構(gòu)件觀念和面向?qū)ο缶幊痰膶?duì)象思想很相似。

軟件復(fù)用包含以下兩層意思:

(1)系統(tǒng)地開發(fā)可復(fù)用的軟部件。這些軟部件可以是代碼,但不局限在代碼,必須從更廣泛和更高層次來理解,這樣才會(huì)帶來更大的復(fù)用收益。比如軟部件還可以是分析、設(shè)計(jì)、測(cè)試數(shù)據(jù)、原型、計(jì)劃、文檔、模板、框架等。

(2)系統(tǒng)地使用這些軟部件作為構(gòu)筑模塊,建立新的系統(tǒng)。

軟件復(fù)用可帶來很多好處,軟部件也有不同的粒度,軟件復(fù)用可分為以下三個(gè)層次:

(1)知識(shí)復(fù)用(例如,軟件工程知識(shí)的復(fù)用);

(2)方法和標(biāo)準(zhǔn)的復(fù)用(例如,面向?qū)ο蠓椒ɑ驀?guó)家制定的軟件開發(fā)規(guī)范的復(fù)用);

(3)軟件成分的復(fù)用。

軟件復(fù)用還涉及如何剪裁和修改可復(fù)用部件以適應(yīng)新的要求。有下面四種剪裁方法:

(1)根本不剪裁。如程序設(shè)計(jì)語(yǔ)言所帶的庫(kù)函數(shù);

(2)手工剪裁法。即手工修改可復(fù)用部件的內(nèi)部細(xì)節(jié),要求用戶了解可復(fù)用部件的內(nèi)部詳細(xì)情況;

(3)模板修改法。按模板修改比手工剪裁方便且安全,同手工剪裁一樣,有可能因修改可復(fù)用部件而使其出錯(cuò)。

(4)類屬參數(shù)化方法。能保證修改不會(huì)使原可復(fù)用部件出錯(cuò),但對(duì)設(shè)計(jì)和編碼有一定要求,可復(fù)用技術(shù)中一般都采用此方法。

那么,怎樣才能復(fù)用軟件呢?可復(fù)用軟件應(yīng)滿足下面的條件。

(1)軟件系統(tǒng)應(yīng)是模塊化結(jié)構(gòu)。只有在模塊化結(jié)構(gòu)中,模塊內(nèi)部的修改和局部系統(tǒng)的重構(gòu)(部分模塊的替換、部分接口的改動(dòng))才不至于影響系統(tǒng)的功能和總體面貌。

(2)軟件系統(tǒng)應(yīng)不依賴于具體的運(yùn)行環(huán)境。在這種結(jié)構(gòu)的系統(tǒng)中,依賴于具體運(yùn)行環(huán)境的部分可以集中在少數(shù)模塊。一旦系統(tǒng)環(huán)境發(fā)生變化,就可以用其他模塊加以替換。

(3)軟件系統(tǒng)應(yīng)建立在標(biāo)準(zhǔn)的、統(tǒng)一的數(shù)據(jù)接口上。即軟件系統(tǒng)在建立數(shù)據(jù)模塊進(jìn)行數(shù)據(jù)操作時(shí),都要求以標(biāo)準(zhǔn)的數(shù)據(jù)模式為依據(jù)。這樣可以減少系統(tǒng)中模塊之間的數(shù)據(jù)交換和相互依賴關(guān)系,并將數(shù)據(jù)模塊的操作集中在少數(shù)幾個(gè)模塊進(jìn)行統(tǒng)一管理。

(4)軟件系統(tǒng)應(yīng)有知識(shí)的幫助。這一要求不是必須的,但在軟件系統(tǒng)進(jìn)行重構(gòu)、擴(kuò)充時(shí),知識(shí)庫(kù)系統(tǒng)可以提供并學(xué)習(xí)系統(tǒng)組合、生成及復(fù)用方面的知識(shí),從而提高工作效率、改進(jìn)工作質(zhì)量。

13.2復(fù)用的障礙與復(fù)用技巧

1.復(fù)用的障礙

軟件復(fù)用面臨各方面的困難,無論是技術(shù)問題還是非技術(shù)問題,都影響著軟件復(fù)用的廣泛實(shí)施。

(1)技術(shù)因素。一些開發(fā)者開發(fā)的構(gòu)件,要做到在另一些人開發(fā)的系統(tǒng)中使用時(shí)正好合適,從內(nèi)容到接口都恰好相符,或做很少的修改,不是一件簡(jiǎn)單的事。構(gòu)件要達(dá)到一定的數(shù)量,才能支持有效的復(fù)用,而大量構(gòu)件的獲得需要有很高的投入和長(zhǎng)期的積累。當(dāng)構(gòu)件達(dá)到較大的數(shù)量時(shí),使用者要從中找到一個(gè)自己想要的構(gòu)件,并斷定它確實(shí)是自己需要的,不是一件輕而易舉的事。基于復(fù)用的軟件開發(fā)方法和軟件過程是一個(gè)新的研究實(shí)踐領(lǐng)域,需要一些新的理論、技術(shù)及支持環(huán)境,這方面的研究成果和實(shí)踐經(jīng)驗(yàn)還不夠充分。

(2)人的因素。軟件開發(fā)是一種創(chuàng)造性工作,長(zhǎng)期從事這個(gè)行業(yè)的人們形成了一種職業(yè)習(xí)慣:喜歡自己創(chuàng)造而不喜歡使用別人的東西,特別是當(dāng)要對(duì)別人開發(fā)的軟件做一些修改再使用時(shí),常常喜歡自己重新寫一個(gè)。

(3)管理因素。在軟件生產(chǎn)的管理中,延續(xù)了一些與復(fù)用的目標(biāo)很不協(xié)調(diào)的制度與政策,如計(jì)算工作量時(shí),對(duì)復(fù)用部分大打折扣,甚至不算工作量。另外,不是在項(xiàng)目開始時(shí)自覺地向著打造可復(fù)用構(gòu)件的方向努力,而是在它完成之后,看看是否能從中找到一些可復(fù)用構(gòu)件。這些弊端妨礙了復(fù)用水平的提高和復(fù)用規(guī)模的擴(kuò)大,甚至?xí)靷铝τ趶?fù)用的人員的積極性。

(4)教育因素。在軟件科學(xué)技術(shù)的教育與培訓(xùn)中,缺乏關(guān)于軟件復(fù)用的內(nèi)容,很少有這方面的專門教材及課程,即使在其他教材及課程中提到軟件復(fù)用,其篇幅及內(nèi)容也相當(dāng)薄弱。

(5)法律因素。在法律上還存在一些問題,例如,一個(gè)可復(fù)用構(gòu)件在某個(gè)應(yīng)用系統(tǒng)中出現(xiàn)了錯(cuò)誤,而構(gòu)件的開發(fā)者和應(yīng)用系統(tǒng)的開發(fā)者不是一個(gè)廠商,那么應(yīng)該由誰(shuí)負(fù)責(zé)?此外,在版權(quán)、政府政策等方面也存在一些懸而未決的問題。

(6)邏輯產(chǎn)品。軟件產(chǎn)品是一種邏輯產(chǎn)品、精神產(chǎn)品,它的產(chǎn)生幾乎完全是人腦思維的結(jié)果,它的價(jià)值也幾乎完全在于其中所凝結(jié)的思想,它的物質(zhì)載體的制造過程與價(jià)值含量都是微不足道的。物質(zhì)產(chǎn)品的生產(chǎn)受到人類制造能力的限制,現(xiàn)有的一切物質(zhì)產(chǎn)品的復(fù)雜性都沒有超過這種限度,軟件卻沒有這種限制,只要人的大腦能想到的問題,都可能要求軟件去解決,人腦所能思考的問題的復(fù)雜性,遠(yuǎn)遠(yuǎn)超出了人類能制造的物質(zhì)產(chǎn)品的復(fù)雜性,因而使軟件的復(fù)用更為困難。

2.復(fù)用技巧

軟件復(fù)用有很多技巧,通常有下面的一些方法。

(1)使用軟件開發(fā)最佳實(shí)踐。從以前已實(shí)現(xiàn)的內(nèi)容進(jìn)行學(xué)習(xí),例如,使用配置管理工具來跟蹤代碼版本,從而可以跟蹤更改和保持度量。

(2)避免捷徑和權(quán)宜之計(jì)。這也是為了保證一次性正確完成相應(yīng)工作,例如,當(dāng)在代碼中進(jìn)行更改時(shí),確保進(jìn)行回歸測(cè)試,從而確保不會(huì)破壞程序中的任何代碼。

(3)持續(xù)對(duì)代碼和解決方案進(jìn)行記錄?!俺脽岽蜩F”形成代碼的相關(guān)文檔更為容易,在項(xiàng)目最后進(jìn)行此工作將困難得多,且很可能不會(huì)進(jìn)行,例如,記錄到其他構(gòu)件的接口以及對(duì)其他構(gòu)件的依賴關(guān)系等。

(4)不要在代碼中使用客戶名稱或引用。在代碼中使用客戶名稱或引用,實(shí)際就是讓代碼立即變得落伍,限制了其用途,不要在代碼中包含僅適用于一個(gè)項(xiàng)目的引用,例如,不要在數(shù)據(jù)庫(kù)模式或類名稱中使用客戶名稱。

(5)外部化字符串和文本。通過將字符串和文本外部化,可以更方便地對(duì)其進(jìn)行更改或翻譯。如果要開發(fā)國(guó)際化的應(yīng)用程序,務(wù)必對(duì)程序所顯示的文本進(jìn)行外部化。通過外部化字符串,可以在不重新構(gòu)建應(yīng)用程序的前提下針對(duì)不同國(guó)家(地區(qū))和語(yǔ)言翻譯相應(yīng)的文本。

另外,在使用外部化字符串和文本的同時(shí),考慮為特定配置信息(如URL或數(shù)據(jù)庫(kù))使用XML配置或?qū)傩晕募?,如?/p>

<init-param>

<name></name>

<value></value>

</init-param>

(6)使用標(biāo)準(zhǔn)協(xié)議和方法在軟件模塊之間進(jìn)行通信。這就允許其他人在復(fù)用時(shí)根據(jù)需要方便地更新或修改代碼,例如,不要使用自定義消息傳遞格式,而使用XML。XML提供了基于標(biāo)準(zhǔn)且獨(dú)立于平臺(tái)的方式來表示結(jié)構(gòu)化數(shù)據(jù),允許使用標(biāo)準(zhǔn)解析例程。

(7)創(chuàng)建通用代碼模板。通用代碼模板允許對(duì)代碼進(jìn)行復(fù)用,例如,考慮使用獨(dú)立于類型的函數(shù)模板,或使用特殊行為可擴(kuò)展其他類型的適配器類模板。

(8)遵循行業(yè)標(biāo)準(zhǔn)和規(guī)范。各種標(biāo)準(zhǔn)組織花費(fèi)了大量的時(shí)間,通過參考來自開發(fā)領(lǐng)域的各種信息,才制訂出這些標(biāo)準(zhǔn)。使用標(biāo)準(zhǔn)可確?;ゲ僮餍院涂梢浦残?,當(dāng)必須與其他服務(wù)進(jìn)行通信,以產(chǎn)生所需的輸出時(shí),這就變得越來越重要。

(9)使用公司的標(biāo)準(zhǔn)模板。如果公司內(nèi)的所有人都使用相同的模板,在組中交換信息就會(huì)變得容易得多。標(biāo)準(zhǔn)模板可確保每個(gè)開發(fā)人員都能獲得其項(xiàng)目的相同信息。

如圖13-1所示,可了解軟件構(gòu)件如何創(chuàng)建、編錄和復(fù)用。首先,客戶需求開發(fā)人員創(chuàng)建滿足需求的服務(wù)或解決方案。開發(fā)人員以構(gòu)件化方式創(chuàng)建軟構(gòu)件,并將其放入到構(gòu)件庫(kù)中。在獨(dú)立的客戶事務(wù)中,將請(qǐng)求一個(gè)解決方案或服務(wù),開發(fā)人員查詢構(gòu)件庫(kù),以確定是否有可復(fù)用的合適構(gòu)件。找到了此構(gòu)件后,會(huì)將其合并到客戶解決方案中。

圖13-1構(gòu)件復(fù)用的過程

舉例:一個(gè)軟件構(gòu)件復(fù)用的示例

一家服裝店需要開發(fā)一個(gè)與支付處理和產(chǎn)品配送中心集成的Web店面解決方案。為了允許該店的客戶在線購(gòu)物,公司開發(fā)了完整的解決方案。在開發(fā)期間,將其構(gòu)件化為多個(gè)部分,例如,添加到購(gòu)物車、處理訂單、庫(kù)存管理、購(gòu)物或財(cái)務(wù)處理等,將每個(gè)構(gòu)件化的構(gòu)件放入到公司的構(gòu)件庫(kù),將成為下一個(gè)項(xiàng)目的基礎(chǔ)。

兩個(gè)月后,一家珠寶店需要一個(gè)類似的解決方案,能進(jìn)行網(wǎng)上商業(yè)活動(dòng),需要一個(gè)允許進(jìn)行在線事務(wù)的應(yīng)用程序。通過搜索構(gòu)件庫(kù),查找相關(guān)的構(gòu)件,找到了“添加到購(gòu)物車”代碼,提取該構(gòu)件,并將其放置到客戶解決方案的當(dāng)前體系結(jié)構(gòu)中,從而節(jié)省了共160個(gè)人時(shí)的開發(fā)時(shí)間、設(shè)計(jì)時(shí)間和測(cè)試時(shí)間。

在此示例中,可復(fù)用構(gòu)件為這家珠寶店和公司提供了很大的幫助,為客戶提供了經(jīng)過測(cè)試的成熟解決方案,并同時(shí)節(jié)省了公司的資金。

13.3對(duì)

復(fù)

支持軟件復(fù)用是人們對(duì)面向?qū)ο蠓椒耐械闹饕M唬彩沁@種方法受到廣泛重視的主要原因之一。面向?qū)ο蠓椒ㄖ蕴貏e有利于軟件復(fù)用,是由于它的主要概念及原則與軟件復(fù)用的要求十分吻合。

13.3.1OO方法對(duì)軟件復(fù)用的支持

與其他軟件工程方法相比,面向?qū)ο蠓椒ǖ囊粋€(gè)重要優(yōu)點(diǎn)是,可以在整個(gè)軟件生命周期達(dá)到概念、原則、術(shù)語(yǔ)及表示法的高度一致。這種一致性使得各個(gè)系統(tǒng)成分盡管在不同的開發(fā)與演化階段有不同的形態(tài),但可具有貫穿整個(gè)軟件生命周期的良好映射。這一優(yōu)點(diǎn)使OO方法不但能在各個(gè)級(jí)別支持軟件復(fù)用,而且能對(duì)各個(gè)級(jí)別的復(fù)用形成統(tǒng)一的、高效的支持,達(dá)到良好的全局效果。

做到這一點(diǎn)的必要條件是,從面向?qū)ο筌浖_發(fā)的前期階段—OOA就把支持軟件復(fù)用作為一個(gè)重點(diǎn)問題來考慮。運(yùn)用OOA方法所定義的對(duì)象類具有適合作為可復(fù)用構(gòu)件的許多特征,OOA結(jié)果對(duì)問題域的良好映射,使同類系統(tǒng)的開發(fā)者容易從問題出發(fā),在已有的OOA結(jié)果中發(fā)現(xiàn)不同粒度的可復(fù)用構(gòu)件。

(1)

OOA模型。OOA方法建立的系統(tǒng)模型分為基本模型(類圖)和補(bǔ)充模型(場(chǎng)景圖與交互圖),強(qiáng)調(diào)在OOA基本模型中只表示最重要的系統(tǒng)建模信息,較為細(xì)節(jié)的信息則在詳細(xì)說明中給出。這種表示策略使OOA基本模型體現(xiàn)了更高的抽象,更容易成為一個(gè)可復(fù)用的系統(tǒng)構(gòu)架。當(dāng)這個(gè)構(gòu)架在不同的應(yīng)用系統(tǒng)中復(fù)用時(shí),在很多情況下可通過不同的詳細(xì)說明體現(xiàn)系統(tǒng)之間的差異,因此對(duì)系統(tǒng)構(gòu)件的改動(dòng)較少。

(2)

OOA與OOD的分工。OOA只注重與問題域及系統(tǒng)責(zé)任有關(guān)的信息,OOD考慮與實(shí)現(xiàn)條件有關(guān)的因素。這種分工使OOA模型獨(dú)立于具體的實(shí)現(xiàn)條件,從而使分析結(jié)果可以在問題域及系統(tǒng)責(zé)任相同而實(shí)現(xiàn)條件互異的多個(gè)系統(tǒng)中復(fù)用,并為從同一領(lǐng)域的多個(gè)系統(tǒng)的分析模型提煉領(lǐng)域模型創(chuàng)造了有利條件。

(3)對(duì)象的表示。所有的對(duì)象都用類來描述。對(duì)象的一組信息,包括對(duì)象的屬性、行為及其對(duì)外關(guān)系等都是通過對(duì)象類來表示的。類作為一種可復(fù)用構(gòu)件,在用于不同系統(tǒng)時(shí),不會(huì)出現(xiàn)因該類對(duì)象實(shí)例不同而使系統(tǒng)模型有所不同的情況。

(4)一般—特殊結(jié)構(gòu)。引入對(duì)一般—特殊結(jié)構(gòu)中多態(tài)性的表示法,從而增強(qiáng)了類的可復(fù)用性。通過對(duì)多態(tài)性的表示,可以在需求相似而未必完全相同的系統(tǒng)中復(fù)用一個(gè)類。

(5)整體—部分結(jié)構(gòu)。把部分類作為可復(fù)用構(gòu)件在整個(gè)類中使用,這種策略的原理與在特殊類中使用一般類是一致的,但在某些情況下,對(duì)問題域的映射比通過繼承實(shí)現(xiàn)復(fù)用顯得更為自然。另外,還可通過整體—部分結(jié)構(gòu)支持領(lǐng)域復(fù)用的策略—從整體對(duì)象中分離出一組可在領(lǐng)域范圍內(nèi)復(fù)用的屬性與服務(wù),定義為部分對(duì)象,使之成為領(lǐng)域復(fù)用構(gòu)件。

(6)實(shí)例連接。建議用簡(jiǎn)單的二元關(guān)系表示各種復(fù)雜關(guān)系和多元關(guān)系。這一策略使構(gòu)成系統(tǒng)的基本成分(對(duì)象類)以及它們之間的關(guān)系在表示形式和實(shí)現(xiàn)技術(shù)上都是規(guī)范和一致的,這種規(guī)范性和一致性對(duì)于可復(fù)用構(gòu)件的組織、管理和使用,都是很有益的。

(7)類描述模板。作為OOA詳細(xì)說明主要成分的類描述模板,對(duì)于對(duì)象之間關(guān)系的描述注意到使用者與被使用者的區(qū)別,僅在使用者一端給出類之間關(guān)系的描述信息。這說明可復(fù)用構(gòu)件之間的依賴關(guān)系不是對(duì)等的。因此,在繼承、聚合、實(shí)例連接及消息連接等關(guān)系的使用者一端描述這些關(guān)系,有利于這些關(guān)系信息和由它們指出的被依賴成分的同時(shí)復(fù)用。在被用者一端不描述這些關(guān)系,則避免了因復(fù)用場(chǎng)合的不同所引起的修改。

(8)用例。由于用例是對(duì)用戶需求的一種規(guī)范化描述,因此比普通形式的需求文檔具有更強(qiáng)的可復(fù)用性。每個(gè)用例是對(duì)一個(gè)參與者使用系統(tǒng)的一項(xiàng)功能時(shí)的交互活動(dòng)的描述,具有完整性和一定的獨(dú)立性,因此很適于作為可復(fù)用構(gòu)件。

13.3.2復(fù)用技術(shù)對(duì)OO方法的支持

面向?qū)ο蟮能浖_發(fā)和軟件復(fù)用之間的關(guān)系是相輔相成的。一方面,OO方法的基本概念、原則與技術(shù)提供了實(shí)現(xiàn)軟件復(fù)用的有利條件;另一方面,軟件復(fù)用技術(shù)也對(duì)面向?qū)ο蟮能浖_發(fā)提供了有力的支持。

(1)類庫(kù)。在面向?qū)ο蟮能浖_發(fā)中,類庫(kù)是實(shí)現(xiàn)對(duì)象類復(fù)用的基本條件。人們已經(jīng)開發(fā)了許多基于各種OOPL的編程類庫(kù),有力地支持了源程序級(jí)的軟件復(fù)用,但要在更高的級(jí)別上實(shí)現(xiàn)軟件復(fù)用,僅有編程類庫(kù)是不夠的。實(shí)現(xiàn)OOA結(jié)果和OOD結(jié)果的復(fù)用,必須有分析類庫(kù)和設(shè)計(jì)類庫(kù)的支持。為了更好地支持多個(gè)級(jí)別的軟件復(fù)用,可以在OOA類庫(kù)、OOD類庫(kù)和OOP類庫(kù)之間建立各個(gè)類在不同開發(fā)階段的對(duì)應(yīng)與演化關(guān)系。即建立一種線索,表明每個(gè)OOA的類對(duì)應(yīng)著哪個(gè)(或哪些)OOD類,以及每個(gè)OOD類對(duì)應(yīng)著各種OO編程語(yǔ)言類庫(kù)中的哪個(gè)OOP類。

(2)構(gòu)件庫(kù)。類庫(kù)可以看作一種特殊的可復(fù)用構(gòu)件庫(kù),為在面向?qū)ο蟮能浖_發(fā)中實(shí)現(xiàn)軟件復(fù)用提供了一種基本的支持。但是,類庫(kù)只能存儲(chǔ)和管理以類為單位的可復(fù)用構(gòu)件,不能保存其他形式的構(gòu)件;但是它可以更多地保持類構(gòu)件之間的結(jié)構(gòu)與連接關(guān)系。構(gòu)件庫(kù)中的可復(fù)用構(gòu)件,既可以是類,也可以是其它系統(tǒng)單位;其組織方式,可以不考慮對(duì)象類特有的各種關(guān)系,只按一般的構(gòu)件描述、分類及檢索方法進(jìn)行組織。在面向?qū)ο蟮能浖_發(fā)中,可以提煉比對(duì)象類粒度更大的可復(fù)用構(gòu)件,例如,把某些結(jié)構(gòu)或某些主題作為可復(fù)用構(gòu)件;也可以提煉其他形式的構(gòu)件,例如,用例或交互圖。這些構(gòu)件庫(kù)中,構(gòu)件的形式及內(nèi)容比類庫(kù)更豐富,可為面向?qū)ο蟮能浖_發(fā)提供更強(qiáng)的支持。

(3)構(gòu)架庫(kù)。如果在某個(gè)應(yīng)用領(lǐng)域中已經(jīng)運(yùn)用OOA技術(shù)建立過一個(gè)或幾個(gè)系統(tǒng)的OOA模型,則每個(gè)OOA模型都應(yīng)該保存起來,為該領(lǐng)域新系統(tǒng)的開發(fā)提供參考。當(dāng)一個(gè)領(lǐng)域已有多個(gè)OOA模型時(shí),可以通過進(jìn)一步抽象而產(chǎn)生一個(gè)可復(fù)用的軟件構(gòu)架。形成這種可復(fù)用軟件構(gòu)架的更正規(guī)的途徑是開展領(lǐng)域分析。通過正規(guī)的領(lǐng)域分析獲得的軟件構(gòu)架將更準(zhǔn)確地反映一個(gè)領(lǐng)域中各個(gè)應(yīng)用系統(tǒng)的共性,具有更強(qiáng)的可復(fù)用價(jià)值。

(4)工具。有效的實(shí)行軟件復(fù)用需要有一些支持復(fù)用的軟件工具,包括類庫(kù)或構(gòu)件/構(gòu)架庫(kù)的管理、維護(hù)與瀏覽工具,構(gòu)件提取及描述工具,以及構(gòu)件檢索工具等。以支持復(fù)用為背景的OOA工具和OOD工具在設(shè)計(jì)上也有相應(yīng)的要求。工具對(duì)OOA/OOD過程的支持功能應(yīng)包括:從類庫(kù)或構(gòu)件/構(gòu)架庫(kù)中尋找可復(fù)用構(gòu)件;對(duì)構(gòu)件進(jìn)行修改,并加入當(dāng)前的系統(tǒng)模型;把當(dāng)前系統(tǒng)開發(fā)中新定義的類(或其他構(gòu)件)提交到類庫(kù)(或構(gòu)件庫(kù))。

(5)

OOA過程。在復(fù)用技術(shù)支持下的OOA過程,可以按兩種策略進(jìn)行組織。第一種策略是在原有的OOA過程基礎(chǔ)上增加復(fù)用技術(shù)的支持,應(yīng)補(bǔ)充說明的一點(diǎn)是,復(fù)用技術(shù)支持下的OOA過程應(yīng)增加一個(gè)提交新構(gòu)件的活動(dòng)。即在一個(gè)具體應(yīng)用系統(tǒng)的開發(fā)中,如果定義了一些有希望被其它系統(tǒng)復(fù)用的構(gòu)件,則應(yīng)該把它提交到可復(fù)用構(gòu)件庫(kù)中。第二種策略的前提是:在對(duì)一個(gè)系統(tǒng)進(jìn)行面向?qū)ο蟮姆治鲋?,已?jīng)用面向?qū)ο蠓椒▽?duì)該系統(tǒng)所屬的領(lǐng)域進(jìn)行過領(lǐng)域分析,得到了一個(gè)用面向?qū)ο蠓椒ū硎镜念I(lǐng)域構(gòu)架和一批類構(gòu)件,并且具有構(gòu)件/構(gòu)架庫(kù)、類庫(kù)及相應(yīng)工具的支持。在這種條件下,重新考慮OOA過程中各個(gè)活動(dòng)的內(nèi)容及活動(dòng)之間的關(guān)系,力求以組裝的方式產(chǎn)生OOA模型,將使OOA過程更為合理,并達(dá)到更高的開發(fā)效率。

13.4構(gòu)件及構(gòu)件技術(shù)

面向構(gòu)件技術(shù)對(duì)一組類的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。整個(gè)構(gòu)件隱藏了具體的實(shí)現(xiàn),只用接口提供服務(wù)。這樣,在不同層次上,構(gòu)件均可以將底層的多個(gè)邏輯組合成高層次上的粒度更大的新構(gòu)件,甚至直接封裝到一個(gè)系統(tǒng),使模塊的復(fù)用從代碼級(jí)、對(duì)象級(jí)、構(gòu)架級(jí)到系統(tǒng)級(jí)都可能實(shí)現(xiàn),從而使軟件像硬件一樣,能讓人裝配定制而成的夢(mèng)想得以實(shí)現(xiàn)。

13.4.1構(gòu)件

構(gòu)件是指模塊化的、可部署、可替換的軟件系統(tǒng)組成部分,它封裝了內(nèi)部的具體實(shí)現(xiàn)并對(duì)外提供一組接口。它由以下三大要素構(gòu)成。

(1)接口(Interface):接口告訴我們構(gòu)件能完成什么功能。

(2)實(shí)現(xiàn)(Implementation):是讓構(gòu)件得以運(yùn)作的代碼。一個(gè)構(gòu)件可以有多個(gè)實(shí)現(xiàn),如一個(gè)構(gòu)件可以同時(shí)處理XML文件的實(shí)現(xiàn)和處理關(guān)系型數(shù)據(jù)庫(kù)文件的實(shí)現(xiàn)。

(3)部署(Deployment):是構(gòu)件的存在形式,一般即為二進(jìn)制代碼和可執(zhí)行文件。

構(gòu)件的功能均由標(biāo)準(zhǔn)接口定義,通過接口調(diào)用完成。這樣不僅可以容易地重用構(gòu)件,而且由于標(biāo)準(zhǔn)接口的存在,不同操作系統(tǒng),不同語(yǔ)言,不同結(jié)構(gòu)的構(gòu)件之間既可以完成互操作又保證了構(gòu)件之間相互獨(dú)立,最大限度降低耦合。

構(gòu)件解決三個(gè)重要問題:一是復(fù)用性,二是互操作性,三是封裝性。

(1)構(gòu)件的最重要的特性是可復(fù)用性。構(gòu)件的提出就是為了解決軟件中的功能模塊的可復(fù)用,提高開發(fā)效率,增強(qiáng)系統(tǒng)的可維護(hù)性、可擴(kuò)展性和可升級(jí)性。

(2)構(gòu)件還具有互操作性。由于標(biāo)準(zhǔn)接口的存在,如CORB、ACOM、EJB等,使得構(gòu)件具有很好的互操作性,讓系統(tǒng)的開發(fā)人員擁有更大的選擇空間。

(3)構(gòu)件還具有封裝性。構(gòu)件對(duì)外提供標(biāo)準(zhǔn)的訪問接口,具有良好的封裝性,即內(nèi)部功能模塊的實(shí)現(xiàn)發(fā)生變化,不影響外界對(duì)它的調(diào)用。這樣有利于bug的定位,版本的升級(jí)。

隨著對(duì)軟件復(fù)用理解的深入,構(gòu)件的概念己不再局限于源代碼構(gòu)件,而是延伸到需求、系統(tǒng)和軟件的需求規(guī)約、系統(tǒng)和軟件的構(gòu)架、文檔、測(cè)試計(jì)劃、測(cè)試案例和數(shù)據(jù)以及其他對(duì)開發(fā)活動(dòng)有用的信息。這些信息都可以稱為可復(fù)用軟件構(gòu)件。其應(yīng)具備以下屬性:

有用性(Usefulness):構(gòu)件必須提供有用的功能;

可用性(Usability):構(gòu)件必須易于理解和使用;

質(zhì)量(Quality):構(gòu)件及其變形必須能正確工作;

適應(yīng)性(Adaptability):構(gòu)件應(yīng)該易于通過參數(shù)化等方式在不同語(yǔ)境中進(jìn)行配置;

可移植性(Portability):構(gòu)件應(yīng)能在不同的硬件運(yùn)行平臺(tái)和軟件環(huán)境中工作。

13.4.2構(gòu)件技術(shù)模型

軟件構(gòu)件技術(shù)是支持軟件復(fù)用的核心技術(shù),是近幾年來迅速發(fā)展并受到高度重視的一個(gè)學(xué)科分支。其主要研究?jī)?nèi)容包括:

(1)構(gòu)件獲?。河心康牡臉?gòu)件生產(chǎn)和從已有系統(tǒng)中挖掘提取構(gòu)件;

(2)構(gòu)件模型:研究構(gòu)件的本質(zhì)特征及構(gòu)件間的關(guān)系;

(3)構(gòu)件描述語(yǔ)言:以構(gòu)件模型為基礎(chǔ),解決構(gòu)件的精確描述、理解及組裝問題;

(4)構(gòu)件分類與檢索:研究構(gòu)件分類策略、組織模式及檢索策略,建立構(gòu)件庫(kù)系統(tǒng),支持構(gòu)件的有效管理;

(5)構(gòu)件復(fù)合組裝:在構(gòu)件模型的基礎(chǔ)上研究構(gòu)件組裝機(jī)制,包括源代碼級(jí)的組裝和基于構(gòu)件對(duì)象互操作性的運(yùn)行及組裝;

(6)標(biāo)準(zhǔn)化:構(gòu)件模型的標(biāo)準(zhǔn)化和構(gòu)件庫(kù)系統(tǒng)的標(biāo)準(zhǔn)化。

構(gòu)件是一種不透明的功能實(shí)現(xiàn),要通過構(gòu)件模型進(jìn)行構(gòu)造,要能夠與第三方進(jìn)行合成,這樣就存在構(gòu)件模型標(biāo)準(zhǔn)化的問題。構(gòu)件模型的標(biāo)準(zhǔn)化要能同時(shí)滿足構(gòu)件生產(chǎn)者和構(gòu)件消費(fèi)者的需求,學(xué)術(shù)界普遍接受的是“3C”(Concept,Content,Context)模型,即構(gòu)件=(概念,內(nèi)容,上下文),在這個(gè)模型中:

概念:描述軟件完成什么功能。

內(nèi)容:描述如何實(shí)現(xiàn)這個(gè)構(gòu)件,一般情況下,構(gòu)件的內(nèi)容信息對(duì)臨時(shí)用戶是隱藏的,只有需要對(duì)構(gòu)件作修改的用戶才是可知的。

上下文:構(gòu)件在其適用領(lǐng)域內(nèi)的配置。通過對(duì)概念、操作和實(shí)現(xiàn)特征的詳細(xì)說明,上下文能夠使軟件尋找到滿足應(yīng)用需求的構(gòu)件。

獨(dú)立開發(fā)的可復(fù)用構(gòu)件滿足不同的應(yīng)用需求,并對(duì)運(yùn)行上下文做出了某些假設(shè)。系統(tǒng)的軟件體系結(jié)構(gòu)定義了系統(tǒng)中所有構(gòu)件的設(shè)計(jì)規(guī)則、連接模式和交互模式。

如果被復(fù)用的構(gòu)件不符合目標(biāo)系統(tǒng)的軟件體系結(jié)構(gòu)就可能導(dǎo)致該構(gòu)件無法正常工作,甚至影響整個(gè)系統(tǒng)的運(yùn)行,這種情形稱為失配。調(diào)整構(gòu)件使之滿足體系結(jié)構(gòu)要求的行為就是構(gòu)件適配。構(gòu)件適配可通過白盒、灰盒或黑盒的方式對(duì)構(gòu)件進(jìn)行修改或配置。白盒方式允許直接修改構(gòu)件源代碼;灰盒方式不允許直接修改構(gòu)件源代碼,但提供了可修改構(gòu)件行為的擴(kuò)展語(yǔ)言或編程接口;黑盒方式是指調(diào)整那些只有可執(zhí)行代碼且沒有任何擴(kuò)展機(jī)制的構(gòu)件。如果構(gòu)件無法適配,就不得不尋找其它適合的構(gòu)件。

13.4.3當(dāng)前主流構(gòu)件模型

近年來構(gòu)件技術(shù)迅速發(fā)展,國(guó)內(nèi)外對(duì)構(gòu)件技術(shù)的研究已取得了一定成果。當(dāng)前主流構(gòu)件模型主要有:美國(guó)OMG(ObjectManagementGroup,對(duì)象管理組織)的CORBA技術(shù)、SUN(Oracle)的JavaBeans/EJB及微軟的DCOM/COM/COM+。我國(guó)自主研發(fā)的“和欣”操作系統(tǒng)(英文名Elastos)就是使用構(gòu)件技術(shù)開發(fā)的典型,創(chuàng)新性地實(shí)現(xiàn)了CAR(ComponentAssemblyRuntime)構(gòu)件技術(shù),即一種完全面向下一代的網(wǎng)絡(luò)服務(wù)。

1.?CORBA

CORBA是OMG組織在眾多開放系統(tǒng)平臺(tái)廠商提交的分布對(duì)象互操作內(nèi)容的基礎(chǔ)上制定的公共對(duì)象請(qǐng)求代理體系規(guī)范。CORBA分布計(jì)算技術(shù)是由絕大多數(shù)分布計(jì)算平臺(tái)廠商所支持和遵循的系統(tǒng)規(guī)范技術(shù),具有模型完整、先進(jìn),獨(dú)立于系統(tǒng)平臺(tái)和開發(fā)語(yǔ)言、被支持程度廣泛的特點(diǎn),已逐漸成為分布計(jì)算技術(shù)的標(biāo)準(zhǔn)。CORBA標(biāo)準(zhǔn)主要分為對(duì)象請(qǐng)求代理、公共對(duì)象服務(wù)和公共設(shè)施三個(gè)層次。最底層是對(duì)象請(qǐng)求代理ORB,它是關(guān)系模型的核心。規(guī)

定了分布對(duì)象的定義(接口)和語(yǔ)言映射,實(shí)現(xiàn)對(duì)象間的通訊和互操作,是分布對(duì)象系統(tǒng)中的“軟總線”;中間層公共對(duì)象服務(wù)可提供如并發(fā)服務(wù)、名字服務(wù)、事務(wù)服務(wù)、安全服務(wù)等各種服務(wù);最上層的公共設(shè)施則定義了構(gòu)件框架,提供可直接為業(yè)務(wù)對(duì)象使用的服務(wù),規(guī)定業(yè)務(wù)對(duì)象有效協(xié)作所需的協(xié)定規(guī)則。

2.

JavaEE/JavaBeans/EJB

SUN在1999年底推出了Java2技術(shù)及相關(guān)的J2EE(現(xiàn)在稱為JavaEE)規(guī)范,JavaEE著力于推動(dòng)基于Java的服務(wù)器端應(yīng)用開發(fā),其目標(biāo)是提供與平臺(tái)無關(guān)的、可移植的、支持訪問和安全的、完全基于Java的開發(fā)服務(wù)器端構(gòu)件的標(biāo)準(zhǔn)。在JavaEE中,SUN給出了完整的基于Java語(yǔ)言開發(fā)面向企業(yè)分布應(yīng)用規(guī)范。其中,在分布式互操作協(xié)議上,它同時(shí)支持RMI和IIOP,而在服務(wù)器端分布式應(yīng)用的構(gòu)造形式則包括了JavaServlet、JSP、EJB等多種形式,以支持不同的業(yè)務(wù)需求。JavaEE不僅規(guī)范支持跨平臺(tái)的開發(fā),而且簡(jiǎn)化了構(gòu)件服務(wù)器端應(yīng)用的復(fù)雜度,使它在分布計(jì)算領(lǐng)域得到了快速發(fā)展。

EJB是SUN推出的基于Java的服務(wù)器端構(gòu)件規(guī)范JavaEE的一部分,目前已取得較廣泛的發(fā)展,已成為應(yīng)用服務(wù)器端的標(biāo)準(zhǔn)技術(shù)。EJB定義了一個(gè)用于開發(fā)基于構(gòu)件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn),它是SUN在服務(wù)器平臺(tái)上推出的Java技術(shù)族的成員,很大程度上增強(qiáng)了Java的能力,并推動(dòng)了Java在企業(yè)級(jí)應(yīng)用程序的應(yīng)用。從軟件構(gòu)件的角度來看,EJB是Java技術(shù)中服務(wù)器端軟件構(gòu)件的技術(shù)規(guī)范和平臺(tái)支持。

3.

DCOM/COM/COM+

DCOM起源于動(dòng)態(tài)數(shù)據(jù)交換(DDE)技術(shù),通過剪切/粘貼實(shí)現(xiàn)兩個(gè)應(yīng)用程序之間共享數(shù)據(jù)的動(dòng)態(tài)交換。對(duì)象連接與嵌入OLE就是從DDE引申而來的。隨后,Microsoft引入了構(gòu)件對(duì)象模型COM,形成了COM對(duì)象之間實(shí)現(xiàn)互操作的二進(jìn)制標(biāo)準(zhǔn)。

COM(ComponentObjectModel)是由Microsoft公司推出的構(gòu)件接口標(biāo)準(zhǔn),允許任意兩個(gè)構(gòu)件互相通信。COM最初作為Microsoft桌面系統(tǒng)的構(gòu)件技術(shù),主要為本地的OLE應(yīng)用服務(wù),但是隨著Microsoft服務(wù)器操作系統(tǒng)NT和DCOM的發(fā)布,COM通過底層的遠(yuǎn)程支持使得構(gòu)件技術(shù)延伸到了分布應(yīng)用領(lǐng)域?;贑OM,微軟進(jìn)一步將OLE技術(shù)發(fā)展到OLE2。其中COM實(shí)現(xiàn)OLE對(duì)象之間的底層通信工作,其作用類似于CORBA/ORB。

通過COM+的相關(guān)服務(wù)設(shè)施,如負(fù)載均衡、內(nèi)存數(shù)據(jù)庫(kù)、對(duì)象池、構(gòu)件管理與配置等,Microsoft的DCOM/COM/COM+將COM、DCOM、MTS的功能有機(jī)地統(tǒng)一在一起,形成了一個(gè)功能強(qiáng)大的構(gòu)件應(yīng)用體系結(jié)構(gòu)。

4.商業(yè)構(gòu)件

當(dāng)前的軟件已不再是一個(gè)簡(jiǎn)單的系統(tǒng),規(guī)模越來越大,通常是一個(gè)復(fù)雜的“系統(tǒng)中的系統(tǒng)”。大型軟件尤其如此,從頭開始做每一件事情來建造系統(tǒng)幾乎是不可能的,于是出現(xiàn)了COTS(CommercialOffTheShelf)技術(shù)。

使用COTS構(gòu)件突出的優(yōu)點(diǎn)是能降低軟件開發(fā)的成本。購(gòu)買現(xiàn)有的軟件比自己開發(fā)所需的成本低,軟件的健壯性要高,因?yàn)槭袌?chǎng)上提供的COTS軟件使用的是成熟的技術(shù),使用這樣的構(gòu)件往往比自己開發(fā)的構(gòu)件的可靠性要高。但是,COTS構(gòu)件的缺點(diǎn)是以“黑盒”提供給用戶,沒有源代碼,維護(hù)困難,版本易于變化。

13.4.4構(gòu)件的開發(fā)與復(fù)用

構(gòu)件的開發(fā)技術(shù)有多種。其中比較有代表性的是基于構(gòu)件的軟件開發(fā)(CBSD)技術(shù),CBSD是CMU/SEI提出的構(gòu)件設(shè)計(jì)參考模式。這種設(shè)計(jì)模式的特征是:構(gòu)件具有擴(kuò)充獨(dú)立性;構(gòu)件模型必須給出一些標(biāo)準(zhǔn)以保證獨(dú)立開發(fā)的構(gòu)件能夠配置到公共的環(huán)境中,而不會(huì)出現(xiàn)不可預(yù)知的問題;開發(fā)時(shí)間短,這樣會(huì)減少整個(gè)開發(fā)和維護(hù)費(fèi)用;提高可預(yù)知性。

建立在構(gòu)件復(fù)用基礎(chǔ)上的軟件復(fù)用將會(huì)帶來極大的價(jià)值,《SoftwareReuse》指出很多公司通過復(fù)用取得的成就使他們堅(jiān)信,管理層可以期待獲得如下優(yōu)勢(shì)。

投放市場(chǎng)時(shí)間:減少為原來的1/2到1/5。

缺陷密度:降低為原來的1/5到1/10。

維護(hù)成本:降低為原來的1/5到1/10。

舉例:軟件企業(yè)要實(shí)施軟件復(fù)用戰(zhàn)略,下面是一個(gè)有效的軟件開發(fā)實(shí)踐

要進(jìn)行軟件復(fù)用,構(gòu)件的開發(fā)應(yīng)該遵循下面的原則。

(1)構(gòu)件是可復(fù)用的、能二次開發(fā)的,主體可以是源代碼形式,也可以是二進(jìn)制形式,配套相應(yīng)的文檔。

(2)各項(xiàng)目使用的構(gòu)件(包括原創(chuàng)構(gòu)件和第三方構(gòu)件)是受管理的,都是來自于構(gòu)件庫(kù)中,如果不在構(gòu)件庫(kù)中,要先申請(qǐng)入庫(kù),然后才能使用。

(3)各項(xiàng)目的代碼庫(kù)不存放構(gòu)件,統(tǒng)一到指定的構(gòu)件庫(kù)中提取,在項(xiàng)目編譯說明書中詳細(xì)列出項(xiàng)目所用到的構(gòu)件以及如何使用的步驟。

(4)通常,不同項(xiàng)目組使用相同構(gòu)件的版本是相同的。如果有不同,也是受控的。

(5)對(duì)一個(gè)構(gòu)件任何時(shí)候只推薦一個(gè)版本,項(xiàng)目組應(yīng)選用構(gòu)件庫(kù)當(dāng)前推薦的版本。

(6)如果構(gòu)件庫(kù)中構(gòu)件升級(jí),請(qǐng)此構(gòu)件的聯(lián)系人判斷,使用老版本構(gòu)件的項(xiàng)目是否也需要升級(jí),通常盡量升級(jí)到最新版本。

(7)工程改進(jìn)小組(EPG,EngineeringProcessGroup)負(fù)責(zé)構(gòu)件庫(kù)管理。已經(jīng)入庫(kù)的構(gòu)件,不能隨意地刪除或改變目錄結(jié)構(gòu)。如需改變,需要取得所有使用該構(gòu)件的項(xiàng)目組的同意。

采用基于構(gòu)件的開發(fā)方法,在設(shè)計(jì)階段的構(gòu)架工作(基本設(shè)計(jì)工作階段)或更早要考慮設(shè)計(jì)方案時(shí),必須遵循下面的程序。

(1)查詢構(gòu)件庫(kù),選擇需要的構(gòu)件并列出清單。

(2)對(duì)構(gòu)件庫(kù)中完全滿足需求的構(gòu)件,在設(shè)計(jì)資料中注明,并提取相應(yīng)的技術(shù)文檔,作為開發(fā)支持。

(3)對(duì)構(gòu)件庫(kù)中滿足部分需求的構(gòu)件,應(yīng)當(dāng)對(duì)不滿足的部分進(jìn)行分析和抽象,如果經(jīng)過大組長(zhǎng)會(huì)議確認(rèn)是通用功能,可以由負(fù)責(zé)構(gòu)件庫(kù)相關(guān)工作的人員修改或派生出新的構(gòu)件,并及時(shí)提供依賴關(guān)系和變化影響報(bào)告。

(4)對(duì)構(gòu)件庫(kù)中不存在的構(gòu)件,首先由項(xiàng)目組進(jìn)行抽象,提出構(gòu)件的屬性和對(duì)外提供的服務(wù),并確定該構(gòu)件的類型;如果屬于基礎(chǔ)構(gòu)件庫(kù)、通用構(gòu)件,應(yīng)當(dāng)交給大組長(zhǎng)會(huì)議確認(rèn),并將該部分開發(fā)工作從項(xiàng)目組中劃出,由專門人員進(jìn)行開發(fā)和專門測(cè)試,并進(jìn)入相應(yīng)的構(gòu)件庫(kù);如果屬于領(lǐng)域構(gòu)件,應(yīng)當(dāng)通知有關(guān)組,開發(fā)工作由項(xiàng)目組承擔(dān);完工并經(jīng)過測(cè)試組測(cè)試后進(jìn)構(gòu)件庫(kù)。

(5)在工作中,各項(xiàng)目組如果積累了成熟穩(wěn)定的構(gòu)件,要積極地向大組長(zhǎng)申報(bào),再由大組長(zhǎng)進(jìn)行會(huì)議討論確認(rèn),如有必要,要安排專項(xiàng)測(cè)試,最終納入構(gòu)件庫(kù)中。

要進(jìn)行構(gòu)件復(fù)用,必須制定并遵循入庫(kù)/升級(jí)認(rèn)定過程。

(1)有需要的項(xiàng)目組或個(gè)人填寫構(gòu)件入庫(kù)認(rèn)定表,表中除其他角色審批處不要填寫之外,其余各處都要填寫。

(2)審批。

(3)如果需要,須經(jīng)領(lǐng)導(dǎo)審批。

(4)經(jīng)手人審批歸檔。

(5)如果構(gòu)件升級(jí),構(gòu)件聯(lián)系人判斷老版本是否需要升級(jí),并發(fā)布通知。

當(dāng)然,還需處理構(gòu)件的后續(xù)管理和可持續(xù)化問題,可采取對(duì)構(gòu)件貢獻(xiàn)者給以獎(jiǎng)勵(lì)等措施來鼓勵(lì)員工積極參與。

總之,構(gòu)件的開發(fā)是與企業(yè)的軟件開發(fā)策略密切相關(guān),需要遵循嚴(yán)格的規(guī)程,是一個(gè)需要長(zhǎng)期奮斗的目標(biāo),這樣才能享受到構(gòu)件復(fù)用的好處。

開發(fā)過程可參考第14章的14.3節(jié)面向領(lǐng)域工程的軟件工程所述。

13.5設(shè)計(jì)和實(shí)現(xiàn)期間的復(fù)用

構(gòu)建軟件的每個(gè)人都會(huì)告訴你,實(shí)現(xiàn)軟件復(fù)用極具挑戰(zhàn)性,大規(guī)模、系統(tǒng)級(jí)的復(fù)用更是如此。開發(fā)人員要在最后期限內(nèi)滿足需求、交付功能,同時(shí)還要優(yōu)先保證復(fù)用就非常難了。作為團(tuán)隊(duì)領(lǐng)導(dǎo),這個(gè)處境只會(huì)變本加厲——必須滿足客戶的需求,在預(yù)算內(nèi)按時(shí)交付功能,還要管理開發(fā)團(tuán)隊(duì)。抑制復(fù)用的一個(gè)關(guān)鍵因素是,從組織的政治、文化背景來說缺乏領(lǐng)導(dǎo)力和遠(yuǎn)見,而且沒有與業(yè)務(wù)需要的內(nèi)容相結(jié)合。

有些復(fù)用的嘗試以失敗而告終,是因?yàn)樗麄兲^雄心勃勃了,為了設(shè)計(jì)完美的內(nèi)容而花費(fèi)大量精力去做大規(guī)模的先行設(shè)計(jì)。還有其他一些失敗的原因,比如缺乏靈活的設(shè)計(jì)、規(guī)劃不充分,或是資金問題。溝通效率和對(duì)現(xiàn)有可復(fù)用軟件資源的了解也是一個(gè)關(guān)鍵因素,除了設(shè)計(jì)模式,下面再介紹幾種流行的設(shè)計(jì)復(fù)用技術(shù)。

1.軟件體系結(jié)構(gòu)

自從軟件系統(tǒng)首次被分成許多模塊,模塊之間有相互作用,組合起來有整體的屬性起,其就具有了體系結(jié)構(gòu)。事實(shí)上,軟件總是有體系結(jié)構(gòu)的,不存在沒有體系結(jié)構(gòu)的軟件。軟件體系結(jié)構(gòu)是設(shè)計(jì)抽象的進(jìn)一步發(fā)展,滿足了更好地理解軟件系統(tǒng),更方便地開發(fā)更大、更復(fù)雜的軟件系統(tǒng)的需要。

在20世紀(jì)80年代中期出現(xiàn)了Client/Server(C/S)分布式計(jì)算結(jié)構(gòu),應(yīng)用程序的處理在客戶(PC機(jī))和服務(wù)器(Server)之間分擔(dān)。但對(duì)于大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署和擴(kuò)展性方面還是存在著不足。

Internet的發(fā)展給傳統(tǒng)應(yīng)用軟件的開發(fā)帶來了深刻的影響?;贗nternet和Web的軟件和應(yīng)用系統(tǒng)無疑需要更為開放和靈活的體系結(jié)構(gòu)。隨著越來越多的商業(yè)系統(tǒng)被搬上Internet,一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是“三層/多層計(jì)算”。

如圖13-2所示,應(yīng)用程序服務(wù)器運(yùn)行于瀏覽器和數(shù)據(jù)資源之間,一個(gè)簡(jiǎn)單的例子是,顧客從瀏覽器中輸入一個(gè)定單,Web服務(wù)器將該請(qǐng)求發(fā)送給應(yīng)用程序服務(wù)器,由應(yīng)用程序服務(wù)器執(zhí)行處理邏輯,并且獲取或更新后端用戶數(shù)據(jù)。

圖13-2典型的三層體系結(jié)構(gòu)

客戶層。用戶接口和用戶請(qǐng)求的發(fā)出地,典型應(yīng)用是網(wǎng)絡(luò)瀏覽器和富客戶(如Java程序)。

服務(wù)器層。典型應(yīng)用是Web服務(wù)器和運(yùn)行業(yè)務(wù)代碼的應(yīng)用程序服務(wù)器。

數(shù)據(jù)層。典型應(yīng)用是關(guān)系型數(shù)據(jù)庫(kù)和其他后端(Back-end)數(shù)據(jù)資源,如Oracle和SAP、R/3等。

三層體系結(jié)構(gòu)中,客戶(請(qǐng)求信息)、程序(處理請(qǐng)求)和數(shù)據(jù)(被操作)被物理地隔離。三層結(jié)構(gòu)是個(gè)更靈活的體系結(jié)構(gòu),它把顯示邏輯從業(yè)務(wù)邏輯中分離出來,這就意味著業(yè)務(wù)代碼是獨(dú)立的,可以不關(guān)心怎樣顯示和在哪里顯示。業(yè)務(wù)邏輯層處于中間層,不需要關(guān)心由哪種類型的客戶來顯示數(shù)據(jù),也可以與后端系統(tǒng)保持相對(duì)獨(dú)立性,有利于系統(tǒng)擴(kuò)展。三層結(jié)構(gòu)具有更好的移植性,可以跨不同類型的平臺(tái)工作,允許用戶請(qǐng)求在多個(gè)服務(wù)器間進(jìn)行負(fù)載平衡。三層結(jié)構(gòu)中安全性也更易于實(shí)現(xiàn),因?yàn)閼?yīng)用程序已經(jīng)同客戶隔離。應(yīng)用程序服務(wù)器是三層/多層體系結(jié)構(gòu)的組成部分,應(yīng)用程序服務(wù)器位于中間層。

軟件體系結(jié)構(gòu)研究的主要內(nèi)容涉及軟件體系結(jié)構(gòu)描述、軟件體系結(jié)構(gòu)風(fēng)格、軟件體系結(jié)構(gòu)評(píng)價(jià)和軟件體系結(jié)構(gòu)的形式化方法等,解決好軟件的復(fù)用、質(zhì)量和維護(hù)問題,是研究軟件體系結(jié)構(gòu)的根本目的。

當(dāng)今軟件系統(tǒng)的規(guī)模變得越來越大,結(jié)構(gòu)也越來越復(fù)雜,同時(shí)從頭開始構(gòu)建的大系統(tǒng)數(shù)量在急劇地減少,因而很多遺留系統(tǒng)正在被逐步地利用。從遺留系統(tǒng)軟件代碼和系統(tǒng)中抽取結(jié)構(gòu)信息,經(jīng)過描述、統(tǒng)一、抽象、一般化與實(shí)例化等處理,可總結(jié)出系統(tǒng)的體系結(jié)構(gòu),為一些特定的應(yīng)用領(lǐng)域的軟件系統(tǒng)提供一些體系結(jié)構(gòu)框架,如控制系統(tǒng)、移動(dòng)機(jī)器人和用戶接口界面等。通過這些框架可以改進(jìn)人們對(duì)軟件的理解和改進(jìn)軟件本身的活動(dòng),很方便地構(gòu)造一個(gè)新的軟件系統(tǒng),提高軟件質(zhì)量和穩(wěn)定性。

2.應(yīng)用框架

可以說,一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類以及其實(shí)例之間協(xié)作的方法,為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。因此,構(gòu)件庫(kù)的大規(guī)模復(fù)用也需要框架。

應(yīng)用框架的概念也很簡(jiǎn)單,它并不是包含構(gòu)件應(yīng)用程序的小片程序,而是實(shí)現(xiàn)了某應(yīng)用領(lǐng)域通用完備功能(除去特殊應(yīng)用的部分)的底層服務(wù)。使用這種框架的編程人員可以在一個(gè)通用功能已經(jīng)實(shí)現(xiàn)的基礎(chǔ)上開始具體的系統(tǒng)開發(fā),框架提供了所有應(yīng)用期望的默認(rèn)行為的類集合,具體的應(yīng)用通過重寫子類(該子類屬于框架的默認(rèn)行為)或組裝對(duì)象來支持應(yīng)用專用的行為。

框架要解決的最重要的一個(gè)問題是技術(shù)整合。在J2EE的框架中,有著各種各樣的技術(shù),不同的軟件企業(yè)需要從J2EE中選擇不同的技術(shù),這就使得軟件企業(yè)最終的應(yīng)用依賴于這些技術(shù),技術(shù)自身的復(fù)雜性和技術(shù)的風(fēng)險(xiǎn)性將會(huì)直接對(duì)應(yīng)用造成沖擊。應(yīng)用是軟件企業(yè)的核心,是競(jìng)爭(zhēng)力的關(guān)鍵所在,因此,應(yīng)該將應(yīng)用自身的設(shè)計(jì)和具體的實(shí)現(xiàn)技術(shù)解耦。這樣,軟件企業(yè)的研發(fā)將集中在應(yīng)用的設(shè)計(jì)上,而不是具體的技術(shù)實(shí)現(xiàn),技術(shù)實(shí)現(xiàn)是應(yīng)用的底層支撐,它不應(yīng)該直接對(duì)應(yīng)用產(chǎn)生影響。

舉例:一個(gè)做流視頻應(yīng)用的軟件企業(yè),為廣電行業(yè)提供整體的解決方案,其優(yōu)勢(shì)在于將各種各樣的視頻硬件、服務(wù)器和管理結(jié)合起來,扮演的是一個(gè)集成商的角色,其核心價(jià)值在于使用軟件技術(shù)將不同的硬件整合起來,并在硬件的整合層面上提供一個(gè)統(tǒng)一的管理平臺(tái),所以,需要解決下面兩個(gè)問題。

如何找到一種方法,將不同的硬件整合起來,注意,這里的整合并不是技術(shù)整合,而是一種思路上的整合。首先要考慮的絕對(duì)不是要使用什么技術(shù),而是這些硬件需要提供哪些服務(wù),需要以什么樣的方式進(jìn)行管理。因此,這時(shí)候做的事情實(shí)際上是對(duì)領(lǐng)域進(jìn)行建模,例如,任何一種硬件都需要提供兩種能力,一種是統(tǒng)一的管理接口,用于對(duì)所有硬件統(tǒng)一管理;另一種是服務(wù)接口,系統(tǒng)平臺(tái)可以查詢硬件所能夠提供的服務(wù),并調(diào)用這些服務(wù)。所以,設(shè)計(jì)的規(guī)范將會(huì)針對(duì)兩種能力進(jìn)行。

3.提高軟件可維護(hù)性的因素

大量使用可復(fù)用的軟件構(gòu)件來開發(fā)軟件,可以從下述兩個(gè)方面提高軟件的可維護(hù)性。

(1)通常,可復(fù)用的軟件構(gòu)件在開發(fā)時(shí)經(jīng)過很嚴(yán)格的測(cè)試,可靠性比較高,且在每次復(fù)用過程中都會(huì)發(fā)現(xiàn)并清除一些錯(cuò)誤,隨著時(shí)間推移,這樣的構(gòu)件將變成實(shí)質(zhì)上無錯(cuò)誤的。因此,軟件中使用的可復(fù)用構(gòu)件越多,軟件的可靠性越高,改正性維護(hù)需求越少。

(2)很容易修改可復(fù)用的軟件構(gòu)件使之再次應(yīng)用在新環(huán)境中,因此,軟件中使用的可復(fù)用構(gòu)件越多,適應(yīng)性和完善性維護(hù)也就越容易。

13.6復(fù)用及互聯(lián)網(wǎng)

互聯(lián)網(wǎng)應(yīng)用技術(shù)的發(fā)展,提升了互聯(lián)網(wǎng)業(yè)務(wù)實(shí)現(xiàn)的能力,拓展了業(yè)務(wù)提供的模式,豐富了業(yè)務(wù)形態(tài)和種類,是互聯(lián)網(wǎng)應(yīng)用豐富和發(fā)展以及互聯(lián)網(wǎng)業(yè)務(wù)普及的重要驅(qū)動(dòng)力之一。探索互聯(lián)網(wǎng)應(yīng)用技術(shù),可以從對(duì)互聯(lián)網(wǎng)的能力提升角度,將Web2.0時(shí)代的互聯(lián)網(wǎng)技術(shù)分為資源共享和復(fù)用、用戶參與和協(xié)作以及用戶體驗(yàn)提升三大類。從而使Web2.0時(shí)代的互聯(lián)網(wǎng)應(yīng)用具有了廣泛的用戶參與、良好的用戶體驗(yàn)以及信息和應(yīng)用的聚合等新特征,推動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)應(yīng)用進(jìn)入Web2.0時(shí)代,即Web工程。

Web工程作為一門新興的學(xué)科,提倡使用一個(gè)過程和系統(tǒng)的方法來開發(fā)高質(zhì)量的基于Web的系統(tǒng),它用系統(tǒng)的、嚴(yán)密的、可以測(cè)量的方法來開發(fā)、實(shí)施和維護(hù)基于Web的應(yīng)用或基于Web的軟件的工程應(yīng)用。澳大利亞的YogeshDeshpande和SteveHansen在1998年就提出了Web工程(簡(jiǎn)稱為WebE)的概念。

WebE是用來創(chuàng)建高質(zhì)量WebApp的過程。WebE不是軟件工程的簡(jiǎn)單復(fù)制,但是它借鑒了很多軟件工程的基本概念和原理,同時(shí)它也強(qiáng)調(diào)與軟件工程相似的技術(shù)和管理活動(dòng)。雖然在這些活動(dòng)的管理方式方面存在微妙的不同,但是,指導(dǎo)開發(fā)基于計(jì)算機(jī)系統(tǒng)的規(guī)范化方法的主要思想是相同的。設(shè)計(jì)人員主要為Web工程師和非技術(shù)性內(nèi)容的開發(fā)者。

在WebE過程中,首先對(duì)WebApp要解決的問題進(jìn)行系統(tǒng)的闡述;然后對(duì)WebE項(xiàng)目進(jìn)行策劃,并為WebApp的需求和設(shè)計(jì)建模;使用與Web相關(guān)的特定技術(shù)和工具構(gòu)造系統(tǒng);將WebApp發(fā)送給最終用戶,同時(shí)使用技術(shù)標(biāo)準(zhǔn)和商業(yè)標(biāo)準(zhǔn)對(duì)其進(jìn)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論