不定項選擇題:

1.一個軟件產品是否成功,因素有(        )。

l         需求收集是否正確

l         體系結構的構建是否合理

l         測試是否完全

l         軟件的管理

2.開發過程中最困難的一個環節是(        )。

人與人之間的交流    

3.用例是從(   用户    )的觀點對系統行為的一個描述。

4.順序圖所表達的是基於(    時間順序    )的動態交互。

5.當需要在項目中定製自己的元素時,可使用(    構造型來定製    )。

6.表示一個操作中的參數和返回值的數據類型的稱呼是(  形構      )。

7.多重性5,10表示(    5或者10    )。

8.在找出了類的繼承關係後,通常可以用(   接口     )來表示最上層的基類。

9.UML中的實現是一種特殊類型的繼承,因為它是指從一個(     接口   )繼承。

10.使用用例的難點在於(   用例中各個場景的具體步驟    )。

11.收集用例的方法是(    交談    )。

12.產生類圖和得到用例這兩個步驟,位於前面的是(  沒有固定順序      )。

13.面向對象理論中,對象之間發送信號,在UML狀態圖裏就是(   事件     )。

14.順序圖中,動態創建對象表示法的特點是(是在時間線上的某一點創建,結束時尾部打X)。

15.當代軟件工程的特點是(        )。

l         允許各個階段進行迭代

l         各個階段沒有明顯的分界線

l         允許後期得到的信息返回,使得早期的能夠被修改。

16.GRAPPLE

中最重要的段是(        )。

l         需求收集

l         需求分析

l         用例開發

l         編碼

l         測試

17.設計模式的基本要素有(   名稱,目的(意圖),解決方案,實施後達到的效果     )。

18.當我們想創建一個具體的對象而又不希望指定具體的類時,可以使用(    創建性    )模式。

19.當我們想將抽象部分和實現部分分離時,可以使用(    橋接    )模式。

20.當我們想用不同的請求對客户進行參數化時,可以使用(    命令    )模式。

21.當我們想封裝不同算法並使它們可相互替換時,可以使用(      策略  )模式。

22.面向對象系統中功能複用的兩種最常用技術是(        )。

l         對象組合(優先使用)

l         類繼承(限制使用類繼承)->產生類爆炸

23.面向對象系統中的“黑盒複用”是指(    對象組合    )。

24.對象組合是通過獲得(    抽象類的指針    )而在運行時刻動態定義的。

25.設計模式中應優先使用的複用技術是(    對象組合    )。

26.在Lexi系統中,我們把所有文檔元素都看作是圖元,這樣,它們就有了相同的(   接口(也叫類型)     )。

27.Lexi系統中,我們之所以能對文檔採用Composite模式,是因為文檔的元素之間有

(    遞歸(樹型結構)   )關係。


 

填空題:

1.軟件體系結構是指一個系統的有目的的設計和規劃,這個設計規劃既不描述    活動    ,也不描述        系統怎樣開發      ,它只描述系統的      組成元素    及其相互的     交互協作       

2.一個UML模型只描述了一個系統     要做什麼       ,它並沒告訴我們系統是             怎麼做         

3.接口是可以在整個模型中反覆使用的一組行為,是一個沒有  屬性     而只有 方法      的類。

4.多重性指的是,某個類有       多個   個對象可以和另一個類的      1    對象關聯。

5.當一個類的對象可以充當多種角色時,      自身    關聯就可能發生。

6.在泛化關係中,    子類    可以替代 父類      。也就是説,後者出現的地方,前者都可以出現。但是反過來卻不成立。

7.最通常的依賴關係是一個類操作的    形構      中用到了     另一個類         的定義。

8.組成是    強類型      的聚集,因為聚集中的每個部分體只能屬於     一個     整體。

9.實現的符號和繼承的符號有相似之處,兩者的唯一差別是實現關係用   虛線       表示,繼承關係用        實線    表示。

10.UML背後的兩個重量級概念是    用例               面向對象           

11.狀態圖和類圖、順序圖不同之處在於,後兩種圖能夠對     多個對象                  建立模型,而狀態圖只是對       1個對象        建立模型。

12.狀態圖中3個常用的動作是       入口動作             出口動                 do動作,也就是對象處於這個狀態時應該做什麼      

13.順序圖中,消息用         水平箭頭線         表示;時間用   垂直虛線                  表示。

14.當邏輯發生分支時,在順序圖中用          生命線發生的分支                      表示,在協作圖中用          嵌套的序號                      表示。

15.順序圖強調的是交互的         時間順序    ,協作圖強調的是交互的   空間關係     和參與交互的對象的        上下文環境      


 

16.GRAPPLE

把開發過程分為5個       ,之中又由許多      動作      組成。

17.GRAPPLE

過程中,得到初步類圖是在   需求收集       段,細化類圖是在     需求分析       段。

18.每一個設計模式都集中於一個特定的                 設計問                    ,描述了    相互通信的對象或者類                                                                     以及      解決方案                 解決效果           

19.面向對象系統中功能複用的兩種最常用技術是        對象組合               類繼承     

20.設計模式中應優先使用      對象組合            而不是     類繼承         

 


 

簡答題

1.  類圖在UML中有何重要作用?

答: 1.為開發人員提供這種模仿現實世界的表達方式。

2.讓分析員使用客户所採用的術語和客户交流,促使客户説出所要解決的問題的重要細節。


 

2.闡述用例對於系統開發人員來説的價值。

答:

是用來從用户的觀察角度收集系統需求的一項技術,便於分析員與客户和用户交流,使系統更符合用户的需求


 

3.簡述如何在實際工作中發現類。

答:在與客户的交談中,要注意客户用來描述業務實體的名詞術語。這些名詞可作為領域模型中的類。

還要注意你聽到的動詞,因為這些動詞可能會構成這些類中的操作。

當得到一組類的核心列表後,應當向客户詢問在業務過程中每個類的作用。他們的回答將告訴你這些類的職責。


 


 

4.簡述怎樣發現類之間的繼承關係。

答:

作為候選的類有可能和它的父類、子類在談話中同時被發現。系統分析員意識到某個類的屬性和操作也許能被運用到其他多個類當中去。

另一種可能的情況是系統分析員注意到兩個或者多個類可能具有相同的屬性和操作數


 


 

5.試使用UML的關係表示法,表示出大學計算機專業中如下這些課程的模型:C語言程序設計、C++語言程序設計、Windows程序設計、網絡程序設計。注意抽象類和依賴的使用。


 


 

6.畫出圖形用户界面GUI的狀態圖,要包括屏幕保護狀態。其中要表明相應的事件、動作。

答:圖形用户界面(GUI)是一個可以説明狀態轉移細節的例子。在這裏,假設GUI可以處於以下3種狀態之一:

        Initializing(初始化)。

        Working(工作)。

        Shut Down(關閉)。

        當打開PC電源的時候,自啓動發生。因此Turning the PC on(打開PC)是一個觸發器事件,它導致了GUI的狀態轉移到Initializing狀態,而Bootup(自啓動)是一個在轉移過程中執行的動作。

由於Initializing狀態中活動的完成,GUI將轉移進入Working狀態。當你對PC選擇ShutDown(關閉機器)時,就引發了Shut Down觸發器事件,最後PC自己切斷電源,整個過程結束。下面的狀態圖捕獲了GUI的這些狀態和轉移。

下圖是GUI加入

了Screensaving狀態和保護條件的狀態圖,注意圖中的保護條件[is Timeout],被寫成一個布爾表達式。

7.順序圖和協作圖中,消息有哪三種?各自的意義和表示法什麼?

答: 消息可以是簡單的(simple)、同步的(synchronous)或異步的(asynchronous)。簡單消息是從—個對象到另一個對象的控制流的轉移。如果一個對象發送了—個同步消息,那麼它要等待對方對消息的應答,收到應答後才能繼續自己的操作。而發送異步消息的對象不需要等待對方的應答便可以繼續自己的操作。在順序圖中,簡單消息是—個簡單箭頭,同步消息是實心箭頭。異步消息是—個半邊箭頭,

8.畫出自動飲料銷售機中,理想場景和“錢數不正確”的場景合併在一起的順序圖

假設在飲料銷售機中有3個對象來做上述工作:前端(Front)(它是飲料銷售機與顧客之間的接口),錢幣記錄儀(Register)(它負責收集顧客投的錢幣),以及分配器(Dispenser)。我們還假設錢幣記錄儀控制分配器對象。那麼對象之間的交互序列可能如下所示:

        1.顧客向機器前端的槽縫中投入錢幣。

        2.顧客選擇所要購買的飲料品種。

        3.錢幣被轉送給記錄儀。

        4.由於這是一個理想情況下的場景,假設有飲料存貨,則記錄儀控制分配器將一罐飲料投遞到銷售機的前端。

由於上述對應的序列圖只覆蓋了用例“Buy soda”的一個場景(也就是一個實例),因此它被稱之為實例順序圖(instance sequence diagram)。下圖顯示了對應的實例順序圖。注意圖中只有簡單消息,每個消息都引起控制流程從一個對象轉移到另一個對象。


 

對於“錢數不正確”場景:

        1.記錄儀檢查顧客輸入的錢幣數星是否與所要購買的飲料價格匹配。

        2.如果輸入數量大於價格,則記錄儀計算兩者之間的差額並檢查機器中存有的金額。

        3.如果機器中剛好有能找給顧客的零錢,則記錄儀將零錢找給顧客,一切按正常情況繼續進行。

        4.如果沒有零錢找給顧客,則記錄儀退回顧客投入的錢幣,並顯示一個消息,提示顧客重新輸入數量正確的金額。

5.如果顧客所輸入的金額少於所要購買的飲料價格,則記錄儀什麼也不做,機器等待顧客繼續投入錢幣。

答:    為了表示順序圖中的每個“if”分支,可以將“if”選擇條件寫在方括號中,放到對應的消息箭頭上,即增加[input=price],[change in reserve]和[change not in reserve]3個選擇條件。

        每個條件都引起消息中的控制流的一個“分支”,將消息分為多條路徑。不同的消息路徑最終可以到達同—個對象。為了表達這種關係,接收對象的生命線

可分為多餘路徑。在消息序列的某一點上,信息的分支可以合併,生命線的路徑也是如此。下圖是加入了場景“錢數不正確”後的圖。


 

9.畫出自動飲料銷售機中,理想場景和“錢數不正確”的場景合併在一起的協作圖。

下面先來看看用例“Buy Soda(買飲料)”的最理想場景下的交互序列:

    1.顧客向機器前端的槽縫中投入錢幣。

    2.顧客做出一個選擇,選擇所要購買的飲料品種。

    3.錢幣被轉送給記錄儀。

    4.由於這是—個理想情況下的場景,所以記錄儀控制分配器將一罐飲料投遞到銷售機的前端。

這個場景的協作圖如下圖所示。


 

下面再看“錢數不正確”場景的協作圖。這個協作圖中要出現以下幾個條件:

        1.用户輸入的錢數超過了所要購買的飲料價格。

        2.飲料銷售機中備有可找給顧客的零錢。

        3.飲料銷售機中沒有可找給顧客的零錢。

        在協作圖中條件的表示方法與在順序圖中一樣,都是用方括號將條件表達式括起來,放在消息名的前面。但是要注意的是消息的條件和序號之間的匹配關係。

        條件和序號可能會使圖變得複雜,因此讓我們一步一步地來建立這個場景的協作圖,這個圖的前提條件是用户輸入的錢比所要購買的飲料價格高,並且機器中備有找給顧客的零錢。首先增加機器給顧客找零的消息,併為該消息附加上條件。給顧客找零消息是檢查是否有找給顧客的零錢這一消息的直接後續消息。為了表明兩條消息之間的這種關係,這兩個消息採用同一序號,用序號後面的點再接序號來區分它們。這叫做消息嵌套(nesting)。下圖説明了這個順序圖的細節。

如果機器中沒有零錢可找會怎麼樣呢?銷售機必須顯示一條“無零錢”信息提示給顧客,並將顧客投入的錢幣退出,提示顧客投入零錢。實際上,這時交易就結束了。

        要增加這個條件,就要增加控制流的分支。可以用嵌套序號表示這個控制流的序號。因為它是第2個被嵌套的消息,因此圓點後面的序號是2。最後,由於交易已經結束,該消息上要附加構造型《transaction over》來表明交易結束。此外還有另—個發送飲料的消息。下圖是這個場景的順序圖。


 

10.簡述接口對於構件的重要意義。

答:

只能通過構件的接口來使用構件中定義的操作。

構件可以讓它的接口被其他構件使用,以使其他構件可以使用這個構件中定義的操作。提供服務的構件提供了導出接口,訪問服務的構件使用了導入接口。


 

11.簡述當代面向對象軟件工程的特點和優點。

允許各個階段進行迭代

各個階段沒有明顯的分界線

允許後期得到的信息返回,使得早期的能夠被修改

重用性高、維護性好、擴展性高


 

12.GRAPPLE

過程中,需求收集段的各個動作是什麼?分別有什麼工作產品?

答:

1  發現業務過程

工作產品是一個或者一組能夠捕獲業務過程中的步驟和判定點的活動圖。

2  領域分析

工作產品是一個高層的類圖和會談記錄。

3  識別協作系統

工作產品是新建的系統的部署圖

4  發現系統需求

會議得到的工作產品是一個包圖。

5  將結果提交給客户

這個動作的工作產品視不同的組織而不同。

13.簡述類繼承和接口繼承的區別?我們應該儘量使用哪一種?

答:

類繼承根據一個對象的實現定義了另一個對象的實現。簡而言之,它是代碼和表示的共享機制。然而,接口繼承描述了一個對象什麼時候能被用來替代另一個對象。

類繼承是派生中的類將繼承父類的所有屬性和方法,並且可以在派生類裏添加自己的屬性和方法,而接口繼承則是在接口裏只定義接口的方法,沒有屬性,並且方法不能實現,只有在派生他的類才實現該方法。類繼承是編譯的時候新建對象,而接口實例是在運行時刻創建對象。我們應該儘量使用接口繼承,類繼承會產生類爆炸現象


 

14.只根據抽象類中定義的接口來操縱對象有什麼好處?

1) 客户無須知道他們使用對象的特定類型,只須對象有客户所期望的接口。

 2) 客户無須知道他們使用的對象是用什麼類來實現的,他們只須知道定義接口的抽象類。


 

15.可複用的面向對象設計的兩條原則是什麼?

1. 針對接口編程,而不是針對實現編程。不要將變量聲明為一個特定類的實例對象,而是讓他遵從抽象類所定義的接口

2.優先使用對象組合,而不是類繼承。


 

16.設計模式的兩大主題是什麼?

對象組合

類繼承的討論

17.面向對象系統中功能複用的兩種最常用技術是什麼?

面向對象系統中功能複用的兩種最常用技術是類繼承和對象組合(object composition)。


 

18.Lexi系統的格式化問題中,我們引入了Compositor和Composition兩個類來實現“策略”模式。請畫出這兩個類各自的繼承關係和它們之間的協作關係。

Compositor和Composition

Compositor類。它的接口(見下表)可讓Compositor獲知何時去格式化哪些圖元。它所格式化的圖元是一個被稱為Composition的特定圖元的各個子圖元。一個Composition在創建時得到一個Compositor子類實例,並在必要的時候(如用户改變文檔的時候)讓Compositor對它的圖元作Compose操作。

下圖描述了Composition類和Compositor類之間的關係。

19.Lexi系統的支持多種窗口平台的問題中,我們使用了Window和WindowsImp類來實現橋接模式。請畫出這兩個類各自的繼承關係和它們之間的協作關係。