1.1 設(shè)計(jì)原則 在進(jìn)行應(yīng)用系統(tǒng)的設(shè)計(jì)時(shí),一般遵循以下幾個(gè)原則: Ø “開放-封閉”原則:系統(tǒng)應(yīng)該對(duì)擴(kuò)展(extension)開放,同時(shí)對(duì)修改(change)封閉。 盡量避免重新編譯,判斷是否遵守這個(gè)原則的一個(gè)簡(jiǎn)單實(shí)用的標(biāo)志就是“在做擴(kuò)展時(shí),軟件本身不必重新編譯,甚至擴(kuò)展部分再擴(kuò)展也不必重新編譯”。 Ø 依賴倒轉(zhuǎn)原則:針對(duì)抽象(如接口),而不是針對(duì)實(shí)現(xiàn)編程。 接口是對(duì)象能響應(yīng)的請(qǐng)求的集合。只根據(jù)對(duì)象的接口來操作對(duì)象,它帶來的好處是: a) 客戶無須知道他們使用對(duì)象的特定類型,只須對(duì)象具有客戶所期望的接口; b) 客戶無須知道他們使用的對(duì)象是如何實(shí)現(xiàn)的,只須知道定義接口的抽象類。 這將大大減少子系統(tǒng)實(shí)現(xiàn)之間的相互依賴關(guān)系。 Ø 合成/聚合復(fù)用原則:優(yōu)先使用對(duì)象組合,而不是類繼承實(shí)現(xiàn)復(fù)用機(jī)制。 繼承破壞了封裝性,使得子類和父類具有緊密的依賴關(guān)系,且無法在運(yùn)行時(shí)刻改變對(duì)象的行為;相反,對(duì)象組合要求對(duì)象遵守彼此的接口約定,不破壞封裝性,對(duì)象之間具有較少的依賴關(guān)系,可以在運(yùn)行時(shí)動(dòng)態(tài)改變行為。因此,優(yōu)先使用對(duì)象組合有助于我們?cè)O(shè)計(jì)靈活的、可復(fù)用的軟件。 Ø 客戶請(qǐng)求是使對(duì)象執(zhí)行操作的唯一方法,操作又是對(duì)象改變內(nèi)部數(shù)據(jù)的唯一方法。 對(duì)象的內(nèi)部狀態(tài)是被封裝的,對(duì)外部不可見,不能被直接訪問。 1.2 具體實(shí)現(xiàn) 根據(jù)需求分析的結(jié)果,一般地采納需求分析的模塊劃分。明確模塊要實(shí)現(xiàn)的任務(wù),考察以下問題: Ø 模塊的任務(wù)是什么? Ø 這個(gè)模塊要與哪幾個(gè)模塊有交互關(guān)系,接口如何? Ø 這個(gè)模塊以何種形式提供? Ø 當(dāng)前構(gòu)件庫中的構(gòu)件是否能夠滿足要求,是否可以使用構(gòu)件庫中構(gòu)件? 如果系統(tǒng)與其它系統(tǒng)(如數(shù)據(jù)庫、中間件等)有數(shù)據(jù)交互,必須明確如下問題: Ø 在完成什么任務(wù)時(shí),要與其它系統(tǒng)發(fā)生交互? Ø 交互數(shù)據(jù)格式是什么? Ø 其它系統(tǒng)有沒有提供調(diào)用的接口? Ø 如果有,是如何調(diào)用? Ø 如果沒有,本系統(tǒng)要做什么樣的額外設(shè)計(jì)? 根據(jù)需求,把交互的細(xì)節(jié)加入到用戶界面的設(shè)計(jì)中,包括有效的人機(jī)交互所必需的實(shí)際顯示和輸入,如Windows窗口,Web頁面。界面設(shè)計(jì)主要由以下幾個(gè)方面組成。 (1) 用戶按角色分類。 (2) 描述人及其任務(wù)的場(chǎng)景。對(duì)以上定義角色,列出對(duì)以下問題的考慮:什么角色,目的,特點(diǎn),過程,結(jié)束標(biāo)記。 (3) 界面行為設(shè)計(jì):首先,根據(jù)人機(jī)交互活動(dòng)的準(zhǔn)則,對(duì)處理過程自頂而下,逐步分解,設(shè)計(jì)出可用的操作。其次,排列操作層次,把使用最頻繁的操作放在前面,按照用戶的工作步驟排列。再次,組織所有操作,利用菜單或工具條或按鈕,菜單或功能樹的深度不要超過3層。最后,考察是否在完成必須任務(wù)的前提下,把用戶的操作(如點(diǎn)取,拖動(dòng)等)減到最少,去除多余的操作。 (4) 完善用戶界面:確定界面布局,字型,顏色等。這部分工作也可暫緩,一般由 美工完成。 發(fā)現(xiàn)類的主要途徑是通過從需求規(guī)格說明書中抽取關(guān)鍵性的名詞和短語,通過尋找應(yīng)用領(lǐng)域中物理對(duì)象、概念實(shí)體和外部接口的名詞和更大范疇的對(duì)象來建立候選類表,對(duì)象的屬性和候選的超類也在此時(shí)標(biāo)識(shí)出來,以形成繼承關(guān)系的初步層次結(jié)構(gòu)。面向?qū)ο蟮脑O(shè)計(jì)過程開始于發(fā)現(xiàn)類和對(duì)象,它們形成我們的問題領(lǐng)域的詞匯,它停止于我們發(fā)現(xiàn)沒有新的簡(jiǎn)單的抽象和結(jié)構(gòu)時(shí),或者停止于我們已發(fā)現(xiàn)的類和對(duì)象可以通過從存在的可重用的軟件部件組合實(shí)現(xiàn)時(shí)。 通過考慮每個(gè)類的目標(biāo)來發(fā)現(xiàn)類的任務(wù),并把任務(wù)分配給類。通過在需求規(guī)格說明書中找出動(dòng)詞,可以找到軟件系統(tǒng)中類的行為;無論何時(shí)提到信息,信息必然可以被歸入一個(gè)類中去。要精煉每個(gè)類的用途以詳細(xì)說明任務(wù),還要找出類與類之間的相互關(guān)系。試著均勻地把責(zé)任分配給各個(gè)類,把行為盡可能的分散給各個(gè)類。分配責(zé)任要做到系統(tǒng)的負(fù)擔(dān)均勻分布,行為與相關(guān)的信息封裝在一起,任務(wù)由相關(guān)的類分擔(dān)。 建議采用用例分析,根據(jù)用例來發(fā)現(xiàn)類。 邊界是一種用于對(duì)系統(tǒng)外部環(huán)境與其內(nèi)部運(yùn)作之間的交互進(jìn)行建模的類。常見的邊界類有窗口、通信協(xié)議、打印機(jī)接口、傳感器和終端。如果您在使用 GUI 生成器,您就不必將按鈕之類的常規(guī)接口部件作為單獨(dú)的邊界類來建模。通常,整個(gè)窗口就是最精制的邊界類對(duì)象。邊界類還有助于獲取那些可能不面向任何對(duì)象的 API(例如遺留代碼)的接口。 邊界類幫助系統(tǒng)接口與系統(tǒng)外部進(jìn)行交互。邊界對(duì)象將系統(tǒng)與其外部環(huán)境的變更(與其他系統(tǒng)的接口的變更、用戶需求的變更等)分隔開,使這些變更不會(huì)對(duì)系統(tǒng)的其他部分造成影響。 一個(gè)系統(tǒng)可能會(huì)有多種邊界類: Ø 用戶界面類 - 幫助與系統(tǒng)用戶進(jìn)行通信的類。 Ø 系統(tǒng)接口類 - 幫助與其他系統(tǒng)進(jìn)行通信的類。 Ø 設(shè)備接口類 - 為用來監(jiān)測(cè)外部事件的設(shè)備(如傳感器)提供接口的類。 控制類用于對(duì)一個(gè)或幾個(gè)用例所特有的控制行為進(jìn)行建模。控制類一般獨(dú)立于環(huán)境(不隨環(huán)境的變更而變更),用于確定用例中的控制邏輯(事件順序)和事務(wù),在實(shí)體類的內(nèi)部結(jié)構(gòu)或行為發(fā)生變更的情況下,幾乎不會(huì)變更??刂祁愂褂没蛞?guī)定若干實(shí)體類的內(nèi)容,因此需要協(xié)調(diào)這些實(shí)體類的行為。 因此控制類不是每次被激活后都以同樣的方式執(zhí)行??刂茖?duì)象(控制類的實(shí)例)通常用于控制其他對(duì)象,因此它們的行為具有協(xié)調(diào)性質(zhì)。控制類將用例的特有行為進(jìn)行封裝。 實(shí)體類是用于對(duì)必須存儲(chǔ)的信息和相關(guān)行為建模的類。一個(gè)實(shí)體對(duì)象通常不是某個(gè)用例實(shí)現(xiàn)所特有的;有時(shí),一個(gè)實(shí)體對(duì)象甚至不專用于系統(tǒng)本身,其屬性和關(guān)系的值通常由主角指定,執(zhí)行系統(tǒng)內(nèi)部任務(wù)時(shí)也可能要使用實(shí)體對(duì)象。實(shí)體對(duì)象的行為可以和其他對(duì)象構(gòu)造型的行為一樣復(fù)雜,但是,與其他對(duì)象不同的是,這種行為與實(shí)體對(duì)象所代表的現(xiàn)象具有很強(qiáng)的相關(guān)性。實(shí)體對(duì)象是獨(dú)立于環(huán)境(主角)的,實(shí)體對(duì)象代表了開發(fā)中的系統(tǒng)的核心概念。例如,在銀行系統(tǒng)中,實(shí)體類的典型示例是賬戶和客戶。 使用不同的關(guān)系類型,如類之間的繼承關(guān)系,實(shí)例關(guān)系和使用關(guān)系;定義對(duì)象之間的結(jié)構(gòu)的動(dòng)態(tài)和靜態(tài)語義;決定類和對(duì)象之間的可見性。設(shè)計(jì)過程中要不斷重復(fù)這一步。 Ø 這個(gè)類需要與誰合作以完成它的任務(wù)? Ø 哪些其他的類需要這個(gè)結(jié)果? Ø 誰需要利用這個(gè)類的任務(wù)? Ø 這個(gè)類會(huì)在何種情形下實(shí)例化? Ø 實(shí)例化對(duì)象是一個(gè)還是多個(gè)? 1.3 表現(xiàn)方法和工具 根據(jù)軟件設(shè)計(jì)的要求,可以使用的Case工具有Microsoft Visio 2003、Rose等。 1.4 完成設(shè)計(jì)文檔 基本設(shè)計(jì)階段完成后,應(yīng)完成基本設(shè)計(jì)書。在基本設(shè)計(jì)書中,必須說明模塊組織。也要說明用戶界面設(shè)計(jì)和與其他系統(tǒng)交互接口設(shè)計(jì)(如果有,尤其是與數(shù)據(jù)庫的交互)。一般地,也要說明各個(gè)模塊的核心類和接口,類的主要屬性和方法,及其相互關(guān)系。 |
|