面向?qū)ο蠓治龊驮O計_第1頁
面向?qū)ο蠓治龊驮O計_第2頁
面向?qū)ο蠓治龊驮O計_第3頁
面向?qū)ο蠓治龊驮O計_第4頁
面向?qū)ο蠓治龊驮O計_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、引言o 什么是面向?qū)ο蠓椒??o 結(jié)構化方法和面向?qū)ο蠓椒ㄓ泻尾煌?.1結(jié)構化方法的一個例子o 設計并實現(xiàn)一個四則運算軟件,輸入兩個數(shù)和運算符號,輸出運算結(jié)果。n 用數(shù)據(jù)流程圖來表示,只有三個處理:“數(shù)據(jù)數(shù)據(jù)錄入錄入”, “計算計算”, “結(jié)果輸出結(jié)果輸出”,轉(zhuǎn)換成設計模塊也只有“主模塊主模塊”“”“數(shù)據(jù)錄入數(shù)據(jù)錄入”“”“計算計算”“”“結(jié)果輸出結(jié)果輸出”4個簡單的模塊。n 注:模塊太簡單,畫圖略去,直接進入編碼如下。模塊名稱:input 功能:輸入運算數(shù)和運算符輸入模塊主要代碼輸出/返回無提示輸入信息:請輸入數(shù)字A、B和運算符:讀入NumberA、NumberB和OperateNumber

2、A,NumberB,Operate輸入模塊主要代碼輸出/返回NumberANumberBOperateString Result = ;Switch(Operate)case +: Result =string(NumberA + NumberB);break;case : Result =string(NumberA NumberB);break;case *: Result =string(NumberA NumberB);break;case /: if (NumberB!= 0)Result =string(NumberA NumberB);else Result = 除數(shù)不能為0br

3、eak;Result模塊名稱:compute 功能:計算輸入模塊主要代碼輸出/返回ResultConsole.WriteLine(運算結(jié)果: + Result); 無模塊名稱:output 功能:輸出結(jié)果o 當需求發(fā)生變化,例如,增加一個平方運算或開根運算時,需要修改計算模塊,這就要求程序員對計算模塊的代碼非常了解。o 這對于功能簡單的軟件比較容易實現(xiàn),當軟件規(guī)模比較大,功能復雜時,非常容易出錯,并且軟件的維護量很大。用面向?qū)ο蠓椒▽崿F(xiàn)o 首先設計一個計算類operation,有兩個私有的操作數(shù)numberA和numberB、三個方法:NumberA(),NumberB()和GetResult

4、()o 類圖如下: 點評:o在客戶端主程序直接調(diào)用實例化工廠類創(chuàng)建相應的運算類對象,工廠返回相應的運算類對象指針。例如:nOperation oper;noper = OperationFactory. createOperate(+) ;noper.NumberA = 1; noper.NumberB =2;ndouble.result = oper.GetResult();o每個計算分別設計為一個子類,如果要增加新的運算,只需添加子類,同時在實例化工廠類中添加相應的switch分支,其他的處理不受影響。也就是說,程序員不必了解其他運算的處理代碼,程序的整體結(jié)構沒有變化。結(jié)構化方法的特點:o

5、 數(shù)據(jù)流程圖和軟件模塊結(jié)構圖之間需要進行轉(zhuǎn)換,轉(zhuǎn)換有一定的隨意性。o 功能變化就會導致軟件模塊結(jié)構發(fā)生變化,造成了軟件結(jié)構不穩(wěn)定。不適合大規(guī)模的軟件開發(fā)。結(jié)構化方法的問題(續(xù)):o 將數(shù)據(jù)定義與處理數(shù)據(jù)的過程相分離,不利于軟件復用。o 例如,在圖書館信息管理系統(tǒng)中,對圖書基本信息進行處理的典型方法是:在數(shù)據(jù)說明中定義圖書基本信息,并設計圖書信息添加模塊、修改模塊、刪除模塊等功能模塊,實現(xiàn)對圖書信息的處理。o 當新的系統(tǒng)要復用圖書處理功能時,要分別復制數(shù)據(jù)說明定義和各個功能處理模塊。5.2 面向?qū)ο蟮母拍頾 什么是對象?n在現(xiàn)實世界中的任何有屬性的單個實體或概念,都可看做對象。 學生張三是一個對

6、象,具有姓名、學號、班級等屬性;一個銀行賬戶是一個對象,具有用戶名、余額等屬性;一份訂單也是一個對象,具有貨品名、單價、數(shù)量等屬性。n對象可以有屬性和操作。屬性是靜態(tài)特征,操作是動態(tài)特征。o 什么是類?n類是具有相同屬性和相同行為的對象集合。 學生是一個類,其中的一名學生張三是學生類的一個實例,其屬性有:姓名=張三,學號=J20080101,班級=計算機08-1:具有的操作可以是獲得或設置屬性值,或與其他對象用消息通信。例如,獲得學生的姓名、修改班級號,向其他對象發(fā)送消息。o 類和對象的關系?面向?qū)ο笃渌拍睿≒161)o 消息機制o 封裝性o 繼承性o 多態(tài)性4種面向?qū)ο蟮拈_發(fā)方法o Boo

7、ch方法o Coad方法o OOSE方法o OMT方法5.4 UML語言o Booch、Rumbaugh和Jacobson三人創(chuàng)建了統(tǒng)一建模語言UML。n 不是一種可視化的程序設計語言,而是一種可視化的建模語言;n 不是工具或知識庫的規(guī)格說明,而是一種建模建模語言規(guī)格說明語言規(guī)格說明,是一種表示的標準表示的標準;n 不是過程,也不是方法,但允許任何一種過程和方法使用它。UML中的各種視圖(View)o 參見P167,自學剩下內(nèi)容面向?qū)ο蠓椒ǖ幕倦A段:o 面向?qū)ο蠓治觯簄 分析和構造問題域的對象模型,區(qū)分類和對象,整體和部分關系;定義屬性、服務,確定約束。o 面向?qū)ο笤O計:n 根據(jù)面向?qū)ο蠓治?/p>

8、,設計交互過程和用戶接口,設計任務管理,配置資源,確定邊界條件,劃分子系統(tǒng),確定軟、硬件元素分配;o 面向?qū)ο髮崿F(xiàn):n 使用面向?qū)ο笳Z言實現(xiàn)面向?qū)ο笤O計。6.1 面向?qū)ο笮枨蠓治龈攀鰋 面向?qū)ο蠓治龊驮O計涉及到3方面內(nèi)容:n 一套完善的建模符號o 目前流行的建模符號采用UML的一套圖形符號;n 一系列有效的分析步驟o 從描述用戶需求的文件中,抽象出目標系統(tǒng)的本質(zhì)屬性,建立以用例模型、對象模型和動態(tài)模型用例模型、對象模型和動態(tài)模型為核心的分析模型;n 一個方便易用的建模工具。o Rational ROSE等。面向?qū)ο笮枨蠓治龅娜蝿誳 以用例和場景用例和場景為基礎,建立簡潔、精確、可理解的模型。o

9、 在此基礎上,開發(fā)人員和用戶一起檢查模型,保證模型的正確、一致、完整和可行。o 循序漸進,多次循環(huán)迭代完成。建立用例模型o 用例模型是用來描述用戶需求描述用戶需求的模型n 第1步:確定角色o 系統(tǒng)發(fā)生交互活動的所有角色,如使用者、外部系統(tǒng)、外部設備、時間(定時器、觸發(fā)器等)n 第2步 確定用例o 從每個角色出發(fā)研究該角色要干什么?把要做的事情映射到用例o 分析過程中,研究過程中需要弄清的幾個問題:n 角色要求系統(tǒng)提供哪些功能(使用者需要做什么)?n 角色需要了解和處理的信息有哪些類型?n 必須提醒角色的系統(tǒng)事件有哪些?角色必須提醒系統(tǒng)的事件有哪些?怎樣把這些事件表示成用例中的功能?n 第3步

10、確定用例模型o 使用用例圖展示系統(tǒng)的用例模型。n 第4步 用例模型說明o 包括角色說明;用例總覽和詳述。 n 第5步 用例模型評價(評審)n 第6步 優(yōu)化用例模型n 第7步 構造用戶界面的原型 o 整個步驟詳細參見P186頁建立對象模型o 第1步:識別分析類。n 分析用例模型的每個用例,確定實現(xiàn)用例的類,分析每個類的職責、屬性和關聯(lián)。n 將參與用例實現(xiàn)的類收集到一個類圖中。分析類分為:o 邊界類描述系統(tǒng)與外部角色之間的接口。o 控制類在分析模型內(nèi)表示協(xié)調(diào)、順序、事務處理以及控制其他對象的類。o 實體型為需要長久保存的信息進行建模的類。邊界類控制類建立對象模型(續(xù))o 第2步 構造類圖建立動態(tài)模

11、型o 用交互圖來描述分析類如何相互協(xié)作實現(xiàn)用例的功能。交互圖如活動圖、狀態(tài)圖和順序圖等o 例如,圖書館信息管理系統(tǒng)“借書”用例的順序圖。圖8-10借書的基本順序圖圖8-11借書失敗的順序圖面向?qū)ο笤O計的概念o 面向?qū)ο蠓治龊驮O計的界限是模糊的,從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O計是一個逐漸擴充模型逐漸擴充模型的過程。o 分析的結(jié)果通過細化直接生成設計結(jié)果,在設計過程中逐步加深對需求的理解,從而進一步完善需求分析的結(jié)果。o 分析和設計活動是一個反復迭代反復迭代的過程。o 面向?qū)ο笤O計的四個層次:n 確定系統(tǒng)的總體結(jié)構和風格,構造系統(tǒng)的物理模型,將系統(tǒng)劃分成不同的子系統(tǒng)。n 中層設計:對每個用例進行設計,

12、規(guī)劃實現(xiàn)用例功能的關鍵類,確定類之間的關系。n 進行底層設計:對每個類進行詳細設計,設計類的屬性和操作,優(yōu)化類之間的關系。n 補充實現(xiàn)非功能性需求所需要的類。o 設計要點:n 對接口進行設計n 發(fā)現(xiàn)變化并且封裝它n 先考慮聚合然后考慮繼承高內(nèi)聚、低耦合o 類內(nèi)聚設計類的原則是一個類的屬性和操作全部都是完成某個任務所必須的,其中不包括無用的屬性和操作。o 應該通過類的公共接口實現(xiàn)耦合應該通過類的公共接口實現(xiàn)耦合,不應該依賴于類的具體實現(xiàn)細節(jié)。o 在設計時應該盡量減少對象之間發(fā)送的消息數(shù)應該盡量減少對象之間發(fā)送的消息數(shù)和消息中的參數(shù)個數(shù)和消息中的參數(shù)個數(shù),降低消息連接的復雜程度。o 設計時應該適當

13、使用適當使用繼承耦合可重用性o 重用性有兩個方面的含義:n盡量使用已有的類,包括開發(fā)環(huán)境提供的類庫和已有的相似的類;n如果確實需要創(chuàng)建新類,則在設計這些新類時考慮將來的可重用性。o 設計一個可重用的軟件比設計一個普通軟件的代價要高,但是隨著這些軟件被重用次數(shù)的增加,分攤到它的設計和實現(xiàn)成本就會降低??蚣躱 框架是一組可用于不同應用的類的集合。n 例如,Java應用程序接口(API)就是一個成功的框架包,為眾多的應用提供服務。n 一般不會直接去修改框架的類,而是通過繼承等為應用創(chuàng)建合適的類。o 軟件架構和軟件框架有何區(qū)別?軟件架構和軟件框架有何區(qū)別?n 軟件框架是一特殊的軟件,由實際的代碼構建而

14、成,是軟件系統(tǒng)、子系統(tǒng)的半成品。n 軟件框架為具體的解決方案提供了基礎,提供了基礎服務和可擴展點,同時也建立了一些約束,開發(fā)人員在此基礎上進行特定業(yè)務功能的定制開發(fā)。n 例如,在J2EE企業(yè)級應用程序開發(fā)中,經(jīng)常使用struts+spring+hibernate來搭建一個基本的項目結(jié)構。n 軟件架構決定了軟件系統(tǒng)如何劃分,在一定程度上描述了被劃分的各個部分之間的靜態(tài)、動態(tài)關系。軟件架構的決策體現(xiàn)在軟件系統(tǒng)的框架中。7.2 構架設計(參見P220)o 構架設計的目的是要勾畫出系統(tǒng)的總體結(jié)構,這項工作由經(jīng)驗豐富的構架設計師主持完成。o 該活動以用例模型、分析模型為輸入。o 輸出:物理結(jié)構、子系統(tǒng)及

15、其接口、概要的設計類。設計模式o 所謂Pattern就是一種規(guī)則,或是一種模型,或是一種習慣。Pattern這個東西到處都是,并不只有技術圏子里才有。n 比如:詩歌總是抒情的,論文總是死板的,講稿總是高談的,漫畫總是幽默的,n 經(jīng)濟領域:溫州模式,電商的商業(yè)模式等設計模式o 軟件設計模式n 每種模式解決一種特定問題n 設計模式并不是只在OO中獨有n 理解每種模式的意圖,適用的場景,使用的限制n 參考P209面向?qū)ο箢愒O計原則o 可參見P2091.o 開閉原則(Open Closed Principle)簡稱OCPn 在擴展性方面是開放的,而對內(nèi)部的更改應該是封閉的(外部看不到)。o 因此在進行

16、面向?qū)ο笤O計時要盡量考慮接口封裝機制、抽象機制和多態(tài)技術。 老式收音機旋鈕式收音機按鍵式收音機問題描述:開關、調(diào)臺、音量o 不同收音機,實現(xiàn)的細節(jié)不同o 處理方式:n用一個類來處理各種不同類型收音機的操作方式n定義一個接口類,提供開機、關機、增加頻率、降低頻率、增加音量、降低音量這六個抽象方法。不同的收音機繼承并實現(xiàn)這六個抽象方法。o 點評:n前者要新增一中收音機的控制方式時,需要整個程序都讀一遍,整體的修改;n后者新增收音機類型不會影響其它原有的收音機類型,收音機類型擴展極為方便。已存在的收音機類型在修改其操作方法時也不會影響到其它類型的收音機。 設計的收音機處理軟件類圖2.o 替換原則 (

17、Liskov Substitution Principle)簡稱LSPn 子類可以替換父類,并可以出現(xiàn)在父類能夠出現(xiàn)的任何地方。圓形子類橢圓父類p運用替換原則時,應該盡量把類B設計為抽象類或者接口類,讓C類繼承B,并實現(xiàn)操作A和操作B。p運行時,類C實例替換B,這樣即可進行新類的擴展,同時無須對類A進行修改。 3.o 依賴原則(Dependency Inversion Principle)簡稱DIP。n 類之間的依賴關系盡量依賴接口和抽象類,不要依賴于具體類(具體類只負責相關業(yè)務的實現(xiàn))n 修改具體類不影響上層的抽象類。4.o 單一職責原則(Single Responsibility Principle)簡稱為SRP。n 一個類應該有

溫馨提示

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

評論

0/150

提交評論