軟件工程電子教案第九十二章面向?qū)ο笳n件_第1頁
軟件工程電子教案第九十二章面向?qū)ο笳n件_第2頁
軟件工程電子教案第九十二章面向?qū)ο笳n件_第3頁
軟件工程電子教案第九十二章面向?qū)ο笳n件_第4頁
軟件工程電子教案第九十二章面向?qū)ο笳n件_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第九十二章面向?qū)ο箝_發(fā)技術(shù) 傳統(tǒng)的軟件工程方法學曾經(jīng)給軟件產(chǎn)業(yè)帶來巨大進步,部分地緩解了軟件危機,使用這種方法學開發(fā)的許多中、小規(guī)模軟件項目都獲得了成功。但是,人們也注意到當把這種方法學應(yīng)用于大型軟件產(chǎn)品的開發(fā)時,似乎很少取得成功。 在20世紀60年代后期出現(xiàn)的面向?qū)ο缶幊陶Z言Simula-67中首次引入了類和對象的概念,自20世紀80年代中期起,人們開始注重面向?qū)ο蠓治龊驮O(shè)計的研究,逐步形成了面向?qū)ο蠓椒▽W。到了20世紀90年代,面向?qū)ο蠓椒▽W已經(jīng)成為人們在開發(fā)軟件時首選的范型。面向?qū)ο蠹夹g(shù)已成為當前最好的軟件開發(fā)技術(shù)。第1頁,共73頁。 面向?qū)ο笫钱斆嬗嬎銠C界的關(guān)心的重點,它是90年代軟件

2、開發(fā)方法的主流,面向?qū)ο蟮母拍詈蛻?yīng)用已超過了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、網(wǎng)絡(luò)管理結(jié)構(gòu)、人工智能領(lǐng)域,它是軟件開發(fā)的一種新方法,新技術(shù)。 9.2面向?qū)ο蟮母拍疃x:面向?qū)ο?對象+類+繼承+通信。 OO=objects+classes+inheritance+communication with messages如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計和實現(xiàn)的,則可以認為這個軟件系統(tǒng)是面向?qū)ο蟮?。?頁,共73頁。9.2.1對象(object) 面向?qū)ο箝_發(fā)模式認為客觀世界是由各種對象組成的,任何事物都是對象,復(fù)雜的對象可以由比較簡單的對象以

3、某種方式組合而成。按照這種觀點,可以認為整個世界就是一個最復(fù)雜的對象。因此,面向?qū)ο蟮能浖到y(tǒng)是由對象組成的,軟件中的任何元素都是對象,復(fù)雜的軟件對象由比較簡單的對象組合而成。 由此可見,面向?qū)ο蠓椒ㄓ脤ο蠓纸馊〈藗鹘y(tǒng)方法的功能分解。 對象是面向?qū)ο箝_發(fā)模式的基本成分是人們要進行研究的人和事物。第3頁,共73頁。一、對象的主要類型:1)有型實體:如計算機、機房、工件(某些零件)等。2)作用:指人或組織起的作用,如:醫(yī)生、教師、學生、公司、部門等。 3)事件:如:飛行、演出、開會等。4)性能說明:如產(chǎn)品名字、型號、各種性能指標等。 以上類型可以看出,對象不僅能表示結(jié)構(gòu)化數(shù)據(jù),而且能表示描象的事

4、件規(guī)律,復(fù)雜的工程實體等。因此對象具有很強的表達能力和描述功能。第4頁,共73頁。二、對象的狀態(tài)和行為 對象具有狀態(tài),一個對象用數(shù)值來描述它的狀態(tài),如某個具體的學生張三,他的姓名、年齡、性別等,用具體數(shù)據(jù)值來表示著個具體的學生的情況。 對象還有操作,用于改變對象的狀態(tài),對象及其操作就是對象的行為,例某個工人經(jīng)過“增加工資”的操作后,他的工資額這個狀態(tài)就放生了變化。 對象實現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中。第5頁,共73頁。9.2.2其他概念一、類的定義 具有相同或相似性質(zhì)的對象的抽象就是類。 類的具體化,也就是類的實例是對象。類具有屬性: 類的屬性是對象的狀態(tài)的抽象,用數(shù)

5、據(jù)結(jié)構(gòu)來描述類的屬性。類具有操作: 它是對象的行為的抽象,用操作名和實現(xiàn)操作的方法來描述。第6頁,共73頁。例:工人就是一個類,每一個具體的工人就是對象:第7頁,共73頁。二、類的結(jié)構(gòu)類通常有兩種主要結(jié)構(gòu)。一般具體結(jié)構(gòu)稱為分類結(jié)構(gòu),或者說是“is a”關(guān)系。例:汽車和交通工具都是類,但它們之間的關(guān)系是:汽車是(is a)一種交通工具,通常越上層的類,越具有一般性和共性,越下層的類越具體越細化。整體部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),或者是“has a”關(guān)系,例汽車和發(fā)動機都是類,它們之間的關(guān)系是“汽車 (has a) 有一個發(fā)動機。 在類的層次結(jié)構(gòu)中,通常上層類稱為父類,下層類稱為子類。第8頁,共73頁。三

6、、實例(instance) 實例就是由某個特定的類所描述的一個具體的對象。類是對具有相同屬性和行為的一組相似的對象的抽象,類在現(xiàn)實世界中并不能真正存在。 實際上類是建立對象時使用的“樣板”,按照這個樣板所建立的一個個具體的對象,就是類的實際例子,通常稱為實例。 當使用“對象”這個術(shù)語時,既可以指一個具體的對象,也可以泛指一般的對象,但是,當使用“實例”這個術(shù)語時,必然是指一個具體的對象。第9頁,共73頁。四、繼承(Inheritanle)繼承是類之間的一種關(guān)系,是子類自動共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機制,是面向?qū)ο笤O(shè)計語言的最主要的特點。在類層次中,子類只繼承一個父類的數(shù)據(jù)結(jié)構(gòu)和方法,稱為單重繼承

7、。在類層次中,子類只繼承多個父類的數(shù)據(jù)結(jié)構(gòu)和方法,稱為多重繼承。第10頁,共73頁。五、封裝(encapsulation) 從字面上理解,所謂封裝就是把某個事物包起來,使外界不知道該事物的具體內(nèi)容。 在面向?qū)ο蟮某绦蛑?,把?shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內(nèi)部。一個對象好像是一個不透明的黑盒子,表示對象狀態(tài)的數(shù)據(jù)和實現(xiàn)操作的代碼與局部數(shù)據(jù),都被封裝在黑盒子里面,從外面是看不見的,更不能從外面直接訪問或修改這些數(shù)據(jù)和代碼。 使用一個對象的時候,只需知道它向外界提供的接口形式,無須知道它的數(shù)據(jù)結(jié)構(gòu)細節(jié)和實現(xiàn)操作的算法。第11頁,共73頁。綜上所述,對象具有封裝性的條件如下:(1) 有一個清晰的邊

8、界。所有私有數(shù)據(jù)和實現(xiàn)操作的代碼都被封裝在這個邊界內(nèi),從外面看不見更不能直接訪問。(2) 有確定的接口(即協(xié)議)。這些接口就是對象可以接受的消息,只能通過向?qū)ο蟀l(fā)送消息來使用它。(3) 受保護的內(nèi)部實現(xiàn)。實現(xiàn)對象功能的細節(jié)(私有數(shù)據(jù)和代碼)不能在定義該對象的類的范圍外訪問。 封裝也就是信息隱藏,通過封裝對外界隱藏了對象的實現(xiàn)細節(jié)。 對象類實質(zhì)上是抽象數(shù)據(jù)類型。類把數(shù)據(jù)說明和操作說明與數(shù)據(jù)表達和操作實現(xiàn)分離開了,使用者只需知道它的說明(值域及可對數(shù)據(jù)施加的操作),就可以使用它。第12頁,共73頁。六、多態(tài)性 多態(tài)性指相同的操作、函數(shù)、過程可作用于多種類型的對象上,并獲得不同結(jié)果。即不同的對象,收

9、到同一消息可以產(chǎn)生不同的結(jié)果。例:MOVE操作,可以是窗口某一圖標的移動操作,也可以是象棋棋子移動的操作。圖標移動為了使窗口更清晰,棋子移動為贏這盤棋。同樣的函數(shù)作用不同對象效果不同。例:函數(shù)x、3+x、與3-x結(jié)果是完全不同的。 多態(tài)性允許每個對象以適合自身的方式去響應(yīng)共同的信息,用戶不必為相同的功能操作但作用于不同類型的對象而費心去識別,增強了軟件的重用性和可擴充性。第13頁,共73頁。9.3面向?qū)ο蟮拈_發(fā)方法當今面向?qū)ο箝_發(fā)方法有Coad方法、Booch方法、OMT方法和OOSE方法等。這幾種方法是早期產(chǎn)品,課堂上不介紹了?,F(xiàn)簡單介紹UML語音即統(tǒng)一建模語言(Unified Modeli

10、ng language) 1997年11月,國際對象管理組織OMG批準把UML 1.1作為基于面向?qū)ο蠹夹g(shù)的標準建模語言。UML是97年軟件工程領(lǐng)域,最重要的成果之一,是面對象技術(shù)領(lǐng)域內(nèi)占主導地位的標準建模語言,UML不僅統(tǒng)一了Booch、OMT、OOSE的表示方法并對其作了進一步的發(fā)展,最終統(tǒng)一為大眾所接受的標準建模語言。第14頁,共73頁。第十章面向?qū)ο蠓治龊透邔釉O(shè)計面向?qū)ο蟮姆治鍪擒浖_發(fā)過程中最重要的一步,也是使用面向?qū)ο蟮母拍?、原理、分析解決問題、求解問題的重要階段。面向?qū)ο蟮姆治鰪母拍钌戏譃閮蓚€層次:第一層:問題分析:主要任務(wù)是收集并確認用戶的需求信息,對實際問題進行功能分析和過程

11、分析。第二層:應(yīng)用分析:主要任務(wù)是動態(tài)描述系統(tǒng)中,對象的合法狀態(tài)序列,即建立正確的模型。第15頁,共73頁。 為了更好地理解問題,人們常常采用建立問題模型的方法。所謂模型,就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。通常,模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定義和描述問題域中的術(shù)語和概念。更進一步講,模型是一種思考工具,利用這種工具可以把知識規(guī)范地表示出來。對于那些因過分復(fù)雜而不能直接理解的系統(tǒng),特別需要建立模型,建模的目的主要是為了減少復(fù)雜性。 模型可以幫助我們思考問題、定義術(shù)語、在選擇術(shù)語時作出適當?shù)募僭O(shè),并且可以幫助我們保持定義和假設(shè)的一致性

12、。第16頁,共73頁。 面向?qū)ο蠓椒ㄗ罨镜脑瓌t,是按照人們習慣的思維方式,用面向?qū)ο笥^點建立問題域的模型,開發(fā)出盡可能自然地表現(xiàn)求解方法的軟件。 用面向?qū)ο蠓椒ㄩ_發(fā)軟件,通常需要建立3種形式的模型,它們分別是描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型,描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型和描述系統(tǒng)功能的功能模型。這3種模型都涉及到數(shù)據(jù)、控制和操作等共同的概念,只不過每種模型描述的側(cè)重點不同。這3種模型從3個不同但又密切相關(guān)的角度模擬目標系統(tǒng),它們各自從不同側(cè)面反映了系統(tǒng)的實質(zhì)性內(nèi)容,綜合起來則全面地反映了對目標系統(tǒng)的需求。一個典型的軟件系統(tǒng)組合了上述3方面內(nèi)容:它使用數(shù)據(jù)結(jié)構(gòu)(對象模型),執(zhí)行操作(動態(tài)模型),并且完

13、成數(shù)據(jù)值的變化(功能模型)。第17頁,共73頁。10.3 建立對象模型 面向?qū)ο蟮哪P妥罨镜挠腥齻€它們分別是:對象模型、動態(tài)模型、功能模型。 從客觀世界實體及實體間相互關(guān)系抽象出極有價值的對象模型;表示了靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)數(shù)據(jù)性質(zhì),表述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。(描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)),表現(xiàn)了對象關(guān)系。該模型主要關(guān)心系統(tǒng)中的:對象的結(jié)構(gòu); 屬性; 操作和方法; 關(guān)聯(lián)和鏈; 類的層次。 對象模型是三個模型的核心也是其它兩個模型的框架。第18頁,共73頁。10.3.1對象和類對象是基本成分,使人們在研究問題時,把問題分解為若干對象,(對象可以是有形實體,也可以是作用、事件、性能說明等等)對象是一個具體的有

14、很強的表達能力和描述功能的獨立體。 對象的符號:將對象抽象成類,類的表示法,圖中的屬性和操作可寫可不寫,取決于詳細程度。(類名)屬性值第19頁,共73頁。對象和類的表示方法 示例 類 實例(具體對象)類名屬性名操作名(類名)屬性值正方形邊長位置邊界顏色內(nèi)部顏色畫圖擦圖移動第20頁,共73頁。10.3.4 屬性 解紹類時曾講過,類具有屬性。類的屬性: 是對象狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性。也就是說:類的屬性是類的對象所具有的性質(zhì),不同的對象同一屬性可以具有相同或不同的屬性質(zhì)。但一個類中的屬性名是唯一的。例:正方形類中有“邊界顏色”這一屬性,正方形1的邊界顏色為紅色,正方形2的邊界顏色為綠色

15、,同一屬性不同的對象不同的屬性質(zhì),但一個類中的屬性名是唯一的。第21頁,共73頁。10.3.3操作和方法操作: 是對象的行為的抽象(類中介紹),即操作是類中對象所使用的一種功能或變換。方法: 是類中操作的實現(xiàn)過程,即實現(xiàn)步驟。例:文件這個類,可以有打印這種操作;實現(xiàn)打印需設(shè)計不同的方法,即要寫不同的程序代碼段來實現(xiàn):ASC文件的打印和數(shù)字圖像文件的打印方法是不同的,但所有的方法多是實現(xiàn)一個操作,即打印文件。第22頁,共73頁。10.3.2 關(guān)聯(lián)和鏈關(guān)聯(lián)是建立類之間關(guān)系的一種手段,鏈是建立對象之間關(guān)系的一種手段,正如對象與類的關(guān)系一樣,鏈是關(guān)聯(lián)的實例,關(guān)聯(lián)是鏈的抽象。兩個類之間的關(guān)聯(lián)稱為二元的關(guān)

16、聯(lián),三個類之間的關(guān)聯(lián)稱為三元關(guān)聯(lián)。例: 三元關(guān)聯(lián) 鏈第23頁,共73頁。關(guān)聯(lián)的多重性指類中有多少個對象與關(guān)聯(lián)的類的一個對象有關(guān)。例: 1個、空心園0個或1個、實心圓多個。第24頁,共73頁。類的層次結(jié)構(gòu)1、聚集關(guān)系:是一種整體-部分關(guān)系,是has a (類的結(jié)構(gòu)中介紹了兩種結(jié)構(gòu))。在這種關(guān)系中有整體類和部分關(guān)系之分,符號只是在關(guān)聯(lián)的整體類端多了一個菱形框。例:第25頁,共73頁。聚集可以有不同的層次,可以組成一個聚集樹。例:第26頁,共73頁。2、泛化關(guān)系 是一般具體關(guān)系稱為分類關(guān)系。是在保留對象差異的同時,共享對象相似性的一種高度抽象方法,即is a一般具體關(guān)系。符號是聯(lián)線加一個小三角例:汽

17、車、火車是 交通工具。汽車火車第27頁,共73頁。10.3.5 建立對象模型的過程:1、確定類:標出來自問題域的相關(guān)對象類。2、準備數(shù)據(jù)字典 準備一個數(shù)據(jù)字典,準確描述各個類的精確含義。第28頁,共73頁。3、確定關(guān)聯(lián) 兩個或多個類之間的相互依賴關(guān)系就是關(guān)聯(lián)。4、確定屬性 對象的狀態(tài)的抽象,為類的屬性,屬性通常用形容詞或名詞詞組來表示。先列出屬性,再刪除不必要和不正確的屬性。5、使用繼承來細化類 有兩種方法:1)自底向上,把現(xiàn)有類的共同性質(zhì)一般化成一個父類,如:月報表、日報表、組成一個大類報表。2)自上向下,把現(xiàn)有類再細化成更小的類,例:菜單細化成固定菜單、頂部菜單、彈出菜單、下拉菜單等。第2

18、9頁,共73頁。6、完善對象模型 對象建模不可能一次就保證模型是完整正確的,面向?qū)ο箝_發(fā)的整個過程,就是不斷完善的過程,有些細化和完善工作是在設(shè)計階段才開始,即在設(shè)計和實現(xiàn)過程中發(fā)現(xiàn)問題再回來細化和完善。第30頁,共73頁。10.4 建立動態(tài)模型 當問題涉及交互作用和時序時(例如,用戶界面及過程控制等),動態(tài)模型是重要的。這個模型描述了系統(tǒng)的控制結(jié)構(gòu),它關(guān)心的是系統(tǒng)的控制,操作的執(zhí)行順序,它從對象的時間和狀態(tài)的角度出發(fā),表現(xiàn)了對象的相互行為。它涉及到事件、狀態(tài)、操作、狀態(tài)圖等概念。第31頁,共73頁。一、名詞解釋事件 事件是指定時刻發(fā)生的某種事情,它是某種事發(fā)生的信息沒有持續(xù)時間的 一種相對性

19、快速事件,如:按下啟動按鈕,火箭發(fā)射,某種時間你把信用卡放入ATM機里準備取款。事件可以看成是信息從一個對象到另一個對象的單向傳送,各事件將信息從一個對象傳到另一個對象中去,因此要確定各事件的發(fā)送對象和接收對象。 事件跟蹤圖用來表示事件,事件的接受對象和發(fā)送對象,各事件用水平箭頭線表示。箭頭方向是從發(fā)送對象指向接受方向,時間從上到下遞增。例上圖打電話的事件跟蹤圖。第32頁,共73頁。狀態(tài) 狀態(tài)是對象屬性值的抽象,狀態(tài)指明了對象輸入事件的響應(yīng)。 事件和狀態(tài)是孿生的,一事件分成兩種狀態(tài),(行、不行),一個狀態(tài)分成兩個事件(能做、不能做)。說明一個狀態(tài)可以采用以下描述內(nèi)容:狀態(tài)名;狀態(tài)目的的描述;產(chǎn)

20、生該狀態(tài)的事件序列;表示狀態(tài)特征的事件;在狀態(tài)中接受的條件。狀態(tài)圖 狀態(tài)圖反映了狀態(tài)與事件的關(guān)系。當接收一事件時,下一狀態(tài)就取決于當前狀態(tài)和所接受的該事件,由該事件引起的狀態(tài)變化稱為轉(zhuǎn)換。利用狀態(tài)圖可能會發(fā)現(xiàn)一些遺漏的情況。第33頁,共73頁。狀態(tài)圖表示方法: 狀態(tài)用圓圈表示,圓圈內(nèi)有狀態(tài)名;用箭頭連線(弧)表示狀態(tài)的轉(zhuǎn)換,上面標記事件名,箭頭表示轉(zhuǎn)換方向。示意圖: 初始狀態(tài);最終狀態(tài)。進入最終狀態(tài)隱含著對象消失。例:象棋比賽中的單程狀態(tài)圖:一般將事件追蹤圖轉(zhuǎn)換成狀態(tài)圖。第34頁,共73頁。二、建立動態(tài)模型的過程:1、準備腳本 編寫腳本的過程,實質(zhì)上就是分析用戶對系統(tǒng)交互行為的要求的過程。在編

21、寫腳本的過程中,需要與用戶充分交換意見,編寫后還應(yīng)該經(jīng)過他們審查與修改。 動態(tài)分析尋找事件的開始,然后確定各對象的可能事件的順序。例:要建一個自動取款機的動態(tài)模型,就要找出取款事件、存款事件、查詢事件。第35頁,共73頁。2、確定事件 確定所有事件、條件和外部事件,事件包括所有來自用戶和設(shè)備的輸入信息和發(fā)行出去給用戶和設(shè)備的輸出信息。不要有遺漏、異常事件和條件。3、準備事件跟蹤表 列出一個事件排序表。 下一頁打電話事件排序表4、構(gòu)造狀態(tài)圖 將事件表變成反映狀態(tài)與事件的關(guān)系狀態(tài)圖。利用狀態(tài)圖發(fā)現(xiàn)是否有遺漏的情況。第36頁,共73頁。打電話者 電話線 接電話者 拿起受話機 電話忙音開始 撥號(8)

22、 電話忙音結(jié)束 撥號(2) 撥號(2) 鈴聲 電話振鈴 響應(yīng)電話 停止振鈴 停止振鈴 通話 通話 掛斷電話 電話切斷 電話切斷 掛斷電話 第37頁,共73頁。10.5 建立功能模型 功能模型描述了系統(tǒng)的所有計算,即系統(tǒng)內(nèi)部數(shù)據(jù)的傳送和處理,功能模型定義“做什么”,動態(tài)模型定義“什么時間做”做的順序,對象模型定義“對誰做”。功能模型不考慮計算的次序,它由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖中包含處理、數(shù)據(jù)流、動作對象和數(shù)據(jù)存儲對象。其中的處理功能可以用IPO圖(或表)、偽碼等多種方式進一步描述。1、處理: 數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù)值,橢圓表示處理,其中含有對處理的描述,各處理均有輸入流和輸出流。第38

23、頁,共73頁。2、數(shù)據(jù)流: 數(shù)據(jù)流將對象的輸出與處理;處理與對象的輸入;處理與處理聯(lián)系起來。3、動作對象: 為數(shù)據(jù)流的輸入流的產(chǎn)生對象和輸出流的接收對象。如果動作對象位于數(shù)據(jù)流圖的邊界,既是輸入流的源點和輸出流的終點,動作對象用長方形表示。 控制流 數(shù)據(jù)流 數(shù)據(jù)存儲區(qū)產(chǎn)生對象1過程1過程2接收對象2第39頁,共73頁。4、數(shù)據(jù)存儲對象 它與動作對象不一樣,其本身不產(chǎn)生任何操作,它只響應(yīng)存儲和訪問數(shù)據(jù)的要求,存儲可以用文件來實現(xiàn),而動作對象也可用外部設(shè)備來體現(xiàn)。5、建立功能模塊的過程: 1、確定輸入值、輸出值。 2、建立數(shù)據(jù)流圖第40頁,共73頁。小結(jié)面向?qū)ο蟮姆治鲞^程:面向?qū)ο蟮姆治龊透邔釉O(shè)計

24、,就是在了解業(yè)務(wù)和用戶的需求基礎(chǔ)上建立出這三個模型(對象、動態(tài)、功能)。第41頁,共73頁。第十一章 面向?qū)ο蟮脑O(shè)計 面向?qū)ο蟮姆治隹s寫為OOA,面向?qū)ο蟮脑O(shè)計縮寫為OOD。一、什么是面向?qū)ο蟮脑O(shè)計面向?qū)ο蟮脑O(shè)計是把分析階段得到的需求,(即三個模型)轉(zhuǎn)變到計算機系統(tǒng)要實現(xiàn)方案的過程中;面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計是一個逐步擴充模型的過程;盡管面向?qū)ο蟮姆治龊驮O(shè)計的定義有明顯區(qū)別,但在實際的軟件開發(fā)過程中二者的界限是模糊的,許多分析可以直接映射成設(shè)計結(jié)果,而設(shè)計過程中又往往會加深和補充對系統(tǒng)需求的理解,從而進一步完善分析結(jié)果。第42頁,共73頁。 因此分析和設(shè)計活動是一個多次反復(fù)迭代的過程,面向?qū)?/p>

25、象方法學在概念和表現(xiàn)方法上的一致性,保證了在各項開發(fā)活動之間的平滑(無縫)過度,領(lǐng)域?qū)<液烷_發(fā)人員能夠比較容易地跟蹤整個系統(tǒng)開發(fā)過程,這是面向?qū)ο蠓椒ㄅc傳統(tǒng)比起來具有的一大優(yōu)勢。 二、相對結(jié)構(gòu)化設(shè)計方法的總體設(shè)計和詳細設(shè)計,面向?qū)ο笤O(shè)計也可大致分成系統(tǒng)設(shè)計和對象設(shè)計。 第43頁,共73頁。11.1 面向?qū)ο笤O(shè)計的準則 模塊化設(shè)計的幾條基本原理,在面向?qū)ο笤O(shè)計時仍適用,但增加了一些新的特點。面向?qū)ο笤O(shè)計的準則:1、模塊化 支持把系統(tǒng)分成模塊的設(shè)計原理:對象就是模塊,它是把數(shù)據(jù)結(jié)構(gòu)和操作這些數(shù)據(jù)的方法緊密地結(jié)合在一起所構(gòu)成的模塊。2、抽象 面向?qū)ο蟮姆椒ú粌H支持工程抽象而且支持數(shù)據(jù)抽象,類實際上是

26、一種規(guī)格說明抽象。第44頁,共73頁。3、信息隱蔽 在面向?qū)ο蟮姆椒ㄖ校畔㈦[蔽通過對象的封裝性來實現(xiàn)。 對類的用戶來說,屬性的表示方法和操作的實現(xiàn)算法都應(yīng)該是隱蔽的。4、低耦合 在面向?qū)ο蠓椒ㄖ校瑢ο笫亲罨镜哪K,因此耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度,低耦合是設(shè)計的一個重要標準。第45頁,共73頁。5、高內(nèi)聚 面向?qū)ο笤O(shè)計存在下述三種內(nèi)聚:1)操作內(nèi)聚: 一個操作只能完成一個功能。2)類內(nèi)聚: 一個類應(yīng)該只有一個用途,它的屬性和操作是高內(nèi)聚的,不包含無用的屬性和操作,如果某個類有多個用途,通常應(yīng)該把它分解成多個專用類。3)一般具體內(nèi)聚: 設(shè)計類的一般具體結(jié)構(gòu)應(yīng)該符合多數(shù)人的概念,準

27、確地說:這種結(jié)構(gòu)應(yīng)該是對象應(yīng)用領(lǐng)域知識的正確抽取。第46頁,共73頁。11.2 面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則雖然面向?qū)ο箝_發(fā)軟件的歷史不長,但人的也積累了一些經(jīng)驗,這經(jīng)驗?zāi)軒椭浖_發(fā)人員提高開發(fā)軟件的質(zhì)量,這些經(jīng)驗稱啟發(fā)規(guī)則:1、設(shè)計結(jié)果應(yīng)清晰易懂,(用詞一致,避免模糊定義,使用已有的協(xié)議等)。2、一般具體結(jié)構(gòu)的深度應(yīng)適當,(中等規(guī)模系統(tǒng)100類左右,類結(jié)構(gòu)層次數(shù)應(yīng)保持為5至9)。第47頁,共73頁。3、設(shè)計簡單的類(設(shè)計的類不要包括太多的屬性和操作)4、使用簡單的協(xié)議(消息中的參數(shù)不要超過3個,這不是絕對的)。5、使用簡單的操作(類的操作一般,只有35行源程序語句)。6、把設(shè)計變動減到最小 通常

28、設(shè)計的質(zhì)量越高,設(shè)計得修改范圍就越小,開始改動大,方案越成熟改動也越小。第48頁,共73頁。11.3 軟件重用11.3.1 概述1. 重用 重用也叫再用或復(fù)用,是指同一事物不作修改或稍加改動就多次重復(fù)使用。廣義地說,軟件重用可分為以下3個層次:(1) 知識重用(例如,軟件工程知識的重用)。(2) 方法和標準的重用(例如,面向?qū)ο蠓椒ɑ驀抑贫ǖ能浖_發(fā)規(guī)范的重用)。(3) 軟件成分的重用。 前兩個重用層次屬于知識工程研究的范疇,本節(jié)僅討論軟件成分重用問題。第49頁,共73頁。2. 軟件成分的重用級別 軟件成分的重用可以進一步劃分成以下3個級別:(1) 代碼重用 通常把它理解為調(diào)用庫中的模塊。實

29、際上,代碼重用也可以采用下列幾種形式中的任何一種: 1)源代碼剪貼:這是最原始的重用形式。這種重用方式的缺點是,復(fù)制或修改原有代碼時可能出錯,更糟糕的是,存在嚴重的配置管理問題,人們幾乎無法跟蹤原始代碼塊多次修改重用的過程。第50頁,共73頁。 繼承:利用繼承機制重用類庫中的類時,無須修改已有的代碼,就可以擴充或具體化在庫中找出的類,因此,基本上不存在配置管理問題。(2) 設(shè)計結(jié)果重用 設(shè)計結(jié)果重用指的是,重用某個軟件系統(tǒng)的設(shè)計模型(即求解域模型)。這個級別的重用有助于把一個應(yīng)用系統(tǒng)移植到完全不同的軟硬件平臺上。(3) 分析結(jié)果重用 這是一種更高級別的重用,即重用某個系統(tǒng)的分析模型。這種重用特

30、別適用于用戶需求未改變,但系統(tǒng)體系結(jié)構(gòu)發(fā)生了根本變化的場合。第51頁,共73頁。3. 典型的可重用軟件成分更具體地說,可能被重用的軟件成分主要有以下10種:(1) 項目計劃。軟件項目計劃的基本結(jié)構(gòu)和許多內(nèi)容(例如,軟件質(zhì)量保證計劃)都是可以跨項目重用的。這樣做減少了用于制定計劃的時間,也降低了與建立進度表和進行風險分析等活動相關(guān)聯(lián)的不確定性。(2) 成本估計。因為在不同項目中經(jīng)常含有類似的功能,所以有可能在只做極少修改或根本不做修改的情況下,重用對該功能的成本估計結(jié)果。(3) 體系結(jié)構(gòu)。即使在考慮不同的應(yīng)用領(lǐng)域時,也很少有截然不同的程序和數(shù)據(jù)體系結(jié)構(gòu)。因此,有可能創(chuàng)建一組類屬的體系結(jié)構(gòu)模板(例

31、如,事務(wù)處理體系結(jié)構(gòu)),并把那些模板作為可重用的設(shè)計框架。通常把類屬的體系結(jié)構(gòu)模板稱為領(lǐng)域體系結(jié)構(gòu)。第52頁,共73頁。(4) 需求模型和規(guī)格說明。類和對象的模型及規(guī)格說明是明顯的重用的候選者,此外,用傳統(tǒng)軟件工程方法開發(fā)的分析模型(例如,數(shù)據(jù)流圖),也是可重用的。(5) 設(shè)計。用傳統(tǒng)方法開發(fā)的體系結(jié)構(gòu)、數(shù)據(jù)、接口和過程設(shè)計結(jié)果,是重用的候選者,更常見的是,系統(tǒng)和對象設(shè)計是可重用的。(6) 源代碼。用兼容的程序設(shè)計語言書寫的、經(jīng)過驗證的程序構(gòu)件,是重用的候選者。(7) 用戶文檔和技術(shù)文檔。即使針對的應(yīng)用是不同的,也經(jīng)常有可能重用用戶文檔和技術(shù)文檔的大部分。第53頁,共73頁。(8) 用戶界面。

32、這可能是最廣泛被重用的軟件成分,GUI(圖形用戶界面)軟件經(jīng)常被重用。因為它可占到一個應(yīng)用程序的60%代碼量,因此,重用的效果非常顯著。(9) 數(shù)據(jù)。在大多數(shù)經(jīng)常被重用的軟件成分中,被重用的數(shù)據(jù)包括: 內(nèi)部表、列表和記錄結(jié)構(gòu),以及文件和完整的數(shù)據(jù)庫。(10) 測試用例。一旦設(shè)計或代碼構(gòu)件將被重用,相關(guān)的測試用例應(yīng)該“附屬于”它們也被重用。第54頁,共73頁。11.3.2 類構(gòu)件 利用面向?qū)ο蠹夹g(shù),可以更方便更有效地實現(xiàn)軟件重用。面向?qū)ο蠹夹g(shù)中的“類”,是比較理想的可重用軟構(gòu)件,不妨稱之為類構(gòu)件。類構(gòu)件有3種重用方式,分別是實例重用、繼承重用和多態(tài)重用。下面進一步講述與類構(gòu)件有關(guān)的內(nèi)容。1. 可

33、重用軟構(gòu)件應(yīng)具備的特點 為使軟構(gòu)件也像硬件集成電路那樣,能在構(gòu)造各種各樣的軟件系統(tǒng)時方便地重復(fù)使用,就必須使它們滿足下列要求。(1) 模塊獨立性強。具有單一、完整的功能,且經(jīng)過反復(fù)測試被確認是正確的。它應(yīng)該是一個不受或很少受外界干擾的封裝體,其內(nèi)部實現(xiàn)在外面是不可見的。第55頁,共73頁。(2) 具有高度可塑性。軟構(gòu)件的應(yīng)用環(huán)境比集成電路更廣闊、更復(fù)雜。顯然,要求一個軟構(gòu)件能滿足任何一個系統(tǒng)的設(shè)計需求是不現(xiàn)實的。因此,可重用的軟構(gòu)件必須具有高度可裁剪性,也就是說,必須提供為適應(yīng)特定需求而擴充或修改已有構(gòu)件的機制,而且所提供的機制必須使用起來非常簡單方便。(3) 接口清晰、簡明、可靠。軟構(gòu)件應(yīng)該

34、提供清晰、簡明、可靠的對外接口,而且還應(yīng)該有詳盡的文檔說明,以方便用戶使用。 精心設(shè)計的“類”基本上能滿足上述要求,可以認為它是可重用軟構(gòu)件的雛形。第56頁,共73頁。2. 類構(gòu)件的重用方式(1) 實例重用 由于類的封裝性,使用者無須了解實現(xiàn)細節(jié)就可以使用適當?shù)臉?gòu)造函數(shù),按照需要創(chuàng)建類的實例。然后向所創(chuàng)建的實例發(fā)送適當?shù)南ⅲ瑔酉鄳?yīng)的服務(wù),完成需要完成的工作。這是最基本的重用方式。此外,還可以用幾個簡單的對象作為類的成員創(chuàng)建出一個更復(fù)雜的類,這是實例重用的另一種形式。雖然實例重用是最基本的重用方式,但是,設(shè)計出一個理想的類構(gòu)件并不是一件容易的事情。第57頁,共73頁。(2) 繼承重用 面向?qū)?/p>

35、象方法特有的繼承性提供了一種對已有的類構(gòu)件進行裁剪的機制。為提高繼承重用的效果,關(guān)鍵是設(shè)計一個合理的、具有一定深度的類構(gòu)件繼承層次結(jié)構(gòu)。這樣做有下述兩個好處: 1)每個子類在繼承父類的屬性和服務(wù)的基礎(chǔ)上,只加入少量新屬性和新服務(wù),這就不僅降低了每個類構(gòu)件的接口復(fù)雜度,表現(xiàn)出一個清晰的進化過程,提高了每個子類的可理解性,而且為軟件開發(fā)人員提供了更多可重用的類構(gòu)件。因此,在軟件開發(fā)過程中,應(yīng)該時刻注意提取這種潛在的可重用構(gòu)件,必要時應(yīng)在領(lǐng)域?qū)<規(guī)椭?,建立符合領(lǐng)域知識的繼承層次。 2)為多態(tài)重用奠定了良好基礎(chǔ)。第58頁,共73頁。(3) 多態(tài)重用 利用多態(tài)性還提供了一種簡便可靠的軟構(gòu)件組合機制。系

36、統(tǒng)運行時,根據(jù)接收消息的對象類型,由多態(tài)性機制啟動正確的方法,去響應(yīng)一個一般化的消息,從而簡化了消息界面和軟構(gòu)件連接過程。為充分實現(xiàn)多態(tài)重用,在設(shè)計類構(gòu)件時,應(yīng)該把注意力集中在下列一些可能影響重用性的操作上:與表示方法有關(guān)的操作。例如,不同實例的比較、顯示、擦除等等。與數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)大小等有關(guān)的操作。與外部設(shè)備有關(guān)的操作。例如,設(shè)備控制。實現(xiàn)算法在將來可能會改進(或改變)的核心操作。 如果不預(yù)先采取適當措施,上述這些操作會妨礙類構(gòu)件的重用。第59頁,共73頁。11.3.3 軟件重用的效益1. 質(zhì)量 理想情況下,為了重用而開發(fā)的軟件構(gòu)件已被證明是正確的,且沒有缺陷。事實上,由于不能定期進行形式化

37、驗證,錯誤可能而且也確實存在。但是,隨著每一次重用,都會有一些錯誤被發(fā)現(xiàn)并被清除,構(gòu)件的質(zhì)量也會隨之改善。隨著時間的推移,構(gòu)件將變成實質(zhì)上無錯誤的。第60頁,共73頁。2. 生產(chǎn)率 當把可重用的軟件成分應(yīng)用于軟件開發(fā)的全過程時,創(chuàng)建計劃、模型、文檔、代碼和數(shù)據(jù)所需花費的時間將減少,從而將用較少的投入給客戶提供相同級別的產(chǎn)品,因此,生產(chǎn)率得到了提高。 由于應(yīng)用領(lǐng)域、問題復(fù)雜程度、項目組的結(jié)構(gòu)和大小、項目期限、可應(yīng)用的技術(shù)等許多因素都對項目組的生產(chǎn)率有影響,因此,不同開發(fā)組織對軟件重用帶來生產(chǎn)率提高的數(shù)字的報告并不相同,但基本上30%50%的重用大約可以導致生產(chǎn)率提高25%40%。第61頁,共73

38、頁。3. 成本軟件重用帶來的凈成本節(jié)省可以用下式估算:C=Cs-Cr-Cd其中,Cs是項目從頭開發(fā)(沒有重用)時所需要的成本;Cr是與重用相關(guān)聯(lián)的成本;Cd是交付給客戶的軟件的實際成本??梢允褂帽緯?3章講述的技術(shù)來估算Cs,而與重用相關(guān)聯(lián)的成本Cr主要包括下述成本:領(lǐng)域分析與建模的成本;設(shè)計領(lǐng)域體系結(jié)構(gòu)的成本;為便于重用而增加的文檔的成本;第62頁,共73頁。維護和完善可重用的軟件成分的成本;為從外部獲取構(gòu)件所付出的版稅和許可證費;創(chuàng)建(或購買)及運行重用庫的費用;對設(shè)計和實現(xiàn)可重用構(gòu)件的人員的培訓費用。 雖然和領(lǐng)域分析及運行重用庫相關(guān)聯(lián)的成本可能相當高,但是它們可以由許多項目分攤。上面列

39、出的很多其他成本所解決的問題,實際上是良好軟件工程實踐的一部分,不管是否優(yōu)先考慮重用,這些問題都應(yīng)該解決。第63頁,共73頁。11.4 面向?qū)ο笤O(shè)計的過程設(shè)計過程也可大體分成兩個部分:一、系統(tǒng)設(shè)計,具體步驟:1、系統(tǒng)分解。將系統(tǒng)分解子系統(tǒng),最低層的子系統(tǒng),稱為模塊,它不是一個功能(而是類、關(guān)聯(lián)、操作事件和約束的集合)。2、確定并發(fā)性,確定有些必須是同時動作的對象,哪些不是。3、處理器及任務(wù)分配,(硬件和子系統(tǒng)的分配)。第64頁,共73頁。 4、數(shù)據(jù)存儲管理。 數(shù)據(jù)存儲管理是系統(tǒng)存儲或檢索對象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲管理系統(tǒng)之上,并隔離了數(shù)據(jù)存儲管理模式(文件、關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫)的影響。不同數(shù)據(jù)存儲管理模式有不同特點,設(shè)計時要注意。 5、人機交互接口 對系統(tǒng)的人機交互接口進行詳細設(shè)計,確定細節(jié)其中包括指定窗口和報表形式,設(shè)計命令層次等項內(nèi)容。第65頁,共73頁。二、對象設(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論