軟件設計與體系結構課后題答案_第1頁
軟件設計與體系結構課后題答案_第2頁
軟件設計與體系結構課后題答案_第3頁
軟件設計與體系結構課后題答案_第4頁
軟件設計與體系結構課后題答案_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、【題型】1.選擇20道2.填空10道3.簡答5或6道4.編程題2道【重點】1.軟件危機的表現 黃色底紋的是重點的一級標題,下同軟件開發(fā)進度難以預測軟件開發(fā)成本難以控制用戶對產品功能難以滿足軟件產品質量無法保證軟件產品難以維護2.引發(fā)軟件危機的原因用戶需求不明確缺乏正確的理論指導軟件開發(fā)規(guī)模越來越大軟件開發(fā)復雜度越來越高3.體系結構概念構件、構件之間的關系、集成構件的模式及約束條件4.構件的概念構件是指語義完整、語法正確和有可重用價值的單位軟件,是軟件重用過程中可以明確辨識的系統;結構上,它是語義描述、通訊接口和實現代碼的復合體。5.引入體系結構使得開發(fā)過程發(fā)生什么變化?好處是什么?軟件再工程、

2、逆工程的概念?軟件設計質量的量度【變化】在引入了體系結構的軟件開發(fā)之后,應用系統的構造過程變?yōu)椤皢栴}定義>軟件需求>軟件體系結構>軟件設計>軟件實現”,可以認為軟件體系結構架起了軟件需求與軟件設計之間的一座橋梁。 【好處】克服軟件危機【再工程】是指對既存對象系統進行調查,并將其重構為新形式代碼的開發(fā)過程。最大限度的復用既存系統的各種資源是再工程的最重點特征之一。 如何開發(fā)可復用軟件和如何構造采用可復用軟件的系統體系結構是兩個關鍵問題。【逆工程】是指分析軟件系統,確定其構成成分及各成分間的關系,提取并生成系統抽象和設計信息的工程。【量度】面向對象軟件質量的度量重點在于對類

3、的分析上。應從類的以下方面考慮: 耦合 內聚度 繼承性 復雜度6.5個設計原則概念【單一職責原則】就一個類而言,應該僅有一個引起它變化的原因?!鹃_閉原則】軟件實體(類、模塊、函數等等)應該可以擴展,但是不可修改。(也就是老婆常說的對擴展開放,對修改關閉)【依賴倒轉】抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象。要針對接口編程,不要對實現編程?!纠锸洗鷵Q】在軟件里面,把父類都替換成它的子類,程序行為沒有變化。簡單地說,子類型必須能夠替換掉它們的父類型?!镜厦滋亍咳绻麅蓚€類不必彼此直接通信,那么這兩個類就不應當發(fā)生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發(fā)這個調

4、用。7.軟件設計目標(健壯性等)概念正確性、健壯性、可復用性、可維護性、高效性8.17個模式(包含簡單工廠方法)的概念、結構圖、類的關系、代碼、什么時候采用、優(yōu)缺點【簡單工廠】簡單工廠模式是由一個工廠類根據傳入的參數,動態(tài)決定應該創(chuàng)建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。 按住Ctrl鍵并單擊我可以查看三個工廠模式的相同點結構圖: 灰色底紋的是重點的二級標題,下同老師給的ppt上沒有,在度娘那里找了一個優(yōu)點:工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創(chuàng)建哪個具體類的對象.通過使用工廠類,外界可以從直接創(chuàng)建具體產品對象的尷尬局面擺脫出來,僅僅需

5、要負責“消費”對象就可以了。而不必管這些對象究竟如何創(chuàng)建及如何組織的明確了各自的職責和權利,有利于整個軟件體系結構的優(yōu)化。缺點:由于工廠類集中了所有實例的創(chuàng)建邏輯,違反了高內聚責任分配原則,將全部創(chuàng)建邏輯集中到了一個工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件創(chuàng)建不同實例的需求這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統的維護和擴展非常不利;何時采用:工廠類負責創(chuàng)建的對象比較少;客戶只知道傳入工廠類的參數,對于如何創(chuàng)建對象(邏輯)不關心;由于簡單工廠很

6、容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用?!静呗阅J健克x了算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶結構圖:優(yōu)點:1.Strategy類層次為Context類定義了一系列可供重用的算法或行為。繼承有助于析取出這些算法中的公共功能。 2.簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。修改其中任一個時,也不會影響其他算法。3. 當不同的行為堆砌到一個類中時,就很難避免使用條件語句來選擇合適的行為最開始的程序,不得不在客戶端代碼中判斷使用哪個算法。4. 將這些行為封裝在一個獨立的Strategy類中,可以

7、在使用這些行為的類中消除條件語句。缺點:CashContext還是用到了switch分支語句,若增加算法,需更改CashContext中的代碼何時采用:策略模式就是用來封裝算法的,可以用它來封裝幾乎任何類型的規(guī)則,只要在分析過程中聽到需要在不同時間應用不同的業(yè)務規(guī)則,就可以考慮用使用策略模式處理這種變化的可能性?!狙b飾模式】動態(tài)地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活結構圖:優(yōu)點:1. 把類的裝飾功能從類中搬移去除,這樣可以簡化原有的類。2. 有效的將類的核心職責和裝飾功能區(qū)分開。而且可以去除相關類中重復的裝飾邏輯。缺點:多層的裝飾比較復雜何時采用:1. 需要

8、擴展一個類的功能,或給一個類增加附加功能2. 需要動態(tài)地給一個對象增加功能,這些功能可以再動態(tài)地撤銷3. 需要為一批的兄弟類進行改裝或加裝功能【工廠方法】定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。 按住Ctrl鍵并單擊我可以查看三個工廠模式的相同點結構圖:優(yōu)點:1工廠方法克服了簡單工廠違背開閉原則的缺點,又保持了封裝對象創(chuàng)建過程的優(yōu)點。2.使得更換對象時,不需要做大的改動,降低了客戶程序與產品對象的耦合。3.工廠方法模式是簡單工廠模式的進一步抽象和推廣。4.由于使用了多態(tài),工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了缺點。缺點:1.由于每加一個產品,就需要加一個產品工廠的類,增

9、加了額外的工作量。2.沒有避免修改客戶端的代碼。3.反射避免分支判斷問題何時采用:工廠方法模式是new一個對象的替代品,所以在所有需要生成對象的地方都可以使用,但是需要慎重地考慮是否要增加一個工廠類進行管理,增加代碼的復雜度。其次,需要靈活的、可擴展的框架時,可以考慮用工廠方法模式?!驹湍J健恐付▌?chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。原型模式其實就是從一個對象再創(chuàng)建另外一個可定制的對象,而且不需要知道任何創(chuàng)建的細節(jié)。結構圖:優(yōu)點:1 性能優(yōu)良:原型模型是在內存二進制流的拷貝,要比直接new一個對象性能好很多,特別是要在一個循環(huán)體內產生大量的對象時,原型模型可以更好地體現其優(yōu)點。2

10、 逃避構造函數的約束:這既是它的優(yōu)點也是缺點,直接在內存中拷貝,構造函數是不會執(zhí)行的,優(yōu)點就是減少了約束,缺點也是減少了約束,需要大家在實際應用時考慮。何時采用:1 資源優(yōu)化場景:類初始化需要消化非常多的資源,這個資源包括數據、硬件資源等。2 性能和安全要求的場景:通過new產生一個對象需要非常頻繁的數據準備或訪問權限,則可以使用原型模式。3 一個對象多個修改者的場景:一個對象需要提供給其他對象訪問,而且各個調用者可能都需要修改其值時,可以考慮使用【模版方法】定義一個操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟結構圖:優(yōu)點:

11、1.模板方法模式是通過把不變行為搬移到超類,去除子類中的重復代碼。2.模板方法模式提供了一個很好的代碼復用平臺。遇到由一系列步驟構成的過程,這些過程從高層次上看是相同的,但有些步驟的實現不同,考慮用模板方法模式。3. 當不變和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重復出現。通過模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重復的不變行為的糾纏。缺點:按照我們的設計習慣,抽象類負責聲明最抽象、最一般的事物屬性和方法,實現類完成具體的事物屬性和方法。但是模版方法模式卻顛倒了,抽象類定義了部分抽象方法,由子類實現,子類執(zhí)行的結果影響了父類的結果,也就是子類對

12、父類產生了影響,這在復雜的項目中,會帶來代碼閱讀的難度,而且也會讓新手產生不適感。何時采用:1 多個子類有公有的方法,并且邏輯基本相同時。2 重要、復雜的算法,可以把核心算法設計為模版方法,周邊的相關細節(jié)功能則由各個子類實現【外觀模式】為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 按住Ctrl鍵并單擊我可以查看代理模式、外觀模式、適配器模式的相同點結構圖:優(yōu)點:1. 減少系統的相互依賴2. 提高了靈活性3. 提高安全性缺點:不符合開閉原則何時采用:1.在設計初期階段,應該要有意識的將不同的兩個層分離,層與層之間建立外觀類(Facade)

13、,這樣就可以為復雜的子系統提供一個簡單的接口,使得耦合大大降低。2.在開發(fā)階段,子系統往往因為不斷的重構演化而變的越來越復雜,給外部調用它們的用戶帶來困難。增加外觀類可以提供一個簡單的接口,減少它們之間的依賴。3. 在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴展了,但新的需求開發(fā)必須依賴它。為新系統開發(fā)一個外觀類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰的簡單接口,讓新系統和Facade對象交互,Facade與遺留代碼交互所有復雜的工作?!窘ㄔ煺摺繉⒁粋€復雜對象的構建與它的表示分離,使得同樣的構造過程可以創(chuàng)建不同的表示。結構圖:優(yōu)點:使得建造代碼與表示代碼分離,由于建造者隱

14、藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。何時采用:主要用于創(chuàng)建一個復雜的對象,這些對象內部構建間的構造順序通常是穩(wěn)定的,但對象內部的構建通常面臨著復雜的變化。【觀察者】 定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己結構圖:優(yōu)點:將一個系統分割成一系列相互協作的類有一個很不好的副作用,那就是需要維護相關對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴展和重用都帶來不便。缺點:開發(fā)效率和運行效率不高何時采用:1個對象的改

15、變需要同時改變其他對象的時候。而且它不知道具體有多少對象有待改變時,應該考慮使用觀察者模式。2.抽象模型有兩個方面,其中一方面依賴另一方面,這時用觀察者模式可以將這兩者封裝在獨立的對象中使它們各自獨立的改變和復用。【抽象工廠】提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 按住Ctrl鍵并單擊我可以查看三個工廠模式的相同點結構圖:優(yōu)點:1交換產品系列,由于具體工廠類,在一個應用中只需要初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。2.體的創(chuàng)建實例過程與客戶端分離,客戶端是通過它們的抽象接口操縱實例,產品的具體

16、名也被具體工廠的實現分離,不會出現在客戶代碼中。缺點:1.加功能增加一個項目表Project2.三個類IProject、SqlserverProject、AccessProject3.三個類IFactory、SqlserverFactory、AccessFactory(增加創(chuàng)建方法)4.端程序類類似這樣的類,即需要調用數據庫訪問的類,不會僅有一個,有很多地方都在使用IUser或是IDepartment。5.用到數據庫訪問的時候,都要聲明IFactory factory=new SqlserverFactory(),若有100個調用數據庫訪問的類,需要修改100次。6.大批量的改動。何時采用:一

17、個對象群都有相同的約束,則可以采用抽象工廠模式【狀態(tài)模式】當一個對象的內在狀態(tài)改變時允許改變其行為,這個對象看起來像改變了其類。結構圖:優(yōu)點:將與特定狀態(tài)相關的行為局部化,并且將不同狀態(tài)的行為分割開來。即將特定狀態(tài)的相關行為都放入一個對象中(ConcreteState),由于所有與狀態(tài)相關的代碼都存放在某個ConcreteState中,所以通過定義新的子類可以很容易地增加新的狀態(tài)和轉換。消除龐大的條件分支。狀態(tài)模式通過把各種狀態(tài)轉移邏輯分布到State的子類之間,來減少相互間的依賴。缺點:子類太多何時采用:1.個對象的行為取決于它的狀態(tài),并且它必須在運行時刻根據狀態(tài)改變它的行為時。2.某項業(yè)務

18、有多個狀態(tài),通常都是一些枚舉常量,狀態(tài)的變化都是依靠大量的多分支判斷語句來實現,此時應該考慮將每一種狀態(tài)定義為State的子類。這樣這些對象就可以不依賴于其他對象而獨立變化,也可以很好的面對需求的改變?!具m配器模式】將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 按住Ctrl鍵并單擊我可以查看代理模式、外觀模式、適配器模式的相同點結構圖:優(yōu)點:1. 適配器模式可以讓兩個沒有任何關系的類在一起運行,只要適配器這個角色能夠搞定他們就行。2. 增加了類的透明性3. 提高了類的復用度4. 靈活性非常好:某一天,突然不想要適配器,

19、沒問題,刪除掉就ok,其他的代碼不用修改。何時采用:1.一個已經存在的類,但若它的接口,也就是它的方法和你的要求不相同時,就應該使用適配器模式2.類所做的事情相同或相似,但是具有不同的接口時要使用它3.代碼可以統一調用同一接口,使得客戶端更簡單、更直接、更緊湊?!緜渫洝吭诓黄茐姆庋b性的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復到原先保存的狀態(tài)。結構圖:何時采用:1適用于功能比較復雜的,但需要維護或記錄屬性歷史的類,或者需要保存的屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memento信息還原到前一狀態(tài)。2.式也有類似的撤銷作用

20、。若在某個系統中使用命令模式時,需要實現命令的撤銷功能,可以使用備忘錄模式來存儲可撤銷操作的狀態(tài)。3. 有時一些對象的內部信息必須保存在對象以外的地方,但是必須要由對象自己讀取,這時,使用備忘錄可以把復雜的對象內部信息對其他的對象屏蔽起來,從而恰當的保持封裝的邊界?!窘M合】將對象組合成樹形結構以表示“部分整體”的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性結構圖:優(yōu)點:1. 高層模塊調用簡單2. 節(jié)點自由增加缺點:違反了依賴倒轉原則何時采用:1.中體現部分與整體層次的結構時。2.用戶可以忽略組合對象與單個對象的不同,統一地使用結構中的所有對象時。【迭代器】提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。結構圖:何時采用:平時編程的for就是迭代器模式,還有Iterable接口,其實平時我們就在用這個模式,有沒有感覺棒棒的【單例】保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。結構圖:優(yōu)點:1保證唯一的實例。2 . 因為Singleton類封裝它的唯一實例,這樣它可以嚴格地控制客戶怎

溫馨提示

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

評論

0/150

提交評論