版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章
基于復(fù)用的軟件構(gòu)造第9章基于復(fù)用的軟件構(gòu)造首先學(xué)習(xí)軟件復(fù)用的基本概念、分類及開發(fā)方式。然后學(xué)習(xí)三種復(fù)用:程序庫(kù)、設(shè)計(jì)模式和框架。通過(guò)具體的編程實(shí)現(xiàn)學(xué)習(xí)三種設(shè)計(jì)模式;通過(guò)分析Junit學(xué)習(xí)框架與應(yīng)用;通過(guò)兩個(gè)開源軟件API、對(duì)案例實(shí)現(xiàn)基于程序庫(kù)的復(fù)用開發(fā)。最后,簡(jiǎn)介開發(fā)案例其他形態(tài)軟件的相關(guān)框架。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院2第9章基于復(fù)用的軟件構(gòu)造故事10(1)把習(xí)題轉(zhuǎn)成word格式輸出,以便他用;(2)用柱狀圖、餅圖等顯示一個(gè)人練習(xí)多套習(xí)題的結(jié)果,便于分析;(3)讓用戶通過(guò)瀏覽器得到習(xí)題,在線練習(xí)后提交,等待習(xí)題返回評(píng)分結(jié)果;(4)編寫可以直接在手機(jī)上練習(xí)口算的程序。一是在現(xiàn)有程序基礎(chǔ)上增添的功能;二需要重新開發(fā)軟件,更準(zhǔn)確地說(shuō)是更換開發(fā)平臺(tái)、更換軟件架構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院3第9章基于復(fù)用的軟件構(gòu)造9.1軟件復(fù)用9.2設(shè)計(jì)模式9.3框架9.4案例分析與實(shí)踐9.5討論與提高9.6思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院49.1軟件復(fù)用軟件復(fù)用,是指在兩次或多次不同的軟件開發(fā)過(guò)程中重復(fù)使用相同或相近的軟件或軟件模塊的過(guò)程。該軟件可以是已經(jīng)存在的軟件,也可以是專門的可復(fù)用軟件,簡(jiǎn)稱(軟)構(gòu)件。軟件復(fù)用是在軟件開發(fā)中避免重復(fù)勞動(dòng)的解決方案,使得應(yīng)用系統(tǒng)的開發(fā)不再采用一切“從零開始”的模式,而是在已有工作基礎(chǔ)上,充分利用過(guò)去應(yīng)用系統(tǒng)開發(fā)中積累的知識(shí)和經(jīng)驗(yàn),從而將開發(fā)的重點(diǎn)集中于應(yīng)用的特有構(gòu)成成分上。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院59.1軟件復(fù)用軟件復(fù)用具有如下優(yōu)點(diǎn)。(1)提高生產(chǎn)率。(2)減少維護(hù)代價(jià)。(3)提高互操作性。(4)支持快速原型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院69.1軟件復(fù)用軟件復(fù)用也面臨挑戰(zhàn),主要如下。軟構(gòu)件與應(yīng)用系統(tǒng)之間的差異。軟構(gòu)件要達(dá)到一定的數(shù)量,才能支持有效的復(fù)用,而建立軟構(gòu)件庫(kù)要有很高的投入和長(zhǎng)期的積累。難以發(fā)現(xiàn)合適的軟構(gòu)件?;趶?fù)用的軟件開發(fā)方法和軟件過(guò)程是一個(gè)新的研究實(shí)踐領(lǐng)域,需要一些新的理論、技術(shù)及支持環(huán)境,目前這方面的研究成果和實(shí)踐經(jīng)驗(yàn)都不夠充分。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院79.1軟件復(fù)用依據(jù)復(fù)用的對(duì)象,軟件復(fù)用分為兩種。產(chǎn)品復(fù)用。指復(fù)用已有的軟構(gòu)件,通過(guò)構(gòu)件集成(組裝)得到新系統(tǒng)。產(chǎn)品復(fù)用是目前復(fù)用的主流途徑。過(guò)程復(fù)用。指復(fù)用已有的軟件開發(fā)過(guò)程,使用可復(fù)用的應(yīng)用生成器來(lái)自動(dòng)或半自動(dòng)地生成所需系統(tǒng)。過(guò)程復(fù)用依賴于軟件自動(dòng)化技術(shù)的發(fā)展。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院89.1軟件復(fù)用9.1.1軟件產(chǎn)品復(fù)用9.1.2基于復(fù)用的軟件開發(fā)9.1.3程序庫(kù)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院99.1.1軟件產(chǎn)品復(fù)用軟件產(chǎn)品的復(fù)用包括代碼、設(shè)計(jì)、測(cè)試數(shù)據(jù)和需求規(guī)格等。代碼復(fù)用是最基本、最普通的軟件復(fù)用形式,包括可執(zhí)行代碼和源代碼??蓤?zhí)行代碼和源代碼稱為軟構(gòu)件或構(gòu)件。人們把一些相關(guān)的可復(fù)用的程序編譯、打包、壓縮在一個(gè)程序庫(kù),方便使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院109.1.1軟件產(chǎn)品復(fù)用設(shè)計(jì)文件是設(shè)計(jì)決策的通用表示,其本質(zhì)是捕獲的設(shè)計(jì)/解決問(wèn)題的知識(shí)。與代碼不同,設(shè)計(jì)不可執(zhí)行。與需求規(guī)格不同,設(shè)計(jì)捕獲結(jié)構(gòu)信息而非功能信息。設(shè)計(jì)表示成用不同方式產(chǎn)生具體設(shè)計(jì)的模式。不像函數(shù)或模塊,設(shè)計(jì)不能用其功能特性檢索,而是通過(guò)設(shè)計(jì)解決的一組問(wèn)題的特性來(lái)檢索。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院119.1.1軟件產(chǎn)品復(fù)用設(shè)計(jì)復(fù)用有三種基本途徑:第一種途徑是從現(xiàn)有系統(tǒng)的設(shè)計(jì)結(jié)果中提取一些可以復(fù)用的設(shè)計(jì)構(gòu)件,并把它們直接應(yīng)用到新系統(tǒng)的設(shè)計(jì)中;第二種途徑是把一個(gè)現(xiàn)有系統(tǒng)的全部或部分設(shè)計(jì)結(jié)果用新的語(yǔ)言或在新的平臺(tái)上重新實(shí)現(xiàn);第三種途徑是綜合現(xiàn)有系統(tǒng),或者根據(jù)需求重新開發(fā)一些專門用于復(fù)用的設(shè)計(jì)構(gòu)件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院129.1.1軟件產(chǎn)品復(fù)用設(shè)計(jì)構(gòu)件分為構(gòu)件級(jí)和架構(gòu)級(jí)。軟件體系結(jié)構(gòu)定義了作為一組執(zhí)行數(shù)據(jù)的構(gòu)件聚合體的軟件系統(tǒng)的結(jié)構(gòu)。構(gòu)成體系結(jié)構(gòu)的結(jié)構(gòu)元素比程序設(shè)計(jì)語(yǔ)言的結(jié)構(gòu)元素更加抽象,具有不同的性質(zhì)。它們規(guī)定了信息流、控制流或構(gòu)件之間的通信協(xié)議。體系結(jié)構(gòu)用特殊符號(hào)表示,用體系結(jié)構(gòu)特征檢索。可復(fù)用的軟件體系結(jié)構(gòu)通常是顯式地復(fù)用軟件體系結(jié)構(gòu),并通過(guò)集成其他軟件體系結(jié)構(gòu),建立新的更高層次的體系結(jié)構(gòu)。最常用的可復(fù)用設(shè)計(jì)是設(shè)計(jì)模式和架構(gòu)模式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院139.1.1軟件產(chǎn)品復(fù)用測(cè)試數(shù)據(jù)和測(cè)試代碼是典型的可復(fù)用件。測(cè)試數(shù)據(jù)的表示直截了當(dāng),檢索測(cè)試數(shù)據(jù)的方式可以是軟件系統(tǒng)輸入域的描述,也可以是該系統(tǒng)功能的某個(gè)通用特征。測(cè)試代碼的表示和檢索同普通的邏輯代碼一樣。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院149.1.1軟件產(chǎn)品復(fù)用需求規(guī)格是提取用戶需求、用某種符號(hào)記錄用戶需求的結(jié)果。規(guī)格書可以用自然語(yǔ)言表示,也可以用形式化符號(hào)(一階邏輯、公理系統(tǒng)、形式化語(yǔ)言)或混合式。規(guī)格書可以通過(guò)它們俘獲的功能特性檢索,也可以復(fù)用在構(gòu)建復(fù)合規(guī)格書。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院159.1.1軟件產(chǎn)品復(fù)用可復(fù)用件必須組織成復(fù)用庫(kù),以便方便地使用。要有效地使用復(fù)用庫(kù),必須清楚地理解庫(kù)的內(nèi)容,這樣才能決定庫(kù)能否滿足需求。庫(kù)的內(nèi)容有不同的組織和定義方式,可以分為三種類型。(1)通用構(gòu)件。(2)特殊領(lǐng)域構(gòu)件。(3)特殊應(yīng)用代碼。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院169.1.2基于復(fù)用的軟件開發(fā)軟件復(fù)用必須解決三個(gè)基本問(wèn)題:(1)必須有可復(fù)用的對(duì)象;(2)所復(fù)用的對(duì)象必須是有用的;(3)復(fù)用者要知道如何使用被復(fù)用的對(duì)象。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院179.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā)改變了傳統(tǒng)的軟件開發(fā)過(guò)程和技術(shù),它包括兩個(gè)相關(guān)的過(guò)程:(1)可復(fù)用軟構(gòu)件的開發(fā)(DevelopmentforReuse)或面向復(fù)用的軟件開發(fā),是產(chǎn)生軟件資產(chǎn)的過(guò)程,稱為領(lǐng)域工程;(2)基于軟構(gòu)件的應(yīng)用系統(tǒng)構(gòu)造(集成和組裝)(DevelopmentwithReuse)或基于復(fù)用的軟件開發(fā),是使用軟件資產(chǎn)生產(chǎn)新系統(tǒng)的過(guò)程,也稱為應(yīng)用工程。領(lǐng)域工程是應(yīng)用工程的基礎(chǔ),它的目標(biāo)是建立可復(fù)用的軟構(gòu)件庫(kù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院189.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā),首要任務(wù)是把用戶需求轉(zhuǎn)換成系統(tǒng)規(guī)格,特別是要按照可復(fù)用構(gòu)件修改系統(tǒng)規(guī)格。系統(tǒng)設(shè)計(jì)的核心是軟件體系結(jié)構(gòu)。設(shè)計(jì)要依據(jù)已有的構(gòu)件,在系統(tǒng)規(guī)格、應(yīng)用架構(gòu)和可獲得的構(gòu)件之間做出妥協(xié)和平衡。其中關(guān)鍵的一步是根據(jù)系統(tǒng)規(guī)格、軟件架構(gòu)和系統(tǒng)設(shè)計(jì),查找可復(fù)用的軟構(gòu)件。最后,把可復(fù)用構(gòu)件及開發(fā)的軟件部分,按照軟件架構(gòu)組裝起來(lái)。最常見的方式是使用集成語(yǔ)言(如腳本語(yǔ)言Python、Unixshell、TCL/TK)把構(gòu)件“粘合”起來(lái)或粘合到框架上,最終得到應(yīng)有軟件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院199.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā)面臨一系列挑戰(zhàn):(1)確認(rèn)復(fù)用任務(wù)及其完成這些任務(wù)的技術(shù);(2)提供方法學(xué)和工具支持完成任務(wù);(3)把復(fù)用任務(wù)集成到一個(gè)軟件開發(fā)的工作流程。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院209.1.2基于復(fù)用的軟件開發(fā)復(fù)用任務(wù)可能是用高級(jí)語(yǔ)言(領(lǐng)域語(yǔ)言)說(shuō)明待開發(fā)應(yīng)用的規(guī)格,盡可能地復(fù)用已有的構(gòu)件合成滿足一組需求的應(yīng)用系統(tǒng)。對(duì)于目標(biāo)系統(tǒng)的任何部分,開發(fā)者必須:(1)以支持獲取可能的、有用的可復(fù)用件的方式表達(dá)這一部分的需求;(2)理解獲取的軟構(gòu)件;(3)如果得到的軟構(gòu)件足夠接近需求,并且具有達(dá)到足夠的質(zhì)量,就可以采用它。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院219.1.2基于復(fù)用的軟件開發(fā)在復(fù)用過(guò)程,理解軟構(gòu)件和程序是一項(xiàng)重要的腦力工作和成本因素。軟構(gòu)件理解意味著三個(gè)因素:(1)理解它的功能;(2)理解它的工作方式;(3)理解如何修改它使其以一點(diǎn)不同的方式完成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院229.1.3程序庫(kù)程序庫(kù)是軟件復(fù)用最基本、最普通形式。程序庫(kù)是一些經(jīng)常使用、經(jīng)過(guò)檢驗(yàn)的規(guī)范化程序或子程序的集合。程序庫(kù)中的程序是經(jīng)常使用的功能。程序庫(kù)通常是編譯后的二進(jìn)制可執(zhí)行碼或虛擬機(jī)可執(zhí)行碼,把它們放到目錄中,設(shè)置環(huán)境變量,在程序中引入后就可以如同普通函數(shù)、對(duì)象、類等一樣編程使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院239.1.3程序庫(kù)過(guò)程式語(yǔ)言(如C)的程序庫(kù)主要是各種函數(shù)。面向?qū)ο笳Z(yǔ)言的程序庫(kù)統(tǒng)稱為類庫(kù),實(shí)質(zhì)是一個(gè)綜合性的面向?qū)ο蟮目芍赜妙愋图希ń涌?、抽象類和具體類。程序庫(kù)可以是語(yǔ)言系統(tǒng)內(nèi)置的,也可以是第三發(fā)獨(dú)立開發(fā)的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院249.1.3程序庫(kù)不同語(yǔ)言打包和引用庫(kù)的形式略有不同。在程序中引用庫(kù)的關(guān)鍵字有include、using、import、with等。除了可以引用相同語(yǔ)言的庫(kù)外,現(xiàn)在的編程語(yǔ)言也允許引入其他語(yǔ)言的庫(kù),最常見的是C語(yǔ)言的庫(kù)。使用第三方開發(fā)的程序庫(kù)與使用系統(tǒng)的程序庫(kù),本質(zhì)上沒有區(qū)別。通常是理解API設(shè)計(jì)、查閱API使用方式、學(xué)習(xí)示范代碼及不斷練習(xí)實(shí)踐。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院259.1.3程序庫(kù)程序庫(kù)不同于軟件包。軟件包是指具有特定功能,用來(lái)完成特定任務(wù)的一個(gè)或一組程序。軟件包由一個(gè)基本配置和若干可選部件構(gòu)成,可以是源代碼或目標(biāo)碼形式。軟件包本質(zhì)上就是一個(gè)可以運(yùn)行的軟件,可以打包、壓縮,便于發(fā)布。經(jīng)過(guò)安裝、配置,就可以使用軟件包提供的功能和服務(wù)。一般而言,軟件包不作為可復(fù)用件而在軟件開發(fā)中使用、不能集成到開發(fā)的軟件中。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院269.2設(shè)計(jì)模式9.2.1基本概念9.2.2基本設(shè)計(jì)模式目錄9.2.3設(shè)計(jì)模式舉例2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院279.2.1基本概念設(shè)計(jì)模式(DesignPattern)是對(duì)給定環(huán)境下反復(fù)出現(xiàn)問(wèn)題的一個(gè)通用的、可復(fù)用的解決方案。它是可以在很多不同場(chǎng)合用以解決問(wèn)題的一種描述或樣板。模式是程序員在設(shè)計(jì)一個(gè)軟件或系統(tǒng)時(shí)解決共同問(wèn)題最佳實(shí)踐的正式描述。面向?qū)ο蟮脑O(shè)計(jì)模式表示類或?qū)ο笾g的關(guān)系與交互,沒有說(shuō)明涉及的最終應(yīng)用軟件的類或?qū)ο?。一個(gè)設(shè)計(jì)模式不是一個(gè)可以直接轉(zhuǎn)換成代碼的完成的設(shè)計(jì)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院289.2.1基本概念設(shè)計(jì)模式涉及的抽象和應(yīng)用的范圍很廣。體系結(jié)構(gòu)模式描述了很多可以用結(jié)構(gòu)化方法解決的設(shè)計(jì)問(wèn)題。數(shù)據(jù)模式描述了重現(xiàn)的面向數(shù)據(jù)的問(wèn)題及用來(lái)解決這些問(wèn)題的數(shù)據(jù)建模解決方案。構(gòu)件模式,即設(shè)計(jì)模式,涉及與開發(fā)子系統(tǒng)和構(gòu)件相關(guān)的問(wèn)題、它們之間相互通信的方式及它們?cè)谝粋€(gè)較大的體系結(jié)構(gòu)中的位置。界面設(shè)計(jì)模式描述公共用戶界面問(wèn)題及具有影響因素(包括最終用戶的具體特征)的解決方案。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院299.2.1基本概念設(shè)計(jì)模式有如下優(yōu)勢(shì):設(shè)計(jì)模式在軟件開發(fā)中提供了一種公共的詞匯和理解;設(shè)計(jì)模式是軟件設(shè)計(jì)建立文檔的一種手段;設(shè)計(jì)模式通過(guò)支持軟件的功能屬性和質(zhì)量屬性來(lái)構(gòu)造軟件;設(shè)計(jì)模式有助于建立一個(gè)復(fù)雜的和異構(gòu)的軟件結(jié)構(gòu);設(shè)計(jì)模式有助于管理軟件的復(fù)雜度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院309.2.2基本設(shè)計(jì)模式目錄基本的設(shè)計(jì)模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式三種。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院319.2.3設(shè)計(jì)模式舉例一個(gè)模式描述了一個(gè)問(wèn)題,使用戶能夠理解問(wèn)題所處的環(huán)境,并列出了影響因素,用來(lái)表明在環(huán)境中如何解釋這個(gè)問(wèn)題,以及如何應(yīng)用解決方案。描述設(shè)計(jì)模式的方式不完全一樣,基本內(nèi)容包括模式名稱、解決的問(wèn)題、設(shè)計(jì)元素及其之間的交互(通常用UML的類圖描述類及其關(guān)系,用時(shí)序圖描述交互關(guān)系)、應(yīng)用場(chǎng)景、特點(diǎn)分析、實(shí)際例子等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院329.2.3設(shè)計(jì)模式舉例1.工廠方法模式問(wèn)題描述:在一個(gè)圖形編輯器中,可以繪制直線line、矩形square、圓circle等各種圖形shape。不同的圖形的繪制draw是不同的,但是畫筆對(duì)所有圖形都統(tǒng)一使用draw。以后可能會(huì)修改某個(gè)具體圖形的繪制方式(編碼實(shí)現(xiàn)),也可能還要增添不同的圖形。為了便于軟件的維護(hù)和擴(kuò)展,如何設(shè)計(jì)?2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院339.2.3設(shè)計(jì)模式舉例解決方案:定義一個(gè)用于創(chuàng)建對(duì)象的接口或抽象類,讓子類根據(jù)條件或參數(shù)決定實(shí)例化哪一個(gè)類或調(diào)用哪一個(gè)方法。工廠方法模式使一個(gè)類的實(shí)例化延遲到其子類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院349.2.3設(shè)計(jì)模式舉例工廠方法模式結(jié)構(gòu):工廠(Factory)是工廠方法模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。抽象產(chǎn)品(Product)是所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例共有的公共接口。具體產(chǎn)品(ConcreteProduct)是工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對(duì)象都是充當(dāng)這個(gè)角色的某個(gè)具體類的實(shí)例。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院359.2.3設(shè)計(jì)模式舉例2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院369.2.3設(shè)計(jì)模式舉例工廠方法模式的核心思想是:有一個(gè)專門的類來(lái)負(fù)責(zé)創(chuàng)建實(shí)例的過(guò)程。它把產(chǎn)品視為一系列的類的集合,這些類是由某個(gè)抽象類或接口派生出來(lái)的一個(gè)對(duì)象樹。而工廠類用來(lái)產(chǎn)生一個(gè)合適的對(duì)象來(lái)滿足客戶的要求。如果工廠方法模式所涉及的具體產(chǎn)品之間沒有共同的邏輯,就可以使用接口來(lái)扮演抽象產(chǎn)品的角色;如果具體產(chǎn)品之間有共同的邏輯,就必須把這些共同的東西提取出來(lái),放在一個(gè)抽象類中,然后讓具體產(chǎn)品繼承抽象類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院379.2.3設(shè)計(jì)模式舉例為實(shí)現(xiàn)更好復(fù)用的目的,共同的東西總是應(yīng)該抽象出來(lái)的。實(shí)現(xiàn)時(shí),工廠方法模式可以參數(shù)化;返回對(duì)象可以是抽象對(duì)象,也可以是具體對(duì)象;遵循命名規(guī)則有助于開發(fā)者識(shí)別代碼結(jié)構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院389.2.3設(shè)計(jì)模式舉例使用工廠方法模式的場(chǎng)合及益處是:平行連接類的層次結(jié)構(gòu);一個(gè)類想讓其子類說(shuō)明對(duì)象;一個(gè)類不預(yù)計(jì)子類,但必須創(chuàng)建子類;一簇對(duì)象需要用不同的接口分隔開;代碼要處理接口而不是實(shí)現(xiàn)的類;連接子類的方式比直接創(chuàng)建對(duì)象更加靈活;對(duì)客戶隱藏具體的類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院399.2.3設(shè)計(jì)模式舉例JDBC是工廠方法模式的一個(gè)很好的例子。數(shù)據(jù)庫(kù)應(yīng)用程序不需要知道它將使用哪種數(shù)據(jù)庫(kù),所以它也不知道應(yīng)該使用什么具體的數(shù)據(jù)庫(kù)驅(qū)動(dòng)類。相反,它使用工廠方法來(lái)獲取連接、語(yǔ)句和其他對(duì)象,這使得改變后臺(tái)數(shù)據(jù)庫(kù)變得非常靈活,同時(shí)并不會(huì)改變應(yīng)用的數(shù)據(jù)模型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院409.2.3設(shè)計(jì)模式舉例在JDK中使用工廠方法設(shè)計(jì)模式的例子:valueOf()方法會(huì)返回工廠創(chuàng)建的對(duì)象,這等同于參數(shù)傳遞的值;getInstance()方法會(huì)使用單例模式創(chuàng)建類的實(shí)例;java.lang.Class中的方法newInstance()從每次調(diào)用工廠方法時(shí)創(chuàng)建和返回新實(shí)例;java.lang.Object中的方法toString();java.lang.Class中的方法forName()。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院419.2.3設(shè)計(jì)模式舉例2.適配器模式問(wèn)題描述:正在運(yùn)行的程序使用L型號(hào)的打印機(jī)print文件,現(xiàn)在又購(gòu)置了H型號(hào)的打印機(jī),但是它提供了不同的打印函數(shù)disply()。如果不想改變當(dāng)前程序的編碼,想使用新的類、但又不能改變它,如何設(shè)計(jì)?這個(gè)問(wèn)題的核心是,如何使用既有類的操作,但是它的接口不符合要求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院429.2.3設(shè)計(jì)模式舉例解決方案:為接口不符合要求的類創(chuàng)建一個(gè)適配器類,使其提供的接口滿足使用要求,如圖9.2所示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院439.2.3設(shè)計(jì)模式舉例適配器模式適用如下場(chǎng)合:想使用一個(gè)已經(jīng)存在的類,而它的接口不符合目前的需求。想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(那些接口可能不一定兼容的類)協(xié)同工作。(僅適用于對(duì)象Adapter)想使用一些已經(jīng)存在的子類,但是不可能對(duì)每個(gè)都進(jìn)行子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院449.2.3設(shè)計(jì)模式舉例3.命令模式2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院459.2.3設(shè)計(jì)模式舉例4.基于模式的設(shè)計(jì)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院469.2.3設(shè)計(jì)模式舉例為了使設(shè)計(jì)者使用模式來(lái)思考,可以考慮下面的方法:(1)保證理解全局——將要建立的軟件所處的環(huán)境。需求模型表達(dá)了這一點(diǎn)。(2)檢查全局,提取此抽象層上表示的模式。(3)從“全局”模式開始設(shè)計(jì),為將來(lái)的設(shè)計(jì)工作建立環(huán)境或架構(gòu)。(4)在更低抽象層尋找有助設(shè)計(jì)方案的模式。(5)重復(fù)(1)到(4),直到完成完整的設(shè)計(jì)。(6)通過(guò)使每個(gè)模式適應(yīng)將要建立的軟件細(xì)節(jié)對(duì)設(shè)計(jì)進(jìn)行優(yōu)化。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院479.3框架9.3.1基本概念9.3.2框架和設(shè)計(jì)模式9.3.3框架開發(fā)9.3.4軟件測(cè)試框架JUnit2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院489.3.1基本概念框架是整個(gè)或部分系統(tǒng)的可復(fù)用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法。框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架??梢哉f(shuō),一個(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ù)用提供了上下文關(guān)系。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院499.3.1基本概念框架方法是構(gòu)件技術(shù)、軟件體系結(jié)構(gòu)和應(yīng)用軟件開發(fā)三者發(fā)展結(jié)合的產(chǎn)物??蚣芡ǔR詷?gòu)件庫(kù)的形式出現(xiàn),但構(gòu)件庫(kù)只是框架的一個(gè)重要部分,構(gòu)件庫(kù)的大規(guī)模復(fù)用需要框架??蚣艿年P(guān)鍵在于框架內(nèi)對(duì)象間的交互模式和控制流模式。在某種程度上,將構(gòu)件和框架視為兩個(gè)不同但彼此協(xié)作的技術(shù)或許更好??蚣転闃?gòu)件提供復(fù)用的環(huán)境,為構(gòu)件處理錯(cuò)誤、交換數(shù)據(jù)及激活操作提供了標(biāo)準(zhǔn)的方法。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院509.3.1基本概念根據(jù)軟件的層次結(jié)構(gòu),軟件框架分為:基礎(chǔ)設(shè)施框架。對(duì)系統(tǒng)基礎(chǔ)功能的接近完整的實(shí)現(xiàn),并留有擴(kuò)展余地。中間件框架。對(duì)一些常用的中間件按需定制或按需擴(kuò)展而成。例如,可以運(yùn)行Web程序的Web服務(wù)器。應(yīng)用框架。面向應(yīng)用領(lǐng)域中應(yīng)用系統(tǒng)的骨架,但它并不提供完整的應(yīng)用軟件系統(tǒng)的全部。如Web應(yīng)用框架Struts、Android應(yīng)用框架。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院519.3.1基本概念根據(jù)應(yīng)用范圍的不同,軟件框架分為:技術(shù)框架。致力于解決某一技術(shù)領(lǐng)域內(nèi)的通用技術(shù)問(wèn)題,并提供定制和擴(kuò)展機(jī)制。技術(shù)框架又稱為水平框架。水平,強(qiáng)調(diào)的是通用性、使用范圍的廣泛性。例如,Hibernate就是解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)映射問(wèn)題的技術(shù)框架;Junit是解決單元測(cè)試問(wèn)題的技術(shù)框架。業(yè)務(wù)框架。在特定業(yè)務(wù)領(lǐng)域內(nèi)通用的框架。業(yè)務(wù)框架又稱為垂直框架,垂直,就是強(qiáng)調(diào)專門化。例如,一個(gè)網(wǎng)絡(luò)管理軟件的垂直框架針對(duì)網(wǎng)絡(luò)管理這個(gè)專門領(lǐng)域提供了完善的功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院529.3.1基本概念框架在軟件開發(fā)中具有顯著的特點(diǎn):應(yīng)用領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好,便于建立更加開放的系統(tǒng);復(fù)用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;軟件設(shè)計(jì)人員要專注于對(duì)領(lǐng)域的了解,使需求分析更充分;存儲(chǔ)了經(jīng)驗(yàn),可以讓那些經(jīng)驗(yàn)豐富的人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層編程;2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院539.3.1基本概念框架在軟件開發(fā)中具有顯著的特點(diǎn):允許采用快速原型技術(shù);有利于在一個(gè)項(xiàng)目?jī)?nèi)多人協(xié)同工作;大粒度的復(fù)用有助于降低開發(fā)和維護(hù)費(fèi)用、加快開發(fā)速度、提高軟件生產(chǎn)效率、提高產(chǎn)品質(zhì)量,而參數(shù)化框架使得適應(yīng)性、靈活性增強(qiáng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院549.3.2框架和設(shè)計(jì)模式構(gòu)件通常是代碼復(fù)用,而設(shè)計(jì)模式是設(shè)計(jì)復(fù)用,框架則介于兩者之間,部分代碼復(fù)用,部分設(shè)計(jì)復(fù)用,有時(shí)分析也可復(fù)用。在軟件生產(chǎn)中有三種級(jí)別的復(fù)用:內(nèi)部復(fù)用,即在同一應(yīng)用中能公共使用的抽象塊;代碼復(fù)用,即將通用模塊組合成庫(kù)或工具集,以便在多個(gè)應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的復(fù)用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得最高級(jí)別的復(fù)用性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院559.3.2框架和設(shè)計(jì)模式設(shè)計(jì)模式是對(duì)在某種環(huán)境中反復(fù)出現(xiàn)的問(wèn)題及解決該問(wèn)題的方案的描述,它比框架更抽象;框架可以用代碼表示,也可以直接執(zhí)行或復(fù)用,而對(duì)模式而言,只有實(shí)例才能用代碼表示;設(shè)計(jì)模式是比框架更小的元素,一個(gè)框架中往往含有一個(gè)或多個(gè)設(shè)計(jì)模式,框架總是針對(duì)某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用??蚣苁擒浖O(shè)計(jì)模式是軟件的知識(shí)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院569.3.3框架開發(fā)面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架。一個(gè)大的應(yīng)用系統(tǒng)可能由多層互相協(xié)作的框架組成。一個(gè)基于框架開發(fā)的應(yīng)用系統(tǒng)包含一個(gè)或多個(gè)框架、與框架相關(guān)的構(gòu)件類,以及與應(yīng)用系統(tǒng)相關(guān)的功能擴(kuò)展。與應(yīng)用系統(tǒng)相關(guān)的擴(kuò)展包括與應(yīng)用系統(tǒng)相關(guān)的類和對(duì)象。應(yīng)用系統(tǒng)可能僅僅復(fù)用了面向?qū)ο罂蚣艿囊徊糠?,或者,它可能需要?duì)框架進(jìn)行一些適應(yīng)性修改,以滿足系統(tǒng)需求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院579.3.3框架開發(fā)框架的開發(fā)從代碼、設(shè)計(jì)和分析三個(gè)層面復(fù)用了軟件。(1)復(fù)用代碼,因此從一已有構(gòu)件庫(kù)中建立應(yīng)用變得非常容易,因?yàn)闃?gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡(jiǎn)單。(2)復(fù)用設(shè)計(jì)。它提供可復(fù)用的抽象算法及高層設(shè)計(jì),并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。(3)復(fù)用分析。所有的人員若按照框架的思想來(lái)分析事務(wù),那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院589.3.3框架開發(fā)框架的復(fù)用周期如下:(1)用能夠與得到描述可復(fù)用件相匹配的術(shù)語(yǔ)說(shuō)明需求;(2)搜索并獲取最相關(guān)的復(fù)用件;(3)評(píng)估它們的復(fù)用能力;(4)選擇最合適的候選復(fù)用件,改編它適合當(dāng)前的需求;(5)把它集成到當(dāng)前的應(yīng)用系統(tǒng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院599.3.3框架開發(fā)復(fù)用框架的典型的做法是,根據(jù)功能的覆蓋度、平臺(tái)支持、文檔質(zhì)量等評(píng)估幾個(gè)框架。所以,步驟(1)和(2)較為簡(jiǎn)單,評(píng)估每個(gè)候選框架(步驟(3))會(huì)占用一段時(shí)間。評(píng)估包括閱讀文檔、決定框架是否合適,以及實(shí)際使用框架開發(fā)一個(gè)應(yīng)用原型來(lái)檢測(cè)框架的各種屬性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院609.3.3框架開發(fā)按照應(yīng)用開發(fā)需要改編最適合的框架(步驟(4))意味著為每個(gè)框架的參與者找到實(shí)現(xiàn),在框架提供的工具中選擇具體構(gòu)件、選擇并改編應(yīng)用特殊的類以便它們能適應(yīng)在框架中的角色。這個(gè)步驟通常需要手工編程,也有運(yùn)用工具產(chǎn)生程序。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院619.3.3框架開發(fā)最后,在框架環(huán)境下集成,實(shí)現(xiàn)有效地把應(yīng)用構(gòu)件插入框架結(jié)構(gòu)的各種場(chǎng)景??蚣茈S著復(fù)用演化??蚣艿拿恳淮螐?fù)用實(shí)例都會(huì)遇到一些識(shí)別改進(jìn)之處的困難,以及能進(jìn)一步參數(shù)化的方面,進(jìn)一步抽象或分解的參照者等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院629.3.4軟件測(cè)試框架JUnit2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院639.4案例分析與實(shí)踐9.4.1生成Word格式的習(xí)題9.4.2口算習(xí)題練習(xí)得分的可視化展示9.4.3完整案例的軟件構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院649.4.1生成Word格式的習(xí)題構(gòu)造任務(wù)11:使用FreeMarker生成Word格式的習(xí)題。需求:給定50道100以內(nèi)的加減法口算題,用Word格式輸出。分析:文字處理是一項(xiàng)非常復(fù)雜的系列操作,包括字體、字形、顏色等的選擇,行間距、段落等的設(shè)置,還要綜合考慮這些因素自動(dòng)排版。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院659.4.1生成Word格式的習(xí)題從Office2003開始,可以將Office文檔轉(zhuǎn)成XML文件,這樣只要將需要填入的內(nèi)容放上${}占位符,就可以使用像FreeMarker這樣的模板引擎將出現(xiàn)占位符的地方替換成真實(shí)數(shù)據(jù),這種方式較之其他方案要更為簡(jiǎn)單。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院669.4.1生成Word格式的習(xí)題1.理解FreeMarkerFreeMarker是一個(gè)用Java語(yǔ)言編寫的模板引擎,它基于模板來(lái)生成文本輸出。設(shè)計(jì)FreeMarker的主要目的是實(shí)際生成HTML的Web頁(yè)面,特別是為基于servlet的應(yīng)用按照MVC模式(ModelViewController)生成HTML的Web頁(yè)面。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院679.4.1生成Word格式的習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院689.4.1生成Word格式的習(xí)題使用FreeMarker輸出Word文件主要包含兩部分:制作模板和完成合并(模板+數(shù)據(jù))產(chǎn)生實(shí)際輸出。制作模板的步驟:用MSWord制作要輸出的Word樣式,存為XML文件,將XML翻譯成FreeMarker模板。FreeMarker編程實(shí)現(xiàn)輸出模板的步驟:創(chuàng)建配置實(shí)例,創(chuàng)建數(shù)據(jù)模型,獲取模板,將模板與數(shù)據(jù)合并。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院699.4.1生成Word格式的習(xí)題2.制作模板(1)創(chuàng)建Word模板。(2)另存為XML格式、后綴更改為.ftl。(3)用能夠高亮顯示XML和元素自動(dòng)配對(duì)等功能的工具打開*.ftl文件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院709.4.1生成Word格式的習(xí)題模板基礎(chǔ)知識(shí)簡(jiǎn)介如下。(1)模板的整體結(jié)構(gòu)。直接輸出的文本;由${}或#{}來(lái)限定、計(jì)算值替換輸出;ftl標(biāo)記:FreeMarker用指令編排模板,類似于HTML標(biāo)記,要成雙成對(duì)出現(xiàn),如列表<#list>…<#/list>。為與HTML標(biāo)記區(qū)分,用#開始(有些以@開始);注釋:包含在<#--和-->限定,不產(chǎn)生輸出。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院719.4.1生成Word格式的習(xí)題(2)指令。三種ftl標(biāo)記指令的格式:開始:<#directivenameparameters>;結(jié)束:</#directivename>;空內(nèi)容指令:<#directivenameparameters/>。指令有系統(tǒng)預(yù)定義(#開始)和用戶定義(@替換#)兩種。FreeMarker忽略ftl標(biāo)記中的空白字符。但<、</和指令之間不允許有空白字符。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院729.4.1生成Word格式的習(xí)題(3)取得變量的值。FreeMarker用實(shí)際值替換${variable}限定的變量variable。變量名只能是字母、數(shù)字、下畫線、$、@和#的組合,且不能以數(shù)字開頭??梢允褂?{…}或#{…}在文本部分插入表達(dá)式的值。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院739.4.1生成Word格式的習(xí)題FreeMarker模板中定義三種類型的變量:能在模板任何地方訪問(wèn)的plain變量;局部變量;循環(huán)變量。局部變量隱藏同名的plain變量;循環(huán)變量隱藏同名的局部變量和plain變量。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院749.4.1生成Word格式的習(xí)題FreeMarker典型的數(shù)據(jù)模型是:(1)樹形結(jié)構(gòu),可以任意復(fù)雜和深層次;(2)類似于目錄的變量Hashes,保存下級(jí)變量的唯一的查詢名字;(3)類似于文件的變量scalars,保存單值,有兩種類型:字符串和數(shù)字;對(duì)scalars的訪問(wèn)從root開始,各部分用“.”分隔,如animals.mouse.price,案例中的plain.data2。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院759.4.1生成Word格式的習(xí)題要修改的是表格,可以通過(guò)<w:tr>查找來(lái)定位。一對(duì)<w:tr></w:tr>代表一行,也就是5道算式題。然后要用一對(duì)<#list></#list>來(lái)將其包括,以便后續(xù)填充數(shù)據(jù)。首先,找到<w:tr></w:tr>,在它的前面加入<#listtableasplain>,表示一行;同時(shí)在表格結(jié)束配對(duì)</w:tr>后面加上list的結(jié)束配對(duì)</#list>。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院769.4.1生成Word格式的習(xí)題list指令是一個(gè)迭代輸出指令,用于迭代輸出數(shù)據(jù)模型中的集合。其中,squence是一個(gè)集合對(duì)象,對(duì)應(yīng)Java中的list、數(shù)組等非鍵值對(duì)的集合。item是一個(gè)任意的變量名,是被迭代輸出的集合元素。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院779.4.1生成Word格式的習(xí)題然后,將from、to、data1、data2、data3、data4、data5改為plain變量${plain.from}、${plain.to}、${plain.data1}、${plain.data2}、${plain.data3}、${plain.data4}、${plain.data5}。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院789.4.1生成Word格式的習(xí)題3.合并模板產(chǎn)生輸出4.集成到交互界面2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院799.4.2口算習(xí)題練習(xí)得分的可視化展示1.簡(jiǎn)介JFreeChartJFreeChart是一組功能強(qiáng)大、靈活易用的Jav
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色能源項(xiàng)目投資定金合同附屬協(xié)議書2篇
- 二零二五年度權(quán)威解讀!欠條法律風(fēng)險(xiǎn)防范及處理合同3篇
- 二零二五年度白酒定制生產(chǎn)與品牌發(fā)展合同2篇
- 二零二五年度高鐵安裝工程設(shè)備磨損保險(xiǎn)合同2篇
- 2025年度西餐廳經(jīng)營(yíng)管理權(quán)租賃合同3篇
- 二零二五年度航空貨運(yùn)代理航空貨物包裝材料供應(yīng)合同3篇
- 展會(huì)展臺(tái)拆除合同(2篇)
- 小區(qū)道路工程承包合同(2篇)
- 2025年餐飲食材配送與售后服務(wù)合同協(xié)議3篇
- 二零二五年度航空航天零部件耗材采購(gòu)合同范本3篇
- 幼兒園反恐防暴技能培訓(xùn)內(nèi)容
- 食品企業(yè)質(zhì)檢員聘用合同
- 中醫(yī)診所內(nèi)外部審計(jì)制度
- 自然辯證法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年國(guó)家危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)考試題庫(kù)(含答案)
- 護(hù)理員技能培訓(xùn)課件
- 家庭年度盤點(diǎn)模板
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國(guó)電子學(xué)會(huì)青少年軟件編程等級(jí)考試標(biāo)準(zhǔn)python三級(jí)練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報(bào)告
評(píng)論
0/150
提交評(píng)論