版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第8章
應(yīng)用數(shù)據(jù)庫第8章應(yīng)用數(shù)據(jù)庫討論軟件構(gòu)造中數(shù)據(jù)庫的使用。介紹關(guān)系數(shù)據(jù)庫的相關(guān)知識及結(jié)構(gòu)化查詢語言SQL,學(xué)習(xí)如何創(chuàng)建數(shù)據(jù)庫、連接數(shù)據(jù)庫、查詢數(shù)據(jù)庫;學(xué)習(xí)數(shù)據(jù)庫及應(yīng)用軟件的開發(fā),熟練掌握數(shù)據(jù)庫的增、刪、改、查等操作方法,以及如何在應(yīng)用程序中操作數(shù)據(jù)庫。還介紹數(shù)據(jù)庫的深入應(yīng)用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院2第8章應(yīng)用數(shù)據(jù)庫故事9引入數(shù)據(jù)庫系統(tǒng)管理題目和答案。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院3第8章應(yīng)用數(shù)據(jù)庫8.1數(shù)據(jù)庫概述8.2結(jié)構(gòu)化查詢語言SQL8.3數(shù)據(jù)庫的開發(fā)過程8.4編程操作數(shù)據(jù)庫8.5案例分析與實踐8.6討論與提高8.7思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院48.1數(shù)據(jù)庫概述數(shù)據(jù)庫是長期存儲在計算機內(nèi)、有組織、可共享的大量數(shù)據(jù)的集合。它的目的是提供一種可以方便、高效地管理數(shù)據(jù)庫信息的途徑。DBMS是位于用戶(含應(yīng)用程序)和操作系統(tǒng)之間的一種數(shù)據(jù)管理軟件,負(fù)責(zé)數(shù)據(jù)的組織、存儲和管理。數(shù)據(jù)庫、DBMS、應(yīng)用程序及數(shù)據(jù)庫管理員構(gòu)成的系統(tǒng)稱為數(shù)據(jù)庫系統(tǒng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院58.1數(shù)據(jù)庫概述8.1.1關(guān)系數(shù)據(jù)庫8.1.2關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院68.1.1關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫領(lǐng)域中最常見的數(shù)據(jù)模型有:層次模型、網(wǎng)狀模型、關(guān)系模型、面向?qū)ο竽P?、對象關(guān)系模型。其中,關(guān)系數(shù)據(jù)庫系統(tǒng)是支持關(guān)系模型的數(shù)據(jù)庫系統(tǒng)。按照數(shù)據(jù)模型的三個要素,關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束三部分組成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院78.1.1關(guān)系數(shù)據(jù)庫1.關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)就是一張二維表。關(guān)系數(shù)據(jù)庫由表的集合構(gòu)成,每個表都有唯一的名字。元組(行)、屬性(列)、域、碼、候選碼、主碼、主屬性、組合碼、全碼、外碼、關(guān)系模式……2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院88.1.1關(guān)系數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院98.1.1關(guān)系數(shù)據(jù)庫2.關(guān)系操作集合2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院108.1.1關(guān)系數(shù)據(jù)庫3.關(guān)系完整性約束關(guān)系模型中有三類完整性約束:實體完整性、參照完整性和用戶自定義完整性。實體完整性和參照完整性是關(guān)系模型必須要滿足的完整性約束條件,有DBMS支持,進(jìn)行自動檢查。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院118.1.1關(guān)系數(shù)據(jù)庫實體完整性(EntityIntegrity):若屬性(一個或一組屬性)A是基本關(guān)系R的主屬性,則A不能取空值。參照完整性(ReferentialIntegrity):若屬性或?qū)傩越MF是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼Ks相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個元組在F上的值必須為空值或者等于S中某個元組的主碼值。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院128.1.1關(guān)系數(shù)據(jù)庫用戶自定義完整性(User-definedIntegrity)關(guān)系數(shù)據(jù)庫系統(tǒng)應(yīng)該根據(jù)應(yīng)用環(huán)境的不同,滿足用戶對數(shù)據(jù)關(guān)系之間的特定的約束條件。例如,Question關(guān)系中,我們要求計算0~100之間的加減法,就需要引入約束條件check(Factor1>=0ANDFactor1<=100)。如果我們要求只計算加減乘除的四則運算,那就應(yīng)該引入自定的約束條件check(OperatorIN(‘+’,‘?’,‘*’,‘/’))。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院138.1.1關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫由若干基本表組成?;颈碛扇舾稍M組成。表是組成這個關(guān)系的若干實體。表與表之間同時還存在參照關(guān)系,通過外碼表達(dá)兩個關(guān)系之間的關(guān)系。關(guān)系圖。每個關(guān)系用一個矩形表示,關(guān)系的名字顯示在矩形的上方,矩形內(nèi)列出各個屬性,主屬性用下畫線標(biāo)出。外碼之間的關(guān)系用從參照關(guān)系的外碼屬性到被參照關(guān)系的主屬性之間的箭頭來表示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院148.1.1關(guān)系數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院158.1.1關(guān)系數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院168.1.2關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型關(guān)系數(shù)據(jù)庫管理系統(tǒng)支持?jǐn)?shù)據(jù)庫的三級模式結(jié)構(gòu),如圖8.2所示。內(nèi)模式對應(yīng)存儲文件,模式包含數(shù)據(jù)庫中最重要的基本表,外模式對應(yīng)于部分基本表和由基本表導(dǎo)出的視圖。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院178.1.2關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型內(nèi)模式,也稱為存儲模式,一個數(shù)據(jù)庫只有一個內(nèi)模式。它是數(shù)據(jù)物理結(jié)構(gòu)和存儲方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式。在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中,存儲文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式。存儲文件的物理結(jié)構(gòu)對用戶是透明的,可以由用戶來定義。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院188.1.2關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型模式,也稱為邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。在關(guān)系數(shù)據(jù)庫中,模式是所有基本表的集合。每個基本表表達(dá)了一個關(guān)系。一個或多個基本表存儲在一個存儲文件中。所有基本表都保存在數(shù)據(jù)庫模式中。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院198.1.2關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型外模式也稱為用戶模式,它是數(shù)據(jù)庫用戶能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖。在關(guān)系數(shù)據(jù)庫中,外模式包含部分的基本表和由一些基本表導(dǎo)出的視圖。需注意,一個數(shù)據(jù)庫中可以同時有多個外模式。同一個外模式可以被用戶的多個應(yīng)用使用,但一個應(yīng)用只能用一個外模式。外模式是保證數(shù)據(jù)庫安全性的一個重要手段。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院208.2結(jié)構(gòu)化查詢語言SQL8.2.1SQL概述8.2.2創(chuàng)建基本表的CREATE語句8.2.3插入元組的INSERT語句8.2.4刪除元組的DELETE語句8.2.5更新元組的UPDATE語句8.2.6選擇元組的SELECT語句2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院218.2.1SQL概述SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)分為以下幾個部分。數(shù)據(jù)定義語言(DataDefinitionLanguage):針對數(shù)據(jù)庫和基本表的結(jié)構(gòu)所做的定義。數(shù)據(jù)操縱語言(DataManipulationLanguage):對已定義的數(shù)據(jù)增、刪、改、查。數(shù)據(jù)控制語言(DataControlLanguage):完整性約束(Integrity):2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院228.2.1SQL概述SQL主要解決的三個問題就是關(guān)系數(shù)據(jù)模型的三個要素。視圖定義:從基本表導(dǎo)出的虛表,DDL提供視圖定義的命令語句。事務(wù)控制:SQL包括定義事務(wù)開始和結(jié)束的命令。訪問權(quán)限:SQLDDL定義了對關(guān)系和視圖訪問權(quán)限的命令。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院238.2.1SQL概述SQL實現(xiàn)了關(guān)系模型的一些主要特點。SQL是集數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML和數(shù)據(jù)控制語言DCL功能于一體的查詢語言。SQL是高度非過程化的查詢語言。用戶只需指明“怎么做”、“想要什么”,而無須說明查詢的步驟。SQL采用的是集合的運算方式。操作對象是元組的集合,插入、刪除、修改的對象及查詢得到的結(jié)果都可以是元組的集合。SQL使用動詞來表達(dá)功能。核心動詞9個。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院248.2.1SQL概述用SQL語言有兩種方式:一種是在終端交互方式下使用,稱為交互式SQL;另一種是把SQL嵌入在高級程序設(shè)計語言中使用,稱為嵌入式SQL。這些高級語言可以是C、Java、C#、Python等,稱為宿主語言。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院258.2.2創(chuàng)建基本表的CREATE語句CREATETABLE語句定義基本表。CREATETABLE<表名>
(<列名><數(shù)據(jù)類型>[列級完整性約束條件][,<列名><數(shù)據(jù)類型>[列級完整性約束條件]]…[,<表級完整性約束條件>]);2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院268.2.2創(chuàng)建基本表的CREATE語句2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院278.2.3插入元組的INSERT語句INSERT插入語句的一般格式為:INSERTINTO<表名>[(<屬性列1>,<屬性列2>,……)]VALUES(<常量1>,<常量2>,……);插入如下題目:編號1001的題目為19+20=39,題目屬于基礎(chǔ)的四則運算。INSERTINTOQuestionVALUES('1004',20,'-',19,1,1);2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院288.2.4刪除元組的DELETE語句DELETE語句的一般形式為:DELETEFROM<表名>
[WHERE<條件>];刪除編號為1001的題目:DELETEFROMQuestionWHEREQuestionID=’1001’;刪除所有的題目:DELETEFROMQuestion;2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院298.2.5更新元組的UPDATE語句UIPDATE語句的一般形式為:UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]…[WHERE<條件>];如,修改Question關(guān)系中編號1002的題目運算結(jié)果為30:UPDATEQuestionSETResult=30WHERQuestionID='1002'2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院308.2.6選擇元組的SELECT語句SELECT語句的功能是查詢數(shù)據(jù)庫中存儲的數(shù)據(jù)。SQL查詢的基本結(jié)構(gòu)由三個子句組成:select、from和where。查詢的基本結(jié)構(gòu)為:SELECT[ALL|DISTINCT]
<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][ORDERBY<列名>DESC|ASC][GROUPBY<列名>HAVING<條件表達(dá)式>];2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院318.3數(shù)據(jù)庫的開發(fā)過程數(shù)據(jù)庫系統(tǒng)開發(fā)分為6階段。需求分析階段;概念結(jié)構(gòu)設(shè)計階段;邏輯結(jié)構(gòu)設(shè)計階段;物理結(jié)構(gòu)設(shè)計階段;數(shù)據(jù)庫實施階段;數(shù)據(jù)庫運行和維護(hù)階段。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院328.3數(shù)據(jù)庫的開發(fā)過程①需求分析階段首要任務(wù)是通過詳盡調(diào)查明確用戶的組成,包括用戶的身份、權(quán)限、職責(zé)及分配的工作等;其次,詳細(xì)調(diào)查各用戶組對數(shù)據(jù)庫的操作,包括各用戶組將對數(shù)據(jù)庫輸入的信息、如何使用這些信息、輸出什么信息及其格式等;將輸入的信息分類存儲,以便在邏輯分析階段生成數(shù)據(jù)庫模式,即基本表;最后,需要確定系統(tǒng)的邊界。對前面調(diào)查的結(jié)果進(jìn)行初步分析,確定哪些功能由計算機完成或?qū)碜層嬎銠C完成,哪些活動由人工完成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院338.3數(shù)據(jù)庫的開發(fā)過程(1)用戶的組成2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院348.3數(shù)據(jù)庫的開發(fā)過程(2)用戶需要的信息學(xué)生身份信息:記錄學(xué)生的編號、姓名等。家長身份信息:記錄家長的編號、姓名等,以及家長和學(xué)生之間的關(guān)系。教師身份信息:記錄教師的編號、姓名等,以及教師和學(xué)生之間的關(guān)系。管理員身份信息:記錄管理員的編號、姓名、權(quán)限等。算術(shù)題目:記錄所有題目及其計算結(jié)果。學(xué)生成績:記錄學(xué)生完成某套題目的成績。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院358.3數(shù)據(jù)庫的開發(fā)過程(3)系統(tǒng)邊界系統(tǒng)可以自動生成算術(shù)題目并得到運算結(jié)果,可以完成答題結(jié)果的檢查、統(tǒng)計成績分布;可以根據(jù)人工設(shè)定的難度級別來生成相應(yīng)難度的算術(shù)題目;無法分析錯誤題目的出錯原因。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院368.3數(shù)據(jù)庫的開發(fā)過程②概念結(jié)構(gòu)設(shè)計階段將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)(概念模型)的過程就是概念結(jié)構(gòu)設(shè)計,是整個數(shù)據(jù)庫設(shè)計的關(guān)鍵。設(shè)計的概念結(jié)構(gòu)一定要真實、充分地反映現(xiàn)實世界,包括事物和事物之間的聯(lián)系,滿足用戶對數(shù)據(jù)的需求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院378.3數(shù)據(jù)庫的開發(fā)過程E-R模型是描述概念模型的有力工具?!癊”表示實體型,E-R圖中用矩形表示,矩形框內(nèi)寫明實體名;用橢圓表示實體的屬性,并用無向邊將其與相應(yīng)的實體連接起來;“R”表示聯(lián)系,在E-R圖中用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)的實體型連接起來,同時在無向邊旁標(biāo)記聯(lián)系的類型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院388.3數(shù)據(jù)庫的開發(fā)過程兩個以上的實體型之間聯(lián)系類型可以分為三種(參考圖8.10)。(1)一對一聯(lián)系(1:1)。(2)一對多聯(lián)系(1:n)。(3)多對多聯(lián)系(m:n)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院398.3數(shù)據(jù)庫的開發(fā)過程2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院408.3數(shù)據(jù)庫的開發(fā)過程③邏輯結(jié)構(gòu)設(shè)計階段邏輯結(jié)構(gòu)設(shè)計階段的主要任務(wù)是將概念結(jié)構(gòu)設(shè)計階段設(shè)計好的基本E-R模型轉(zhuǎn)換為數(shù)據(jù)庫管理系統(tǒng)所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院418.3數(shù)據(jù)庫的開發(fā)過程E-R圖轉(zhuǎn)換為關(guān)系模型規(guī)則(步驟)如下。①一個實體型轉(zhuǎn)換為一個關(guān)系。實體名稱(屬性、主碼)即關(guān)系名稱(屬性、主碼)。②一個聯(lián)系轉(zhuǎn)換為一個關(guān)系。聯(lián)系名稱(屬性)即關(guān)系名稱(屬性),和聯(lián)系相連的實體主碼也是關(guān)系的屬性。1:1:任取一個實體的主碼為關(guān)系的主碼。1:n:取n對應(yīng)的實體主碼為關(guān)系的主碼。m:n:兩個實體的主碼為關(guān)系的組合碼。③合并相同主碼的關(guān)系。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院428.3數(shù)據(jù)庫的開發(fā)過程④物理結(jié)構(gòu)設(shè)計階段數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)和存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu)。物理結(jié)構(gòu)設(shè)計主要包括確定數(shù)據(jù)的存放位置;確定關(guān)系、索引、聚簇、日志、備份等的存儲安排;確定系統(tǒng)配置等。設(shè)計存儲結(jié)構(gòu)時,一般考慮存取時間、存儲空間利用率和維護(hù)代價等三方面因素。存取方法一般采用索引存取方法或聚簇存取方法。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院438.3數(shù)據(jù)庫的開發(fā)過程⑤數(shù)據(jù)庫實施階段數(shù)據(jù)庫實施階段的主要任務(wù)是數(shù)據(jù)的載入和應(yīng)用程序的編碼與調(diào)試。首先要強調(diào)基礎(chǔ)數(shù)據(jù)的正確,數(shù)據(jù)形式、組織方式、數(shù)據(jù)結(jié)構(gòu)的合理、清晰。為提高數(shù)據(jù)載入效率和準(zhǔn)確度,應(yīng)盡量采用人工和計算機輔助相結(jié)合的方式載入數(shù)據(jù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院448.3數(shù)據(jù)庫的開發(fā)過程載入數(shù)據(jù)之后,要試運行數(shù)據(jù)庫,對數(shù)據(jù)庫進(jìn)行測試,主要包括功能測試和性能測試。功能測試需要運行數(shù)據(jù)庫應(yīng)用程序,執(zhí)行對數(shù)據(jù)庫的各種操作,測試應(yīng)用程序的功能是否達(dá)到設(shè)計要求。性能測試主要檢查數(shù)據(jù)庫和應(yīng)用程序運行中的相關(guān)物理參數(shù)值,測試其是否達(dá)到設(shè)計要求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院458.3數(shù)據(jù)庫的開發(fā)過程⑥數(shù)據(jù)庫運行和維護(hù)階段主要任務(wù)是維護(hù)數(shù)據(jù)庫的穩(wěn)定,保證數(shù)據(jù)庫平穩(wěn)運行;同時,對數(shù)據(jù)庫設(shè)計進(jìn)行評價,聽取、總結(jié)、分析用戶的需求,必要時可以對數(shù)據(jù)庫進(jìn)行適當(dāng)?shù)难a充和修改。數(shù)據(jù)庫的運行和維護(hù)是個長期的工作,在這一階段應(yīng)注意如下幾個問題。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院468.3數(shù)據(jù)庫的開發(fā)過程首先,管理員應(yīng)該定期轉(zhuǎn)儲和備份數(shù)據(jù),保證數(shù)據(jù)庫的恢復(fù)機制可以正常運行。其次,應(yīng)注意保證數(shù)據(jù)庫的安全性和完整性,“數(shù)據(jù)溢出”、“數(shù)據(jù)污染”等。最后,管理員應(yīng)定期對數(shù)據(jù)庫的設(shè)計和使用情況做出評價,聽取客戶意見和建議,適當(dāng)修改、調(diào)整數(shù)據(jù)庫的組織與構(gòu)造。數(shù)據(jù)庫的重組并不修改原設(shè)計的邏輯和物理結(jié)構(gòu),而數(shù)據(jù)庫的重構(gòu)就修改了數(shù)據(jù)庫的模式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院478.4編程操作數(shù)據(jù)庫JDBC(JavaDataBaseConnectivity,Java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI,它由一組用Java語言編寫的類和接口組成,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問。使用JDBC操作數(shù)據(jù)庫的主要步驟是:與數(shù)據(jù)庫建立連接;向數(shù)據(jù)庫發(fā)送SQL語句,需要java.sql包的支持;處理SQL語句返回的結(jié)果。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院488.4編程操作數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院498.4編程操作數(shù)據(jù)庫8.4.1連接數(shù)據(jù)庫8.4.2查詢數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院508.4.1連接數(shù)據(jù)庫獲取JDBCDriver,并配置ClassPath。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院518.4.2查詢數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院528.4.2查詢數(shù)據(jù)庫游標(biāo)系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),用于存放SQL語句的執(zhí)行結(jié)果。為了得到一個帶有游標(biāo)的結(jié)果集,需使用下述方法獲得一個Statement對象。Statementstmt=dbConn.createStatement(inttype,intconcurrency);2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院538.4.2查詢數(shù)據(jù)庫type的取值決定滾動的方式。ResultSet.TYPE_FORWARD_ONLY:表示結(jié)果集的游標(biāo)只能向下滾動。ResultSet.TYPE_SCROLL_INSENSITIVE:游標(biāo)可以上下滾動。當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集不變。ResultSet.TYPE_SCROLL_SENSITIVE:游標(biāo)可以上下滾動。當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集同步改變。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院548.4.2查詢數(shù)據(jù)庫Concurrency的取值決定是否用結(jié)果集更新數(shù)據(jù)庫。ResultSet.CONCUR_READ_ONLY:不能用結(jié)果集更新數(shù)據(jù)庫中的表。ResultSet.CONCUR_UPDATABLE:可以用結(jié)果集更新數(shù)據(jù)庫中的表。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院558.4.2查詢數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院568.5案例分析與實踐8.5.1分析與設(shè)計8.5.2設(shè)計數(shù)據(jù)庫8.5.3開發(fā)數(shù)據(jù)庫應(yīng)用程序2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院578.6討論與提高8.6.1事務(wù)與并發(fā)8.6.2使用存儲過程8.6.3查詢優(yōu)化——消除不必要的循環(huán)8.6.4測試數(shù)據(jù)庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院588.6.1事務(wù)與并發(fā)事務(wù)是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元,它是用戶定義的一個數(shù)據(jù)庫的操作序列,這些操作要么全做,要么全不做,是一個不可分割的基本單位。為完成數(shù)據(jù)庫操作,并保證數(shù)據(jù)一致性,所有針對數(shù)據(jù)庫的讀寫操作都被添加在各種強度的鎖下,如共享鎖或排它鎖。在共享鎖中,用戶可以同時讀取數(shù)據(jù);在排它鎖中,用戶不能同時讀取、更新數(shù)據(jù),只能等待其他用戶釋放對數(shù)據(jù)的鎖。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院598.6.1事務(wù)與并發(fā)事務(wù)占用的時間越長,用戶等待的時間就越長。提高性能的首要任務(wù)就是控制事務(wù)的運行時間。因為事務(wù)具有隔離性,一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,所以在適當(dāng)?shù)逆i的規(guī)范下,事務(wù)之間可以有序地并發(fā)執(zhí)行。通過并發(fā)執(zhí)行,加快了數(shù)據(jù)庫執(zhí)行效率。利用事務(wù)的并發(fā)操作,可以在事務(wù)級別提高數(shù)據(jù)庫的性能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院608.6.1事務(wù)與并發(fā)1.在JDBC中批量執(zhí)行SQLJDBC中的批量更新特征允許多個更新操作被傳遞到DBMS上來簡化過程。被執(zhí)行在批量模型上的SQL代碼,可以用addBatch()方法添加到一個與statement對象有關(guān)的列表上,并用clearBatch()對象方法,列表能被清空。當(dāng)在列表中添加語句后,調(diào)用executeBatch()對象方法,并把它們?nèi)總鬟f到數(shù)據(jù)庫上作為一個單元或批量被執(zhí)行。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院618.6.1事務(wù)與并發(fā)2.選擇合適的隔離級別隔離是指一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。需要注意的是,事務(wù)的隔離級別越高,越應(yīng)該小心避免并發(fā)的沖突。隔離級別可以在JDBCAPI級別上進(jìn)行設(shè)置,以便于DBMS決定合適的加鎖計劃??梢栽贘DBCConnection接口上指定5種隔離級別,如表8.8所示2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院628.6.1事務(wù)與并發(fā)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院638.6.1事務(wù)與并發(fā)對于一個連接,隔離級別可以通過調(diào)用setTransactionIsolation()方法設(shè)置隔離級別。應(yīng)用程序通過如下代碼來設(shè)置一個事務(wù)的隔離級別。注意,在一個數(shù)據(jù)庫應(yīng)用系統(tǒng)中,重要的事務(wù)應(yīng)該有較高的隔離級別,不重要的事務(wù)可以用較低的隔離級別來完成。而且在事務(wù)啟動之前,隔離級別必須被設(shè)置,并且在事務(wù)完成之后重新設(shè)置。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院648.6.2使用存儲過程一組為完成特定功能的SQL語句集,存儲在數(shù)據(jù)庫中,經(jīng)過第一次編譯之后再次調(diào)用時不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)來執(zhí)行存儲過程。使用存儲過程可以在數(shù)據(jù)層級別提高數(shù)據(jù)庫的性能。使用存儲過程可以在數(shù)據(jù)層提高數(shù)據(jù)庫的性能,是優(yōu)化數(shù)據(jù)庫的技術(shù)手段之一。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院658.6.2使用存儲過程1.創(chuàng)建存儲過程CREATEProcedure<過程名>([參數(shù)1數(shù)據(jù)類型1,參數(shù)2數(shù)據(jù)類型2,…])AS<SQL語句集(過程體)>過程名:是數(shù)據(jù)庫識別存儲過程的標(biāo)識。參數(shù)列表:存儲過程中的形式列表,用名字來標(biāo)識調(diào)用存儲過程時需要給出的參數(shù)值。必須指定值的數(shù)據(jù)類型。過程體:是一個SQL語句集。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院668.6.2使用存儲過程例如,在CategoryPlayer表(屬性包括CategoryID、PlayerID、Grade)中,修改答題者編號(PlayerID)為@p1的答題者在題目分組(CategoryID)為@c1的分組中的成績,將成績改為@g1。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院678.6.2使用存儲過程2.使用JDBC調(diào)用存儲過程使用JDBC來調(diào)用數(shù)據(jù)庫中的存儲過程。用JDBC的Statement接口來傳遞調(diào)用命令,調(diào)用返回的結(jié)果放在JDBCResultSet中保存。JDBC調(diào)用存儲過程的代碼如下:2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院688.6.3查詢優(yōu)化——消除不必要的循環(huán)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院698.6.4測試數(shù)據(jù)庫數(shù)據(jù)庫系統(tǒng)測試的主要任務(wù)就是測試數(shù)據(jù)庫及應(yīng)用軟件。對于應(yīng)用程序,基本的測試技術(shù)(黑盒測試、白盒測試)同樣適合,也可以采用基本的測試階段(單元測試、集成測試、系統(tǒng)測試)。應(yīng)用程序的重心是操作數(shù)據(jù),故測試內(nèi)容主要是:數(shù)據(jù)的增、刪、改、查及其組合的序列操作。可以采用基本的測試技術(shù),如表增加滿、表刪除空、刪除空表中的記錄、創(chuàng)建表、增刪改查等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院708.6.4測試數(shù)據(jù)庫數(shù)據(jù)的訪問和操作通過SQL代碼完成的,因而數(shù)據(jù)庫測試另一方面涉及SQL,主要是:(1)SQL編碼是否符合規(guī)范、標(biāo)準(zhǔn);(2)使用Select測試數(shù)據(jù)、使用Insert產(chǎn)生測試數(shù)據(jù)、使用Update和Delete測試程序準(zhǔn)確性、使用Constaints測試數(shù)據(jù)完整性;(3)用SQL測試連接表、數(shù)據(jù)庫對象、視圖、存儲過程、觸發(fā)器、用戶自定義函數(shù)等;(4)在腳本語言中(本書Java)用SQL代碼測試庫模式、數(shù)據(jù)庫及其驅(qū)動程序、表和列的類、默認(rèn)值和規(guī)則、碼和索引等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院718.6.4測試數(shù)據(jù)庫對數(shù)據(jù)庫系統(tǒng)而言,測試的種類也包括功能測試、性能測試(如響應(yīng)時間、吞吐量、并發(fā)性)、可靠性測試、可用性測試、兼容性測試、安全測試等。在測試策略方面,對數(shù)據(jù)庫系統(tǒng)的測試同樣可以采用靜態(tài)測試和動態(tài)測試、手工測試和自動化測試工具。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院728.6.4測試數(shù)據(jù)庫測試數(shù)據(jù)庫的難題是如何建立測試環(huán)境,特別是數(shù)據(jù)庫本身。數(shù)據(jù)庫會隨著測試操作不停地改變,如何恢復(fù)數(shù)據(jù)庫或到一個指定的數(shù)據(jù)庫狀態(tài),是一項具有挑戰(zhàn)性的任務(wù)。另外,確定數(shù)據(jù)庫各種事務(wù)的狀態(tài)也是耗時費力。在清理完數(shù)據(jù)庫之后,需要設(shè)計新的測試數(shù)據(jù),而且需要一個轉(zhuǎn)換SQL語句的生成器,以便把SQL的語義加進(jìn)數(shù)據(jù)庫測試用例中。另外,在應(yīng)用程序中,嵌入的SQL語句通常以字符串的形式出現(xiàn),給測試帶來了困難。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院738.6.4測試數(shù)據(jù)庫有些數(shù)據(jù)庫廠商帶有專門的數(shù)據(jù)庫測試方法或工具,如Oracle數(shù)據(jù)庫測試指南、MySQL內(nèi)置的SQL測試工具、VisualStudio2013內(nèi)建數(shù)據(jù)庫單元測試工具等。此外,有更加通用的、商業(yè)化數(shù)據(jù)庫測試工具和各類數(shù)據(jù)庫測試的開源工具,如性能測試工具Selenium、Jmeter,與Junit同樣技術(shù)路線的數(shù)據(jù)庫單元測試框架DBunit,以及可以按照數(shù)據(jù)庫的設(shè)計隨機生成數(shù)據(jù)庫測試數(shù)據(jù)的DataFactory。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院74第9章
基于復(fù)用的軟件構(gòu)造第9章基于復(fù)用的軟件構(gòu)造首先學(xué)習(xí)軟件復(fù)用的基本概念、分類及開發(fā)方式。然后學(xué)習(xí)三種復(fù)用:程序庫、設(shè)計模式和框架。通過具體的編程實現(xiàn)學(xué)習(xí)三種設(shè)計模式;通過分析Junit學(xué)習(xí)框架與應(yīng)用;通過兩個開源軟件API、對案例實現(xiàn)基于程序庫的復(fù)用開發(fā)。最后,簡介開發(fā)案例其他形態(tài)軟件的相關(guān)框架。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院76第9章基于復(fù)用的軟件構(gòu)造故事10(1)把習(xí)題轉(zhuǎn)成word格式輸出,以便他用;(2)用柱狀圖、餅圖等顯示一個人練習(xí)多套習(xí)題的結(jié)果,便于分析;(3)讓用戶通過瀏覽器得到習(xí)題,在線練習(xí)后提交,等待習(xí)題返回評分結(jié)果;(4)編寫可以直接在手機上練習(xí)口算的程序。一是在現(xiàn)有程序基礎(chǔ)上增添的功能;二需要重新開發(fā)軟件,更準(zhǔn)確地說是更換開發(fā)平臺、更換軟件架構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院77第9章基于復(fù)用的軟件構(gòu)造9.1軟件復(fù)用9.2設(shè)計模式9.3框架9.4案例分析與實踐9.5討論與提高9.6思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院789.1軟件復(fù)用軟件復(fù)用,是指在兩次或多次不同的軟件開發(fā)過程中重復(fù)使用相同或相近的軟件或軟件模塊的過程。該軟件可以是已經(jīng)存在的軟件,也可以是專門的可復(fù)用軟件,簡稱(軟)構(gòu)件。軟件復(fù)用是在軟件開發(fā)中避免重復(fù)勞動的解決方案,使得應(yīng)用系統(tǒng)的開發(fā)不再采用一切“從零開始”的模式,而是在已有工作基礎(chǔ)上,充分利用過去應(yīng)用系統(tǒng)開發(fā)中積累的知識和經(jīng)驗,從而將開發(fā)的重點集中于應(yīng)用的特有構(gòu)成成分上。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院799.1軟件復(fù)用軟件復(fù)用具有如下優(yōu)點。(1)提高生產(chǎn)率。(2)減少維護(hù)代價。(3)提高互操作性。(4)支持快速原型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院809.1軟件復(fù)用軟件復(fù)用也面臨挑戰(zhàn),主要如下。軟構(gòu)件與應(yīng)用系統(tǒng)之間的差異。軟構(gòu)件要達(dá)到一定的數(shù)量,才能支持有效的復(fù)用,而建立軟構(gòu)件庫要有很高的投入和長期的積累。難以發(fā)現(xiàn)合適的軟構(gòu)件?;趶?fù)用的軟件開發(fā)方法和軟件過程是一個新的研究實踐領(lǐng)域,需要一些新的理論、技術(shù)及支持環(huán)境,目前這方面的研究成果和實踐經(jīng)驗都不夠充分。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院819.1軟件復(fù)用依據(jù)復(fù)用的對象,軟件復(fù)用分為兩種。產(chǎn)品復(fù)用。指復(fù)用已有的軟構(gòu)件,通過構(gòu)件集成(組裝)得到新系統(tǒng)。產(chǎn)品復(fù)用是目前復(fù)用的主流途徑。過程復(fù)用。指復(fù)用已有的軟件開發(fā)過程,使用可復(fù)用的應(yīng)用生成器來自動或半自動地生成所需系統(tǒng)。過程復(fù)用依賴于軟件自動化技術(shù)的發(fā)展。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院829.1軟件復(fù)用9.1.1軟件產(chǎn)品復(fù)用9.1.2基于復(fù)用的軟件開發(fā)9.1.3程序庫2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院839.1.1軟件產(chǎn)品復(fù)用軟件產(chǎn)品的復(fù)用包括代碼、設(shè)計、測試數(shù)據(jù)和需求規(guī)格等。代碼復(fù)用是最基本、最普通的軟件復(fù)用形式,包括可執(zhí)行代碼和源代碼。可執(zhí)行代碼和源代碼稱為軟構(gòu)件或構(gòu)件。人們把一些相關(guān)的可復(fù)用的程序編譯、打包、壓縮在一個程序庫,方便使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院849.1.1軟件產(chǎn)品復(fù)用設(shè)計文件是設(shè)計決策的通用表示,其本質(zhì)是捕獲的設(shè)計/解決問題的知識。與代碼不同,設(shè)計不可執(zhí)行。與需求規(guī)格不同,設(shè)計捕獲結(jié)構(gòu)信息而非功能信息。設(shè)計表示成用不同方式產(chǎn)生具體設(shè)計的模式。不像函數(shù)或模塊,設(shè)計不能用其功能特性檢索,而是通過設(shè)計解決的一組問題的特性來檢索。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院859.1.1軟件產(chǎn)品復(fù)用設(shè)計復(fù)用有三種基本途徑:第一種途徑是從現(xiàn)有系統(tǒng)的設(shè)計結(jié)果中提取一些可以復(fù)用的設(shè)計構(gòu)件,并把它們直接應(yīng)用到新系統(tǒng)的設(shè)計中;第二種途徑是把一個現(xiàn)有系統(tǒng)的全部或部分設(shè)計結(jié)果用新的語言或在新的平臺上重新實現(xiàn);第三種途徑是綜合現(xiàn)有系統(tǒng),或者根據(jù)需求重新開發(fā)一些專門用于復(fù)用的設(shè)計構(gòu)件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院869.1.1軟件產(chǎn)品復(fù)用設(shè)計構(gòu)件分為構(gòu)件級和架構(gòu)級。軟件體系結(jié)構(gòu)定義了作為一組執(zhí)行數(shù)據(jù)的構(gòu)件聚合體的軟件系統(tǒng)的結(jié)構(gòu)。構(gòu)成體系結(jié)構(gòu)的結(jié)構(gòu)元素比程序設(shè)計語言的結(jié)構(gòu)元素更加抽象,具有不同的性質(zhì)。它們規(guī)定了信息流、控制流或構(gòu)件之間的通信協(xié)議。體系結(jié)構(gòu)用特殊符號表示,用體系結(jié)構(gòu)特征檢索??蓮?fù)用的軟件體系結(jié)構(gòu)通常是顯式地復(fù)用軟件體系結(jié)構(gòu),并通過集成其他軟件體系結(jié)構(gòu),建立新的更高層次的體系結(jié)構(gòu)。最常用的可復(fù)用設(shè)計是設(shè)計模式和架構(gòu)模式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院879.1.1軟件產(chǎn)品復(fù)用測試數(shù)據(jù)和測試代碼是典型的可復(fù)用件。測試數(shù)據(jù)的表示直截了當(dāng),檢索測試數(shù)據(jù)的方式可以是軟件系統(tǒng)輸入域的描述,也可以是該系統(tǒng)功能的某個通用特征。測試代碼的表示和檢索同普通的邏輯代碼一樣。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院889.1.1軟件產(chǎn)品復(fù)用需求規(guī)格是提取用戶需求、用某種符號記錄用戶需求的結(jié)果。規(guī)格書可以用自然語言表示,也可以用形式化符號(一階邏輯、公理系統(tǒng)、形式化語言)或混合式。規(guī)格書可以通過它們俘獲的功能特性檢索,也可以復(fù)用在構(gòu)建復(fù)合規(guī)格書。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院899.1.1軟件產(chǎn)品復(fù)用可復(fù)用件必須組織成復(fù)用庫,以便方便地使用。要有效地使用復(fù)用庫,必須清楚地理解庫的內(nèi)容,這樣才能決定庫能否滿足需求。庫的內(nèi)容有不同的組織和定義方式,可以分為三種類型。(1)通用構(gòu)件。(2)特殊領(lǐng)域構(gòu)件。(3)特殊應(yīng)用代碼。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院909.1.2基于復(fù)用的軟件開發(fā)軟件復(fù)用必須解決三個基本問題:(1)必須有可復(fù)用的對象;(2)所復(fù)用的對象必須是有用的;(3)復(fù)用者要知道如何使用被復(fù)用的對象。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院919.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā)改變了傳統(tǒng)的軟件開發(fā)過程和技術(shù),它包括兩個相關(guān)的過程:(1)可復(fù)用軟構(gòu)件的開發(fā)(DevelopmentforReuse)或面向復(fù)用的軟件開發(fā),是產(chǎn)生軟件資產(chǎn)的過程,稱為領(lǐng)域工程;(2)基于軟構(gòu)件的應(yīng)用系統(tǒng)構(gòu)造(集成和組裝)(DevelopmentwithReuse)或基于復(fù)用的軟件開發(fā),是使用軟件資產(chǎn)生產(chǎn)新系統(tǒng)的過程,也稱為應(yīng)用工程。領(lǐng)域工程是應(yīng)用工程的基礎(chǔ),它的目標(biāo)是建立可復(fù)用的軟構(gòu)件庫。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院929.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā),首要任務(wù)是把用戶需求轉(zhuǎn)換成系統(tǒng)規(guī)格,特別是要按照可復(fù)用構(gòu)件修改系統(tǒng)規(guī)格。系統(tǒng)設(shè)計的核心是軟件體系結(jié)構(gòu)。設(shè)計要依據(jù)已有的構(gòu)件,在系統(tǒng)規(guī)格、應(yīng)用架構(gòu)和可獲得的構(gòu)件之間做出妥協(xié)和平衡。其中關(guān)鍵的一步是根據(jù)系統(tǒng)規(guī)格、軟件架構(gòu)和系統(tǒng)設(shè)計,查找可復(fù)用的軟構(gòu)件。最后,把可復(fù)用構(gòu)件及開發(fā)的軟件部分,按照軟件架構(gòu)組裝起來。最常見的方式是使用集成語言(如腳本語言Python、Unixshell、TCL/TK)把構(gòu)件“粘合”起來或粘合到框架上,最終得到應(yīng)有軟件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院939.1.2基于復(fù)用的軟件開發(fā)基于復(fù)用的軟件開發(fā)面臨一系列挑戰(zhàn):(1)確認(rèn)復(fù)用任務(wù)及其完成這些任務(wù)的技術(shù);(2)提供方法學(xué)和工具支持完成任務(wù);(3)把復(fù)用任務(wù)集成到一個軟件開發(fā)的工作流程。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院949.1.2基于復(fù)用的軟件開發(fā)復(fù)用任務(wù)可能是用高級語言(領(lǐng)域語言)說明待開發(fā)應(yīng)用的規(guī)格,盡可能地復(fù)用已有的構(gòu)件合成滿足一組需求的應(yīng)用系統(tǒng)。對于目標(biāo)系統(tǒng)的任何部分,開發(fā)者必須:(1)以支持獲取可能的、有用的可復(fù)用件的方式表達(dá)這一部分的需求;(2)理解獲取的軟構(gòu)件;(3)如果得到的軟構(gòu)件足夠接近需求,并且具有達(dá)到足夠的質(zhì)量,就可以采用它。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院959.1.2基于復(fù)用的軟件開發(fā)在復(fù)用過程,理解軟構(gòu)件和程序是一項重要的腦力工作和成本因素。軟構(gòu)件理解意味著三個因素:(1)理解它的功能;(2)理解它的工作方式;(3)理解如何修改它使其以一點不同的方式完成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院969.1.3程序庫程序庫是軟件復(fù)用最基本、最普通形式。程序庫是一些經(jīng)常使用、經(jīng)過檢驗的規(guī)范化程序或子程序的集合。程序庫中的程序是經(jīng)常使用的功能。程序庫通常是編譯后的二進(jìn)制可執(zhí)行碼或虛擬機可執(zhí)行碼,把它們放到目錄中,設(shè)置環(huán)境變量,在程序中引入后就可以如同普通函數(shù)、對象、類等一樣編程使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院979.1.3程序庫過程式語言(如C)的程序庫主要是各種函數(shù)。面向?qū)ο笳Z言的程序庫統(tǒng)稱為類庫,實質(zhì)是一個綜合性的面向?qū)ο蟮目芍赜妙愋图?,包括接口、抽象類和具體類。程序庫可以是語言系統(tǒng)內(nèi)置的,也可以是第三發(fā)獨立開發(fā)的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院989.1.3程序庫不同語言打包和引用庫的形式略有不同。在程序中引用庫的關(guān)鍵字有include、using、import、with等。除了可以引用相同語言的庫外,現(xiàn)在的編程語言也允許引入其他語言的庫,最常見的是C語言的庫。使用第三方開發(fā)的程序庫與使用系統(tǒng)的程序庫,本質(zhì)上沒有區(qū)別。通常是理解API設(shè)計、查閱API使用方式、學(xué)習(xí)示范代碼及不斷練習(xí)實踐。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院999.1.3程序庫程序庫不同于軟件包。軟件包是指具有特定功能,用來完成特定任務(wù)的一個或一組程序。軟件包由一個基本配置和若干可選部件構(gòu)成,可以是源代碼或目標(biāo)碼形式。軟件包本質(zhì)上就是一個可以運行的軟件,可以打包、壓縮,便于發(fā)布。經(jīng)過安裝、配置,就可以使用軟件包提供的功能和服務(wù)。一般而言,軟件包不作為可復(fù)用件而在軟件開發(fā)中使用、不能集成到開發(fā)的軟件中。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1009.2設(shè)計模式9.2.1基本概念9.2.2基本設(shè)計模式目錄9.2.3設(shè)計模式舉例2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1019.2.1基本概念設(shè)計模式(DesignPattern)是對給定環(huán)境下反復(fù)出現(xiàn)問題的一個通用的、可復(fù)用的解決方案。它是可以在很多不同場合用以解決問題的一種描述或樣板。模式是程序員在設(shè)計一個軟件或系統(tǒng)時解決共同問題最佳實踐的正式描述。面向?qū)ο蟮脑O(shè)計模式表示類或?qū)ο笾g的關(guān)系與交互,沒有說明涉及的最終應(yīng)用軟件的類或?qū)ο?。一個設(shè)計模式不是一個可以直接轉(zhuǎn)換成代碼的完成的設(shè)計。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1029.2.1基本概念設(shè)計模式涉及的抽象和應(yīng)用的范圍很廣。體系結(jié)構(gòu)模式描述了很多可以用結(jié)構(gòu)化方法解決的設(shè)計問題。數(shù)據(jù)模式描述了重現(xiàn)的面向數(shù)據(jù)的問題及用來解決這些問題的數(shù)據(jù)建模解決方案。構(gòu)件模式,即設(shè)計模式,涉及與開發(fā)子系統(tǒng)和構(gòu)件相關(guān)的問題、它們之間相互通信的方式及它們在一個較大的體系結(jié)構(gòu)中的位置。界面設(shè)計模式描述公共用戶界面問題及具有影響因素(包括最終用戶的具體特征)的解決方案。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1039.2.1基本概念設(shè)計模式有如下優(yōu)勢:設(shè)計模式在軟件開發(fā)中提供了一種公共的詞匯和理解;設(shè)計模式是軟件設(shè)計建立文檔的一種手段;設(shè)計模式通過支持軟件的功能屬性和質(zhì)量屬性來構(gòu)造軟件;設(shè)計模式有助于建立一個復(fù)雜的和異構(gòu)的軟件結(jié)構(gòu);設(shè)計模式有助于管理軟件的復(fù)雜度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1049.2.2基本設(shè)計模式目錄基本的設(shè)計模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式三種。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1059.2.3設(shè)計模式舉例一個模式描述了一個問題,使用戶能夠理解問題所處的環(huán)境,并列出了影響因素,用來表明在環(huán)境中如何解釋這個問題,以及如何應(yīng)用解決方案。描述設(shè)計模式的方式不完全一樣,基本內(nèi)容包括模式名稱、解決的問題、設(shè)計元素及其之間的交互(通常用UML的類圖描述類及其關(guān)系,用時序圖描述交互關(guān)系)、應(yīng)用場景、特點分析、實際例子等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1069.2.3設(shè)計模式舉例1.工廠方法模式問題描述:在一個圖形編輯器中,可以繪制直線line、矩形square、圓circle等各種圖形shape。不同的圖形的繪制draw是不同的,但是畫筆對所有圖形都統(tǒng)一使用draw。以后可能會修改某個具體圖形的繪制方式(編碼實現(xiàn)),也可能還要增添不同的圖形。為了便于軟件的維護(hù)和擴展,如何設(shè)計?2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1079.2.3設(shè)計模式舉例解決方案:定義一個用于創(chuàng)建對象的接口或抽象類,讓子類根據(jù)條件或參數(shù)決定實例化哪一個類或調(diào)用哪一個方法。工廠方法模式使一個類的實例化延遲到其子類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1089.2.3設(shè)計模式舉例工廠方法模式結(jié)構(gòu):工廠(Factory)是工廠方法模式的核心,它負(fù)責(zé)實現(xiàn)創(chuàng)建所有實例的內(nèi)部邏輯。工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。抽象產(chǎn)品(Product)是所創(chuàng)建的所有對象的父類,它負(fù)責(zé)描述所有實例共有的公共接口。具體產(chǎn)品(ConcreteProduct)是工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對象都是充當(dāng)這個角色的某個具體類的實例。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1099.2.3設(shè)計模式舉例2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1109.2.3設(shè)計模式舉例工廠方法模式的核心思想是:有一個專門的類來負(fù)責(zé)創(chuàng)建實例的過程。它把產(chǎn)品視為一系列的類的集合,這些類是由某個抽象類或接口派生出來的一個對象樹。而工廠類用來產(chǎn)生一個合適的對象來滿足客戶的要求。如果工廠方法模式所涉及的具體產(chǎn)品之間沒有共同的邏輯,就可以使用接口來扮演抽象產(chǎn)品的角色;如果具體產(chǎn)品之間有共同的邏輯,就必須把這些共同的東西提取出來,放在一個抽象類中,然后讓具體產(chǎn)品繼承抽象類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1119.2.3設(shè)計模式舉例為實現(xiàn)更好復(fù)用的目的,共同的東西總是應(yīng)該抽象出來的。實現(xiàn)時,工廠方法模式可以參數(shù)化;返回對象可以是抽象對象,也可以是具體對象;遵循命名規(guī)則有助于開發(fā)者識別代碼結(jié)構(gòu)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1129.2.3設(shè)計模式舉例使用工廠方法模式的場合及益處是:平行連接類的層次結(jié)構(gòu);一個類想讓其子類說明對象;一個類不預(yù)計子類,但必須創(chuàng)建子類;一簇對象需要用不同的接口分隔開;代碼要處理接口而不是實現(xiàn)的類;連接子類的方式比直接創(chuàng)建對象更加靈活;對客戶隱藏具體的類。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1139.2.3設(shè)計模式舉例JDBC是工廠方法模式的一個很好的例子。數(shù)據(jù)庫應(yīng)用程序不需要知道它將使用哪種數(shù)據(jù)庫,所以它也不知道應(yīng)該使用什么具體的數(shù)據(jù)庫驅(qū)動類。相反,它使用工廠方法來獲取連接、語句和其他對象,這使得改變后臺數(shù)據(jù)庫變得非常靈活,同時并不會改變應(yīng)用的數(shù)據(jù)模型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1149.2.3設(shè)計模式舉例在JDK中使用工廠方法設(shè)計模式的例子:valueOf()方法會返回工廠創(chuàng)建的對象,這等同于參數(shù)傳遞的值;getInstance()方法會使用單例模式創(chuàng)建類的實例;java.lang.Class中的方法newInstance()從每次調(diào)用工廠方法時創(chuàng)建和返回新實例;java.lang.Object中的方法toString();java.lang.Class中的方法forName()。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1159.2.3設(shè)計模式舉例2.適配器模式問題描述:正在運行的程序使用L型號的打印機print文件,現(xiàn)在又購置了H型號的打印機,但是它提供了不同的打印函數(shù)disply()。如果不想改變當(dāng)前程序的編碼,想使用新的類、但又不能改變它,如何設(shè)計?這個問題的核心是,如何使用既有類的操作,但是它的接口不符合要求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1169.2.3設(shè)計模式舉例解決方案:為接口不符合要求的類創(chuàng)建一個適配器類,使其提供的接口滿足使用要求,如圖9.2所示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1179.2.3設(shè)計模式舉例適配器模式適用如下場合:想使用一個已經(jīng)存在的類,而它的接口不符合目前的需求。想創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(那些接口可能不一定兼容的類)協(xié)同工作。(僅適用于對象Adapter)想使用一些已經(jīng)存在的子類,但是不可能對每個都進(jìn)行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1189.2.3設(shè)計模式舉例3.命令模式2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1199.2.3設(shè)計模式舉例4.基于模式的設(shè)計2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1209.2.3設(shè)計模式舉例為了使設(shè)計者使用模式來思考,可以考慮下面的方法:(1)保證理解全局——將要建立的軟件所處的環(huán)境。需求模型表達(dá)了這一點。(2)檢查全局,提取此抽象層上表示的模式。(3)從“全局”模式開始設(shè)計,為將來的設(shè)計工作建立環(huán)境或架構(gòu)。(4)在更低抽象層尋找有助設(shè)計方案的模式。(5)重復(fù)(1)到(4),直到完成完整的設(shè)計。(6)通過使每個模式適應(yīng)將要建立的軟件細(xì)節(jié)對設(shè)計進(jìn)行優(yōu)化。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1219.3框架9.3.1基本概念9.3.2框架和設(shè)計模式9.3.3框架開發(fā)9.3.4軟件測試框架JUnit2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1229.3.1基本概念框架是整個或部分系統(tǒng)的可復(fù)用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實例間交互的方法??蚣苁强杀粦?yīng)用開發(fā)者定制的應(yīng)用骨架??梢哉f,一個框架是一個可復(fù)用的設(shè)計構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個設(shè)計、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類及其實例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文關(guān)系。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1239.3.1基本概念框架方法是構(gòu)件技術(shù)、軟件體系結(jié)構(gòu)和應(yīng)用軟件開發(fā)三者發(fā)展結(jié)合的產(chǎn)物??蚣芡ǔR詷?gòu)件庫的形式出現(xiàn),但構(gòu)件庫只是框架的一個重要部分,構(gòu)件庫的大規(guī)模復(fù)用需要框架。框架的關(guān)鍵在于框架內(nèi)對象間的交互模式和控制流模式。在某種程度上,將構(gòu)件和框架視為兩個不同但彼此協(xié)作的技術(shù)或許更好??蚣転闃?gòu)件提供復(fù)用的環(huán)境,為構(gòu)件處理錯誤、交換數(shù)據(jù)及激活操作提供了標(biāo)準(zhǔn)的方法。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1249.3.1基本概念根據(jù)軟件的層次結(jié)構(gòu),軟件框架分為:基礎(chǔ)設(shè)施框架。對系統(tǒng)基礎(chǔ)功能的接近完整的實現(xià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é)院1259.3.1基本概念根據(jù)應(yīng)用范圍的不同,軟件框架分為:技術(shù)框架。致力于解決某一技術(shù)領(lǐng)域內(nèi)的通用技術(shù)問題,并提供定制和擴展機制。技術(shù)框架又稱為水平框架。水平,強調(diào)的是通用性、使用范圍的廣泛性。例如,Hibernate就是解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫映射問題的技術(shù)框架;Junit是解決單元測試問題的技術(shù)框架。業(yè)務(wù)框架。在特定業(yè)務(wù)領(lǐng)域內(nèi)通用的框架。業(yè)務(wù)框架又稱為垂直框架,垂直,就是強調(diào)專門化。例如,一個網(wǎng)絡(luò)管理軟件的垂直框架針對網(wǎng)絡(luò)管理這個專門領(lǐng)域提供了完善的功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1269.3.1基本概念框架在軟件開發(fā)中具有顯著的特點:應(yīng)用領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好,便于建立更加開放的系統(tǒng);復(fù)用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;軟件設(shè)計人員要專注于對領(lǐng)域的了解,使需求分析更充分;存儲了經(jīng)驗,可以讓那些經(jīng)驗豐富的人員去設(shè)計框架和領(lǐng)域構(gòu)件,而不必限于低層編程;2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1279.3.1基本概念框架在軟件開發(fā)中具有顯著的特點:允許采用快速原型技術(shù);有利于在一個項目內(nèi)多人協(xié)同工作;大粒度的復(fù)用有助于降低開發(fā)和維護(hù)費用、加快開發(fā)速度、提高軟件生產(chǎn)效率、提高產(chǎn)品質(zhì)量,而參數(shù)化框架使得適應(yīng)性、靈活性增強。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1289.3.2框架和設(shè)計模式構(gòu)件通常是代碼復(fù)用,而設(shè)計模式是設(shè)計復(fù)用,框架則介于兩者之間,部分代碼復(fù)用,部分設(shè)計復(fù)用,有時分析也可復(fù)用。在軟件生產(chǎn)中有三種級別的復(fù)用:內(nèi)部復(fù)用,即在同一應(yīng)用中能公共使用的抽象塊;代碼復(fù)用,即將通用模塊組合成庫或工具集,以便在多個應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的復(fù)用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得最高級別的復(fù)用性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1299.3.2框架和設(shè)計模式設(shè)計模式是對在某種環(huán)境中反復(fù)出現(xiàn)的問題及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也可以直接執(zhí)行或復(fù)用,而對模式而言,只有實例才能用代碼表示;設(shè)計模式是比框架更小的元素,一個框架中往往含有一個或多個設(shè)計模式,框架總是針對某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用。框架是軟件,而設(shè)計模式是軟件的知識。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1309.3.3框架開發(fā)面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架。一個大的應(yīng)用系統(tǒng)可能由多層互相協(xié)作的框架組成。一個基于框架開發(fā)的應(yīng)用系統(tǒng)包含一個或多個框架、與框架相關(guān)的構(gòu)件類,以及與應(yīng)用系統(tǒng)相關(guān)的功能擴展。與應(yīng)用系統(tǒng)相關(guān)的擴展包括與應(yīng)用系統(tǒng)相關(guān)的類和對象。應(yīng)用系統(tǒng)可能僅僅復(fù)用了面向?qū)ο罂蚣艿囊徊糠郑蛘?,它可能需要對框架進(jìn)行一些適應(yīng)性修改,以滿足系統(tǒng)需求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1319.3.3框架開發(fā)框架的開發(fā)從代碼、設(shè)計和分析三個層面復(fù)用了軟件。(1)復(fù)用代碼,因此從一已有構(gòu)件庫中建立應(yīng)用變得非常容易,因為構(gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡單。(2)復(fù)用設(shè)計。它提供可復(fù)用的抽象算法及高層設(shè)計,并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。(3)復(fù)用分析。所有的人員若按照框架的思想來分析事務(wù),那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1329.3.3框架開發(fā)框架的復(fù)用周期如下:(1)用能夠與得到描述可復(fù)用件相匹配的術(shù)語說明需求;(2)搜索并獲取最相關(guān)的復(fù)用件;(3)評估它們的復(fù)用能力;(4)選擇最合適的候選復(fù)用件,改編它適合當(dāng)前的需求;(5)把它集成到當(dāng)前的應(yīng)用系統(tǒng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1339.3.3框架開發(fā)復(fù)用框架的典型的做法是,根據(jù)功能的覆蓋度、平臺支持、文檔質(zhì)量等評估幾個框架。所以,步驟(1)和(2)較為簡單,評估每個候選框架(步驟(3))會占用一段時間。評估包括閱讀文檔、決定框架是否合適,以及實際使用框架開發(fā)一個應(yīng)用原型來檢測框架的各種屬性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1349.3.3框架開發(fā)按照應(yīng)用開發(fā)需要改編最適合的框架(步驟(4))意味著為每個框架的參與者找到實現(xiàn),在框架提供的工具中選擇具體構(gòu)件、選擇并改編應(yīng)用特殊的類以便它們能適應(yīng)在框架中的角色。這個步驟通常需要手工編程,也有運用工具產(chǎn)生程序。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1359.3.3框架開發(fā)最后,在框架環(huán)境下集成,實現(xiàn)有效地把應(yīng)用構(gòu)件插入框架結(jié)構(gòu)的各種場景??蚣茈S著復(fù)用演化??蚣艿拿恳淮螐?fù)用實例都會遇到一些識別改進(jìn)之處的困難,以及能進(jìn)一步參數(shù)化的方面,進(jìn)一步抽象或分解的參照者等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1369.3.4軟件測試框架JUnit2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1379.4案例分析與實踐9.4.1生成Word格式的習(xí)題9.4.2口算習(xí)題練習(xí)得分的可視化展示9.4.3完整案例的軟件構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1389.4.1生成Word格式的習(xí)題構(gòu)造任務(wù)11:使用FreeMarker生成Word格式的習(xí)題。需求:給定50道100以內(nèi)的加減法口算題,用Word格式輸出。分析:文字處理是一項非常復(fù)雜的系列操作,包括字體、字形、顏色等的選擇,行間距、段落等的設(shè)置,還要綜合考慮這些因素自動排版。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1399.4.1生成Word格式的習(xí)題從Office2003開始,可以將Office文檔轉(zhuǎn)成XML文件,這樣只要將需要填入的內(nèi)容放上${}占位符,就可以使用像FreeMarker這樣的模板引擎將出現(xiàn)占位符的地方替換成真實數(shù)據(jù),這種方式較之其他方案要更為簡單。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1409.4.1生成Word格式的習(xí)題1.理解FreeMarkerFreeMarker是一個用Java語言編寫的模板引擎,它基于模板來生成文本輸出。設(shè)計FreeMarker的主要目的是實際生成HTML的Web頁面,特別是為基于servlet的應(yīng)用按照MVC模式(ModelViewController)生成HTML的Web頁面。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1419.4.1生成Word格式的習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1429.4.1生成Word格式的習(xí)題使用FreeMarker輸出Word文件主要包含兩部分:制作模板和完成合并(模板+數(shù)據(jù))產(chǎn)生實際輸出。制作模板的步驟:用MSWord制作要輸出的Word樣式,存為XML文件,將XML翻譯成FreeMarker模板。FreeMarker編程實現(xiàn)輸出模板的步驟:創(chuàng)建配置實例,創(chuàng)建數(shù)據(jù)模型,獲取模板,將模板與數(shù)據(jù)合并。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1439.4.1生成Word格式的習(xí)題2.制作模板(1)創(chuàng)建Word模板。(2)另存為XML格式、后綴更改為.ftl。(3)用能夠高亮顯示XML和元素自動配對等功能的工具打開*.ftl文件。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1449.4.1生成Word格式的習(xí)題模板基礎(chǔ)知識簡介如下。(1)模板的整體結(jié)構(gòu)。直接輸出的文本;由${}或#{}來限定、計算值替換輸出;ftl標(biāo)記:FreeMarker用指令編排模板,類似于HTML標(biāo)記,要成雙成對出現(xiàn),如列表<#list>…<#/list>。為與HTML標(biāo)記區(qū)分,用#開始(有些以@開始);注釋:包含在<#--和-->限定,不產(chǎn)生輸出。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1459.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é)院1469.4.1生成Word格式的習(xí)題(3)取得變量的值。FreeMarker用實際值替換${variable}限定的變量variable。變量名只能是字母、數(shù)字、下畫線、$、@和#的組合,且不能以數(shù)字開頭。可以使用
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育法規(guī)押題練習(xí)試題B卷含答案
- 2024年無線呼叫器項目資金需求報告代可行性研究報告
- 2024年煤制合成氨項目資金需求報告代可行性研究報告
- 三年級數(shù)學(xué)計算題專項練習(xí)及答案集錦
- 視覺、情感與認(rèn)同:視聽綜藝節(jié)目的文化認(rèn)同建構(gòu)路徑
- 牛津譯林版英語高一上學(xué)期期末試題及答案指導(dǎo)
- 2024年橋梁建設(shè)協(xié)議格式實例
- 二手房經(jīng)紀(jì)服務(wù)個性化協(xié)議樣本
- 2024年非全日制員工協(xié)議示范文本
- 2024年試用期間協(xié)議期限規(guī)定詳解
- 吉林省松原市長嶺縣長嶺鎮(zhèn)2023-2024學(xué)年四年級上學(xué)期期中道德與法治試卷
- 2023年四川農(nóng)信(農(nóng)商行)招聘筆試真題
- 《紀(jì)念白求恩》說課課件 2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 汽車機械基礎(chǔ)-說課課件
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識 CCAA年度確認(rèn) 試題與答案
- 基于人工智能的個性化疼痛預(yù)測
- 第一單元 富強與創(chuàng)新(復(fù)習(xí)課件) (統(tǒng)編版)
- 2024年氣象知識競賽試題及滿分答案
- 高中政治選擇性必修3(綜合測試卷)(附答案)-2022-2023學(xué)年高二下學(xué)期政治選擇性必修3
- DLT1241-2013 電力工業(yè)以太網(wǎng)交換機技術(shù)規(guī)范
- 中核匯能吉林能源有限公司考試題庫
評論
0/150
提交評論