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