




已閱讀5頁,還剩245頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1 面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟮拈_發(fā)過程面向?qū)ο蠓治雠c模型化面向?qū)ο笤O(shè)計面向?qū)ο蟪绦虻膶崿F(xiàn)與測試 面向?qū)ο蠹夹g(shù) 2 面向?qū)ο蟮母拍?開發(fā)模式什么是面向?qū)ο髮ο箢惱^承 3 開發(fā)模式 Paradigm 開發(fā)模式又稱為范型 范例 風(fēng)范或模式 Pattern 開發(fā)模式定義了特定問題和應(yīng)用的開發(fā)過程中將遵循的步驟 確定將用于表示問題和解的那些成分的類型 利用這些成分表示與問題解決有關(guān)的抽象 直接得到問題的結(jié)構(gòu) 4 開發(fā)模式的選擇影響到整個軟件開發(fā)生存期 就是說 它支配了設(shè)計方法編碼語言測試和檢驗技術(shù)的選擇 5 面向過程開發(fā)模式 面向過程開發(fā)模式產(chǎn)生過程的抽象 這些抽象的基礎(chǔ)是把軟件視為處理流 并定義成由一系列步驟構(gòu)成的算法 每一步驟都是帶有預(yù)定輸入和特定輸出的一個過程 把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個程序的控制流 最終產(chǎn)生一個簡單的具有靜態(tài)結(jié)構(gòu)的體系結(jié)構(gòu) 6 面向過程開發(fā)模式的特點 過程性開發(fā)模式側(cè)重建立構(gòu)成問題解決的處理流 數(shù)據(jù)抽象 數(shù)據(jù)結(jié)構(gòu)根據(jù)算法步驟的要求開發(fā) 它貫穿于過程 提供過程所要求操作的信息 系統(tǒng)的狀態(tài)是一組全局變量 這組全局變量保存狀態(tài)的值 把它們從一個過程傳送到另一個過程 7 8 Initializesystem Createanddrawinterface whileQUITnotselecteddocase 9 Mouseevent createshapestructure readmousemovementsfordata storenewlycreatedshapeonlistofshaperecords KeyPressevent ifkey q thenexitloop elseignore Ecposeevent refreshdisplaybydrawingeachshapestructure Shutdownsystem 10 面向?qū)ο箝_發(fā)模式 在面向過程開發(fā)模式中優(yōu)先考慮的是過程抽象 在面向?qū)ο箝_發(fā)模式中優(yōu)先考慮的是實體 問題論域的對象 在面向?qū)ο箝_發(fā)模式中 把標(biāo)識和模型化問題論域中的主要實體做為系統(tǒng)開發(fā)的起點 主要考慮對象的行為而不是必須執(zhí)行的一系列動作 11 面向?qū)ο箝_發(fā)模式的特點 面向?qū)ο笙到y(tǒng)中的對象是數(shù)據(jù)抽象與過程抽象的綜合 系統(tǒng)的狀態(tài)保存在各個數(shù)據(jù)抽象的所定義的數(shù)據(jù)存儲中 控制流包含在各個數(shù)據(jù)抽象中的操作內(nèi) 在面向?qū)ο篌w系結(jié)構(gòu) 消息從一個對象傳送到另一個對象 算法被分布到各種實體中 12 13 其它流行的開發(fā)模式 目前流行多種開發(fā)模式 它們提供了許多方法 可進(jìn)行系統(tǒng)分解 面向過程的 邏輯的 面向存取的 面向進(jìn)程的 面向?qū)ο蟮?函數(shù)型的 說明性的 14 每個開發(fā)模式都有它的支持者和用戶 每個開發(fā)模式都特別適合于某種類型的問題或子問題 每一個開發(fā)模式都用不同的方式考慮問題 每一個開發(fā)模式都使用不同的方法來分解問題 每一個開發(fā)模式都導(dǎo)致不同種類的塊 過程 產(chǎn)生規(guī)則 15 混合開發(fā)模式 在大型系統(tǒng)的開發(fā)中 很難說哪種開發(fā)模式對整個問題的解決最好 系統(tǒng)開發(fā)時 通常把大型問題分解成一組子問題 對于每個子問題可以采用適當(dāng)?shù)能浖_發(fā)模式 這種設(shè)計需要有某種實現(xiàn)語言或一組協(xié)同語言的支持 許多流行的功能不斷增強(qiáng)的語言可支持不只一種設(shè)計開發(fā)模式 16 一個智能數(shù)據(jù)分析系統(tǒng)的設(shè)計 可把它看做是4個子系統(tǒng) 系統(tǒng)有一個數(shù)據(jù)庫界面 可以使用面向存取的方法進(jìn)行設(shè)計 智能數(shù)據(jù)分析用邏輯性的開發(fā)模式設(shè)計 一組分析算法是過程性的 用戶界面是用面向?qū)ο箝_發(fā)模式設(shè)計出來的 17 什么是面向?qū)ο?Coad和Yourdon給出了一個定義 面向?qū)ο?對象 類 繼承 通信 如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計和實現(xiàn)的 則我們認(rèn)為這個軟件系統(tǒng)是面向?qū)ο蟮?一個面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對象 計算是通過新的對象的建立和對象之間的通信來執(zhí)行的 18 對象 object 對象是面向?qū)ο箝_發(fā)模式的基本成份 每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義 屬性一般只能通過執(zhí)行對象的操作來改變 操作又稱為方法或服務(wù) 它描述了對象執(zhí)行的功能 若通過消息傳遞 還可以為其它對象使用 19 消息 Message 消息是一個對象與另一個對象的通信單元 是要求某個對象執(zhí)行類中定義的某個操作的規(guī)格說明 發(fā)送給一個對象的消息定義了一個方法名和一個參數(shù)表 可能是空的 并指定某一個對象 一個對象接收的消息則調(diào)用消息中指定的方法 并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來 20 21 22 類 class 類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合 類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作 類定義可以視為一個具有類似特性與共同行為的對象的模板 可用來產(chǎn)生對象 23 在一個類中 每個對象都是類的實例 Instance 它們都可使用類中提供的函數(shù) 對象的狀態(tài)則包含在它的實例變量 即實例的屬性中 24 類 兩個四邊形對象 25 Quadrilateral類的每個對象有同樣的一組實例變量和方法 就這個意義來講 類Quadrilateral給我們提供了一個模板 表示了所有四邊形對象 類常??煽醋鍪且粋€抽象數(shù)據(jù)類型 ADT 的實現(xiàn) 但更合適的是把類看做是某種概念的模型 26 類的實現(xiàn)常常使用其它類的實例 它們提供了該類所需要的服務(wù) 這些實例應(yīng)當(dāng)受到保護(hù)不被其它對象存取 包括同一個類的其它實例 在四邊形的例子中 定義4個point類的實例作為Quadrilateral類的實例的4個頂點 這些point對象不能被其它對象存取 27 繼承 Inheritance 繼承是使用已存在的定義做為基礎(chǔ)建立新定義的技術(shù) 新類的定義可以是既存類所聲明的數(shù)據(jù)和新類所增加的聲明的組合 新類復(fù)用既存的定義 而不要求修改既存類 既存類可當(dāng)做基類來引用 則新類相應(yīng)地可當(dāng)做派生類來引用 28 29 使用繼承設(shè)計一個新類 可以視為描述一個新的對象集 它是既存類所描述對象集的子集合 這個新的子集合可以認(rèn)為是既存類的一個特殊化 Quadrilateral類是Polygon類的特殊化 Quadrilateral是限制為四條邊的多邊形 我們還可以進(jìn)一步地把類Quadrilateral特殊化為Rectangle 30 類Quadrilateral的界面可以等同于類Polygon的界面 而Rectangle類的界面又與Quadrilateral類的界面相同 新類的界面還可以被看做是既存類界面的一個擴(kuò)充界面 例如 從一個既存的車輛類派生的四輪驅(qū)動車類可能不僅是車輛類子集合定義的特殊化 而且還可能在新類的界面中引入新的能力 31 類的繼承層次 32 在類的繼承層次中 Quadrilateral的實際參數(shù)可以替換Polygon的形式參數(shù) 類Quadrilateral的界面與類Polygon的界面是相容的Quadrilateral的界面可響應(yīng)Polygon界面的所有消息 33 面向?qū)ο蠓椒ǖ拈_發(fā)過程 面向?qū)ο蠓椒ǜ倪M(jìn)了在生存期各個階段之間的接口 因為在生存期各個階段所開發(fā)出來的 部件 都是類 在面向?qū)ο笊嫫诘母鱾€階段對各個類的信息進(jìn)行細(xì)化 類成為分析 設(shè)計和實現(xiàn)的基本單元 34 應(yīng)用生存期 35 類生存期 36 復(fù)用 Reusable 在軟件開發(fā)中 復(fù)用扮演了重要角色 軟件部件應(yīng)當(dāng)獨立于當(dāng)初開發(fā)它們的應(yīng)用而存在 部件的開發(fā)瞄準(zhǔn)某些局部的設(shè)計和實現(xiàn) 它們能夠幫助當(dāng)前問題的解決 但為了在以后的項目中使用 它們還應(yīng)當(dāng)足夠通用 37 類就是一個希望能夠復(fù)用的單元 因此 提出了一個 類生存期 類生存期是與應(yīng)用生存期是交叉的 即就是說 類的標(biāo)識是應(yīng)用生存期的一個階段 但類生存期的步驟獨立于任一特殊應(yīng)用的開發(fā) 類的開發(fā)應(yīng)能完整地描述一個基本實體 而不僅僅考慮當(dāng)前正在開發(fā)的系統(tǒng) 38 類的定義 一旦標(biāo)識了一個類 就給出了它的規(guī)格說明 其中包括類的實例可執(zhí)行的操作和它們的數(shù)據(jù)表示 對每一個 無論是在哪一個階段標(biāo)識的類都是如此 對于那些使應(yīng)用與數(shù)據(jù)庫交互的類來說 其規(guī)格說明應(yīng)當(dāng)包括查找數(shù)據(jù)庫和向數(shù)據(jù)庫加入數(shù)據(jù)的行為 39 類的規(guī)格說明定義了施加于對象的數(shù)據(jù)存儲上的一組操作 這組操作應(yīng)工作在封裝在對象內(nèi)部的數(shù)據(jù)存儲上 或返回關(guān)于對象狀態(tài)的信息 操作的名字應(yīng)能反映這個操作本身的含義 40 類的設(shè)計與實現(xiàn) 類的規(guī)格說明可指導(dǎo)對存放既存類的軟件庫進(jìn)行查找 這些既存類可用來提供為當(dāng)前應(yīng)用所需要的功能 三個可能的利用既存類的方向 開發(fā)過程可能依賴于這種查找的結(jié)果 既存類的復(fù)用從既存類進(jìn)行演化從廢棄型進(jìn)行開發(fā) 41 實現(xiàn) 通過變量的聲明 操作界面的實現(xiàn)及支持界面操作的函數(shù)的實現(xiàn) 可實現(xiàn)一個類的預(yù)期行為和狀態(tài) 實現(xiàn)是與語言有關(guān)的 一個好的面向?qū)ο笳Z言應(yīng)當(dāng)分離共有界面與其內(nèi)部實現(xiàn) 采取必要措施分別編譯界面和內(nèi)部表示 42 測試 單個的類為測試提供了自然的單元 如果類的定義提供的界面比較狹窄 那么窮舉測試就有可能實現(xiàn) 類的測試在最抽象的層次開始 沿繼承關(guān)系繼續(xù)向下進(jìn)行 已經(jīng)測試過的部分不需要從新測試 重點放在對新類的測試和組裝測試 43 求精和維護(hù) 這是一個在軟件生存期中最花費時間的部分 傳統(tǒng)的維護(hù)活動是針對應(yīng)用的 而求精過程是針對類 針對把類集成在一起的結(jié)構(gòu) 我們可以標(biāo)識抽象的抽象 使得繼承結(jié)構(gòu)通過一般化增加新的層次 即在既存的根類之上增加新的層次 44 概念的封裝和實現(xiàn)的隱蔽 概念的封裝和實現(xiàn)的隱蔽 使得類具有更大的獨立性 在任一時刻都可以在類的界面上增加新的操作 并能夠修改實現(xiàn) 以改進(jìn)性能 或引入原來設(shè)計中沒有的新服務(wù) 為便于類的調(diào)整 應(yīng)盡量做到定義與實現(xiàn)分離 對一個類的共有界面的實現(xiàn)所做的多次修改不應(yīng)影響利用它的那些類 45 面向?qū)ο蠓治雠c模型化 面向?qū)ο蠓治鍪擒浖_發(fā)過程中的問題定義階段 這一階段最后得到的是對問題論域的清晰 精確的定義 分析階段包括兩個步驟 論域分析和應(yīng)用分析 它們都要標(biāo)識問題論域中的抽象 46 在分析中 需要找到特定對象基于對象的公共特性組合它們標(biāo)識出對這個問題的抽象在分析階段中要標(biāo)識抽象之間的關(guān)系這些關(guān)系在應(yīng)用系統(tǒng)中常常用對象之間的消息來表示 叫做消息連接 47 在一個面向?qū)ο蟮膽?yīng)用中的控制流由兩部分構(gòu)成 每個單獨操作內(nèi)部的控制流對象之間的消息模式面向?qū)ο蠓治鲞^程分兩階段 論域分析應(yīng)用分析 48 論域分析 論域分析開發(fā)問題論域的模型考察問題論域內(nèi)的一個較寬的范圍 分析覆蓋的范圍應(yīng)比直接要解決的問題更多 建立大致的系統(tǒng)實現(xiàn)環(huán)境 49 應(yīng)用分析 應(yīng)用分析則根據(jù)特定應(yīng)用的需求進(jìn)行論域分析 應(yīng)用 或系統(tǒng) 分析細(xì)化在論域分析階段所開發(fā)出來的信息 把注意力集中于當(dāng)前要解決的問題 50 語義數(shù)據(jù)模型 語義數(shù)據(jù)模型是一種特別適用的建立構(gòu)成問題論域模型的技術(shù) 它基于實體 關(guān)系模型 并對這類模型進(jìn)行了擴(kuò)充和一般化 語義數(shù)據(jù)模型可以表達(dá)問題論域的內(nèi)涵 還可以表示復(fù)雜的對象和對象之間的關(guān)系 51 語義數(shù)據(jù)模型與面向?qū)ο蠓椒?52 外部模型層反映應(yīng)用的外部現(xiàn)實世界的視圖 它體現(xiàn)了用戶對問題的理解 概念模型層考慮在外部模型層所標(biāo)識的實體之間的關(guān)系 這些關(guān)系都是可直接觀察到的交互關(guān)系 內(nèi)部模型層考慮實體的物理模型 就是我們生存期中的類設(shè)計階段 53 物理模型包括的屬性 物理模型包括兩類屬性 方法 對實體的行為模型化數(shù)據(jù) 對實體的狀態(tài)模型化在模型中方法分為兩種 共有的私有的在分析階段標(biāo)識的屬性是描述性的 54 在語義數(shù)據(jù)模型中的關(guān)系 一般化和特殊化關(guān)系可用來按層次漸增式地定義抽象 類 低層抽象是高層抽象的特殊化 這種抽象層次構(gòu)成論域模型的基礎(chǔ) 例如 小汽車 卡車和公共汽車可以歸于更一般的概念汽車中 從這個較一般化的概念汽車可以定義其它較特殊的抽象 賽車 面包車和牽引車 55 聚合關(guān)系支持使用幾個其它較小和較簡單的抽象來開發(fā)一個抽象 它相應(yīng)于一個記錄中成份的聲明 例如 一個航班可以有6個屬性 飛機(jī)編號 機(jī)組編號 離開和到達(dá)地點 起飛和降落時間 因此 航班類有一個聚合關(guān)系 它利用了表示飛機(jī) 人員 空間的類 并增加了時間窗口 56 關(guān)聯(lián)關(guān)系指定一個抽象做為其它抽象實例的包容 container 關(guān)聯(lián)和聚合之間的差別在于組合實體的意圖 聚合指定一組實體中的某些元素做為一個類的組成 而關(guān)聯(lián)是指群集的相互有關(guān)聯(lián)的實體群 例如 一個部門包含有人 這樣一個部門關(guān)聯(lián)了所有被分配給這個部門的人 這些人在系統(tǒng)其它地方也可能出現(xiàn) 57 對象模型化技術(shù)OMT 對象模型化技術(shù)把分析時收集的信息構(gòu)造在三類模型中 即對象模型 功能模型和動態(tài)模型 這個模型化的過程是一個迭代過程 58 對象模型 是三個模型中最關(guān)鍵的一個模型 它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu) 包括構(gòu)成系統(tǒng)的類和對象 它們的屬性和操作 及它們之間的關(guān)系 在OMT中 類與類之間的關(guān)系叫做關(guān)聯(lián) 關(guān)聯(lián)代表一組存在于兩個或多個對象之間的 具有相同結(jié)構(gòu)和含義的具體連接 關(guān)聯(lián)可以是物理的 也可以是邏輯的 59 聚合 代表整體與部分的關(guān)系 這是一種特殊形式的關(guān)聯(lián) 限定 用以對關(guān)聯(lián)的含義做某種約束 角色 用來說明關(guān)聯(lián)的一端 由于多數(shù)關(guān)聯(lián)具有兩個端點 因而涉及到兩個角色 附加的說明對象之間的連接的連接屬性 60 61 62 一般化關(guān)系 也稱為繼承性 一般化關(guān)系包含基類和幾個派生類 基類表示了一個較為一般 普遍的概念每個派生類則是它的某個特殊形態(tài)派生類除了自然地繼承基類所具有的屬性和操作外 還具有反映自身特點的屬性和操作 63 動態(tài)模型 要想對一個系統(tǒng)了解得比較清楚 還應(yīng)當(dāng)考察在任何時刻對象及其關(guān)系的改變 系統(tǒng)的這些涉及時序和改變狀況用動態(tài)模型來描述 動態(tài)模型著重于系統(tǒng)的控制邏輯 它包括兩個圖 一是狀態(tài)圖 一是事件追蹤圖 64 狀態(tài)圖 狀態(tài)圖是一個狀態(tài)和事件的網(wǎng)絡(luò) 側(cè)重于描述每一類對象的動態(tài)行為 在狀態(tài)圖中 狀態(tài)是對某一時刻中屬性特征的概括 而狀態(tài)遷移表示這一類對象在何時對系統(tǒng)內(nèi)外發(fā)生的哪些事件做出何種響應(yīng) 65 操作是一個伴隨狀態(tài)遷移的瞬時發(fā)生的行為 與觸發(fā)事件一起表示在有關(guān)的狀態(tài)遷移之上 活動則是發(fā)生在某個狀態(tài)中的行為 往往需要一定的時間來完成 因此與狀態(tài)名一起出現(xiàn)在有關(guān)的狀態(tài)之中 66 動態(tài)模型由多個狀態(tài)圖組成 對于每一個具有重要動態(tài)行為的類都有一個狀態(tài)圖 從而表明所有系統(tǒng)活動的模式 各個狀態(tài)圖并發(fā)地執(zhí)行 并可以獨立地改變狀態(tài) 各種類的狀態(tài)圖可以通過共享事件組合到一個動態(tài)模型中 67 事件 一個事件發(fā)生在某一時刻每個事件都是單獨發(fā)生的我們建立事件類 并給每個事件一個名字 以指明共同結(jié)構(gòu)和行為 事件從一個對象向另一個對象傳送信息 68 有些事件類可能傳送的是簡單的信號 要發(fā)生某件事 而有些事件類則可能傳送的是數(shù)據(jù)值 由事件傳送的數(shù)據(jù)值叫做屬性 列車出發(fā) 線路 班次 城市 撳下鼠標(biāo)按鈕 按鈕 位置 拿起電話受話器數(shù)字撥號 數(shù)字 69 事件追蹤圖 事件追蹤圖側(cè)重于說明發(fā)生于系統(tǒng)執(zhí)行過程中的一個特定 場景 場景也叫做腳本 是完成系統(tǒng)某個功能的一個事件序列 場景通常起始于一個系統(tǒng)外部的輸入事件 結(jié)束于一個系統(tǒng)外部的輸出事件 它可以包括發(fā)生在這個期間的系統(tǒng)所有的內(nèi)部事件 70 鈴 鈴 聲 聲 在 在 打 打 電 電 話 話 者 者 的 的 電 電 話 話 上 上 傳 傳 出 出 接 接 電 電 話 話 者 者 回 回 答 答 接 接 電 電 話 話 者 者 的 的 電 電 話 話 停 停 止 止 振 振 鈴 鈴 鈴 鈴 聲 聲 在 在 打 打 電 電 話 話 者 者 的 的 電 電 話 話 中 中 消 消 失 失 通 通 電 電 話 話 71 72 狀態(tài)圖與事件追蹤圖的關(guān)系 狀態(tài)圖敘述一個對象的個體行為 事件追蹤圖則給出多個對象所表現(xiàn)出來的集體行為 它們從不同側(cè)面來說明同一系統(tǒng)的行為 例如 一個事件追蹤圖指出某一對象在接受一個事件之后發(fā)出另一事件 同一行為在此對象的狀態(tài)圖中也應(yīng)當(dāng)有所表示 73 功能模型 功能模型表明 通過計算 從輸入數(shù)據(jù)能得到什么樣的輸出數(shù)據(jù) 不考慮參加計算的數(shù)據(jù)按什么時序執(zhí)行 功能模型由多個數(shù)據(jù)流圖組成 它們指明從外部輸入 通過操作和內(nèi)部存儲 直到外部輸出 這整個的數(shù)據(jù)流情況 74 功能模型中所有的數(shù)據(jù)流圖往往形成一個層次結(jié)構(gòu) 在這個層次結(jié)構(gòu)中 一個數(shù)據(jù)流圖中的過程可以由下一層的數(shù)據(jù)流圖做進(jìn)一步的說明 一般來講 高層的過程相應(yīng)于作用在聚合對象上的操作 而低層的過程則代表作用于一個簡單對象上的操作 75 數(shù)據(jù)流圖中允許加入控制流 但這樣做將與動態(tài)模型重復(fù) 不提倡夾帶控制流 76 基于三個模型的分析過程 功能模型著重于系統(tǒng)內(nèi)部數(shù)據(jù)的傳送和處理 功能模型定義 做什么 動態(tài)模型定義 何時做 對象模型定義 對誰做 77 Coad與Yourdon面向?qū)ο蠓治?OOA有兩個任務(wù)形式地說明我們所面對的應(yīng)用問題 最終成為軟件系統(tǒng)基本構(gòu)成的對象 還有系統(tǒng)所必須遵從的 由應(yīng)用環(huán)境所決定的規(guī)則和約束 明確地規(guī)定構(gòu)成系統(tǒng)的對象如何協(xié)同合作 完成指定的功能 78 OOA概念模型 通過OOA建立的系統(tǒng)模型是以概念為中心的 因此稱為概念模型 這樣的模型由一組相關(guān)的類組成 軟件規(guī)格說明就是基于這樣的概念模型形成的 以模型描述為基本部分 再加上接口要求 性能限制等其它方面的要求說明 79 構(gòu)造OOA概念模型的層次 構(gòu)造和評審OOA概念模型的順序和由五個層次組成 這五個層次是分析過程中的層次 每個層次的工作都為系統(tǒng)的規(guī)格說明增加了一個組成部分 這五個層次是 類與對象 屬性 服務(wù) 結(jié)構(gòu)和主題 80 81 識別類和對象 面向?qū)ο蠓治龅牡谝粋€層次主要是識別類和對象 類和對象是對與應(yīng)用有關(guān)的概念的抽象 不僅是說明應(yīng)用問題的重要手段 同時也是構(gòu)成軟件系統(tǒng)的基本元素 這一層工作是整個分析模型的基礎(chǔ) 82 選擇類和對象的原則 目標(biāo)系統(tǒng)必須記住類和對象的某些事情類和對象應(yīng)當(dāng)提供某些服務(wù)或處理多屬性所有屬性對于類中所有實例都應(yīng)有意義對象類應(yīng)表示問題論域的需求 83 基于語言的信息分析 在發(fā)現(xiàn)對象過程中 可以使用一種十分有用的工具 即LIA 基于語言的信息分析 LIA的目的是標(biāo)識出問題論域的所有概念及這些概念之間的關(guān)系 短語頻率分析 PFA 矩陣分析 MA 84 資源庫 資源庫包括相關(guān)文件 模型 軟件 人員以及包含問題論域或系統(tǒng)知識的其它資源 如果問題論域有參考材料 教材 慣例 操作過程等 這些材料必須包含在資源庫中 資源庫包括其它一些信息 訪問記錄 形式的或非形式的系統(tǒng)規(guī)格說明 已有的或相關(guān)系統(tǒng)的用戶手冊 日志 如系統(tǒng)變更請求或問題報告 85 LIA技術(shù)通常只應(yīng)用于資源庫的某個子集 這取決于分析員想把什么樣的視圖用于問題論域或應(yīng)用系統(tǒng) 通常 根據(jù)與問題論域有關(guān)的資源建立起來的結(jié)果與根據(jù)目標(biāo)系統(tǒng)的規(guī)格說明有關(guān)的資源建立起來的結(jié)果會有所不同 86 短語頻率分析PFA 短語頻率分析搜索選定的問題陳述 標(biāo)識可以表示問題論域概念的術(shù)語 PFA清單的建立基本上是一個客觀的過程 但可能大多數(shù)標(biāo)識出來的概念是與目標(biāo)系統(tǒng)無關(guān)的 PFA的優(yōu)點就在于能廣泛地標(biāo)識問題論域的概念集合 并對它們進(jìn)行評估 判定哪些與目標(biāo)軟件無關(guān) 87 PFA將名詞和動詞標(biāo)識為候選實體和屬性 但由于名詞 動詞的標(biāo)識是非常主觀的 可根據(jù)什么是名詞或動詞 以及根據(jù)分析員的理解 才能確定哪些名詞或動詞是要找的 PFA是標(biāo)識概念而不是標(biāo)識語法單元 所建立的PFA清單并不受建立清單的人的很大影響 88 associatedsite constituentcopies department corporate author continuedsubscription directsubscription author contributing contributingauthor discount subscription 89 對于任一有用的應(yīng)用論域資源 PFA可能會產(chǎn)生一個長長的概念的清單 許多被標(biāo)識出的概念因與目標(biāo)軟件無關(guān)而被丟棄 但其它的則會成為OOA模型的成份 包括對象 將PFA清單轉(zhuǎn)換為OOA OOD工作表格 列出對各個概念的理解和選擇 這將有助于對象的選出 90 1 可能的對象 類 5 與實現(xiàn)相關(guān) 可能是屬于問題論域部分的條目 2 可能是派生類型 基類型結(jié)構(gòu)的一部分 6 可能是屬于人機(jī)交互部分的條目 包括泛化 特化結(jié)構(gòu)和整體 部分結(jié)構(gòu) 7 可能是屬于任務(wù)管理部分的條目 3 可能描述對象 類的屬性或?qū)嵗P(guān)系 8 可能是屬于數(shù)據(jù)管理部分的條目 91 標(biāo)識結(jié)構(gòu) 面向?qū)ο蠓治龅南乱徊焦ぷ魇菢?biāo)識結(jié)構(gòu) 典型的結(jié)構(gòu)有兩種 一般化 特殊化結(jié)構(gòu) Gen Spec結(jié)構(gòu) 整體 部分結(jié)構(gòu) Whole Part結(jié)構(gòu) 92 一般化 特殊化結(jié)構(gòu) 93 整體 部分結(jié)構(gòu) 94 以特殊化的視點來看 一個Gen Spec結(jié)構(gòu)可以看作是 isa 或 isakindof 結(jié)構(gòu) 例如 aTruckVehicleisaVehicleaTruckVehicleisakindofVehicle在Gen Spec結(jié)構(gòu)中 使用繼承將較一般化的屬性和服務(wù)放在一般化的類和對象中 95 從整體的視點來看 一個Whole Part結(jié)構(gòu)可看作一個 hasa 或 isapartof 結(jié)構(gòu) 例如 VehiclehasaEngineEngineisapartofVehicle其中 Vehicle是整體對象 Engine是局部對象 96 標(biāo)識Gen Spec結(jié)構(gòu)的方法和策略 對于每一個類和對象 將它看作是一個一般化的類 對它的所有特殊情況 考慮以下問題 它是否在問題論域中 它是否在系統(tǒng)的職責(zé)內(nèi) 繼承性是否存在 它是否能夠符合選擇類和對象的標(biāo)準(zhǔn) 97 同樣地 把每一個類和對象置于特殊化對象的地位 對于它所有的一般化情形 考慮上述4個問題 檢查以前在相同或類似問題論域中面向?qū)ο蠓治龅慕Y(jié)果 看是否有可直接復(fù)用的Gen Spec結(jié)構(gòu) 如果一個一般化對象可能有多個特殊化對象 應(yīng)當(dāng)先考慮最簡單的特殊化對象和最復(fù)雜的特殊化對象 然后再考慮中間其他的特殊化對象 98 標(biāo)識Whole Part結(jié)構(gòu)的方法和策略 應(yīng)當(dāng)尋找什么總體 部分 Assembly Parts 關(guān)聯(lián) 如飛機(jī) 發(fā)動機(jī)之間的關(guān)系 包容 內(nèi)含 Container Content 關(guān)聯(lián) 如飛機(jī) 飛行員之間的關(guān)系 收集 成員 Collection Members 關(guān)聯(lián) 如機(jī)構(gòu) 職員之間的關(guān)系 99 將每一個類看作是一個Whole類 對它的所有可能Parts情況 考慮以下問題 它是否在問題論域中 它是否在系統(tǒng)的職責(zé)內(nèi) 它是否代表一個以上的狀態(tài)值 若不是 是否將它變?yōu)閃hole中的一個屬性 它是否提供問題論域中有用的抽象 100 同樣地 把每一個類置于Part的地位 對于它所有的Whole情形 考慮上述5個問題 檢查以前在相同或類似問題論域中面向?qū)ο蠓治龅慕Y(jié)果 看是否有可直接復(fù)用的Whole Parts結(jié)構(gòu) 101 標(biāo)識屬性 下一個層次稱為屬性層 對前面已識別的類和對象做進(jìn)一步的說明 在這里 對象所保存的信息稱為它的屬性 類的屬性所描述的是狀態(tài)信息 每個實例的屬性值表達(dá)了該實例的狀態(tài)值 102 標(biāo)識屬性的方法和策略 找出屬性將屬性安放到適當(dāng)?shù)奈恢谜页鰧嵗B接檢查特殊情況描述屬性考慮取值范圍 極限值 缺省值 建立和存取權(quán)限 精確度 是否會受到其他屬性值等 103 屬性層 104 實例連接關(guān)系的標(biāo)識 105 定義服務(wù) 對象收到消息后所能執(zhí)行的操作稱為它可提供的服務(wù) 對每個對象和結(jié)構(gòu)的增加 修改 刪除 選擇等服務(wù)有時是隱含的 在圖中不標(biāo)出 但在存儲類和對象有關(guān)信息的對象庫中有定義 其它服務(wù)則必須顯式地在圖中畫出 106 服務(wù)層 107 定義服務(wù)的方法和策略 找出每一個對象的所有狀態(tài) 在各種狀態(tài)需要做的工作 利用狀態(tài)遷移圖 找出必要的操作 建立消息連接 描述服務(wù) 利用狀態(tài)轉(zhuǎn)換圖 腳本和事件追蹤圖 描述服務(wù)的功能 108 消息連接的標(biāo)識 兩個對象之間可能存在著由于通信需要而形成的關(guān)系 這稱為消息連接 消息連接表示從一個對象發(fā)送消息到另一個對象 由那個對象完成某些處理 它們在圖中用箭頭表示 方向從發(fā)消息的對象指向收消息的對象 109 找出消息連接的方法及策略 對于每一個對象 執(zhí)行 查詢該對象需要哪些對象的服務(wù) 從該對象畫一箭頭到哪個對象 查詢哪個對象需要該對象的服務(wù) 從那個對象畫一箭頭到該對象 循消息連接找到下一個對象 重復(fù)以上步驟 110 識別主題 主題可以看成是高層的模塊或子系統(tǒng) 對于面向?qū)ο蠓治瞿P?主題表示此模型的整體框架 可以是一個層次結(jié)構(gòu) 通過對主題的識別 可以讓人們能夠比較清晰地了解大而復(fù)雜的模型 111 編輯管理的主題 112 識別主題 將每一種結(jié)構(gòu) 包括整體 部分結(jié)構(gòu) 和一般化 特殊化結(jié)構(gòu) 中最上層的類提升成為主題 將各不屬于任何結(jié)構(gòu)的類提升主題 檢查在相同或類似的問題論域中以前做面向?qū)ο蠓治龅慕Y(jié)果 看是否有可直接復(fù)用的主題 113 面向?qū)ο笤O(shè)計 OOD 面向?qū)ο笤O(shè)計繼續(xù)做面向?qū)ο蠓治鲭A段的工作 建立軟件的結(jié)構(gòu) 主要工作分為兩個階段 高層設(shè)計類設(shè)計 114 高層設(shè)計 高層設(shè)計階段開發(fā)系統(tǒng)的結(jié)構(gòu) 即構(gòu)造應(yīng)用軟件的總體模型 高層設(shè)計階段標(biāo)識在計算機(jī)環(huán)境中進(jìn)行問題解決工作所需要的概念 并增加了一批需要的類 這些類包括那些可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類 此階段的輸出是適合應(yīng)用軟件要求的類 類間的關(guān)系 應(yīng)用的子系統(tǒng)視圖規(guī)格說明 115 高層設(shè)計模型 116 高層設(shè)計的特點 高層設(shè)計可以表征為標(biāo)識和定義模塊的過程 模塊可以是一個單個的類 也可以是由一些類組合成的子系統(tǒng) 定義過程是職責(zé)驅(qū)動的 類接口的協(xié)議如同 合同 需方提出的請求必須列在協(xié)議表中 供方則必須提供所有協(xié)議的服務(wù) 117 高層設(shè)計應(yīng)遵循的原則 應(yīng)使得在子系統(tǒng)的各個高層部件之間的通信量達(dá)到最小 子系統(tǒng)應(yīng)當(dāng)把那些成組的類打包 形成高度的內(nèi)聚 邏輯功能分組 提供一個一個單元 識別并定位問題事件 118 類設(shè)計 類與具有概念封裝的子系統(tǒng)十分類似 每個子系統(tǒng)都可以被當(dāng)做一個類來實現(xiàn) 這個類聚集它的部件 提供了一組操作 類和子系統(tǒng)的結(jié)構(gòu)是正交的 一個單個類的實例可能是不止一個子系統(tǒng)的一部分 119 高層設(shè)計和類設(shè)計這兩個階段是相對封閉的 應(yīng)用軟件中的每一個事物都是一個對象 包括應(yīng)用軟件自身在內(nèi) 兩個階段是連接的 應(yīng)用軟件的設(shè)計是大類的設(shè)計 這種類設(shè)計考察應(yīng)用軟件所期望的每一個行為 并利用這些行為形成應(yīng)用類的界面 120 Coad與Yourdon高層設(shè)計方法 Coad與Yourdon在設(shè)計階段中繼續(xù)采用分析階段中提到的五個層次 在設(shè)計階段中 這五個層次用于建立系統(tǒng)的四個組成成份 問題論域部分人機(jī)交互部分任務(wù)管理部分?jǐn)?shù)據(jù)管理部分 121 問題論域部分 問題論域部分包括與應(yīng)用問題直接有關(guān)的所有類和對象 識別和定義這些類和對象的工作在OOA中已經(jīng)開始 在OOA階段得到的有關(guān)應(yīng)用的概念模型描述了我們要解決的問題 在OOD階段 應(yīng)當(dāng)繼續(xù)OOA階段的工作 對在OOA中得到的結(jié)果進(jìn)行改進(jìn)和增補(bǔ) 122 問題論域部分的設(shè)計 在OOA階段得到的概念模型描述了要解決的問題在OOD階段 繼續(xù)OOA階段的工作 對在OOA中得到的結(jié)果進(jìn)行改進(jìn)和增補(bǔ) 對OOA模型中的某些類與對象 結(jié)構(gòu) 屬性 操作進(jìn)行組合與分解 要考慮對時間與空間的折衷 內(nèi)存管理 開發(fā)人員的變更 以及類的調(diào)整等 123 1 復(fù)用設(shè)計 根據(jù)問題解決的需要 把從類庫或其它來源得到的既存類增加到問題解決方案中去 標(biāo)明既存類中不需要的屬性和操作 增加從既存類到應(yīng)用類之間的一般化 特殊化的關(guān)系 把應(yīng)用類中因繼承既存類而成為多余的屬性和操作標(biāo)出 修改應(yīng)用類的結(jié)構(gòu)和連接 124 2 把問題論域相關(guān)的類關(guān)聯(lián)起來 在設(shè)計時 從類庫中引進(jìn)一個根類 做為包容類 把所有與問題論域有關(guān)的類關(guān)聯(lián)到一起 建立類的層次 把同一問題論域的一些類集合起來 存于類庫中 125 3 加入一般化類以建立類間協(xié)議 有時 某些特殊類要求一組類似的服務(wù) 此時 應(yīng)加入一個一般化的類 定義為所有這些特殊類共用的一組服務(wù)名 這些服務(wù)都是虛函數(shù) 在特殊類中定義其實現(xiàn) 126 4 調(diào)整繼承支持級別 在OOA階段建立的對象模型中可能包括有多繼承關(guān)系 但實現(xiàn)時使用的程序設(shè)計語言可能只有單繼承 甚至沒有繼承機(jī)制 這樣就需對分析的結(jié)果進(jìn)行修改 多繼承模式有兩種 狹義的菱形廣義的菱形 127 128 針對單繼承語言的調(diào)整 把特殊類的對象看做是一個一般類對象所扮演的角色 通過實例連接把多繼承的層次結(jié)構(gòu)轉(zhuǎn)換為單繼承的層次結(jié)構(gòu) 把多繼承的層次結(jié)構(gòu)平鋪 成為單繼承的層次結(jié)構(gòu) 在這種情況下 有些屬性或操作在同層的特殊類中會重復(fù)出現(xiàn) 129 130 針對無繼承語言的調(diào)整 當(dāng)使用無繼承的程序設(shè)計語言時 必須把具有繼承關(guān)系的類層次結(jié)構(gòu)平鋪開來 成為一組類和對象 一般可利用命名慣例 把這些類或?qū)ο箨P(guān)聯(lián)起來 131 5 改進(jìn)性能 提高執(zhí)行效率和速度是系統(tǒng)設(shè)計的主要指標(biāo)之一 有時 必須改變問題論域的結(jié)構(gòu)以提高效率 如果類之間經(jīng)常需要傳送大量消息 可合并相關(guān)的類以減少消息傳遞引起的速度損失 增加某些屬性到原來的類中 或增加低層的類 以保存暫時結(jié)果 避免每次都要重復(fù)計算造成速度損失 132 6 加入較低層的構(gòu)件 在做面向?qū)ο蠓治鰰r 分析員往往專注于較高層的類和對象 避免考慮太多較低層的實現(xiàn)細(xì)節(jié) 在做面向?qū)ο笤O(shè)計時 設(shè)計師在找出高層的類和對象時 必須考慮到底需要用到哪些較低層的類和對象 133 用戶界面部分的設(shè)計 在OOA階段給出了所需的屬性和操作 在設(shè)計階段必須根據(jù)需求把交互細(xì)節(jié)加入到用戶界面設(shè)計中 包括人機(jī)交互所必需的實際顯示和輸入 用戶界面部分設(shè)計主要由以下幾個方面組成 134 1 用戶分類 按技能層次分類 外行 初學(xué)者 熟練者 專家按組織層次分類 行政人員 管理人員 專業(yè)技術(shù)人員 其它辦事員按職能分類 顧客 職員 135 2 描述人及其任務(wù)的腳本 對以上定義的每一類用戶 列出對以下問題做出的考慮 什么人 目的 特點 成功的關(guān)鍵因素 熟練程度以及任務(wù)腳本 在OOATOOLTM中有一個例子 什么人 分析員目的 要求一個工具來輔助分析工作 擺脫繁重的畫圖和檢查圖的工作 136 特點 年齡 42歲 教育水平 大學(xué) 限制 不要微型打印 小于9個點的打印太小 成功的關(guān)鍵因素 工具應(yīng)當(dāng)使分析工作順利進(jìn)行 工具不應(yīng)與分析工作沖突 工具應(yīng)能捕獲假設(shè)和思想 能適時做出折衷 應(yīng)能及時給出模型各個部分的文檔 這與給出需求同等重要 熟練程度 專家 137 任務(wù)腳本 主腳本 識別 核心的 類和對象 識別 核心 結(jié)構(gòu) 在發(fā)現(xiàn)了新的屬性或操作時隨時都可以加進(jìn)模型中去 檢驗?zāi)P?打印模型及其全部文檔 138 3 設(shè)計命令層 研究現(xiàn)行的人機(jī)交互活動的內(nèi)容和準(zhǔn)則 這些準(zhǔn)則可以是非形式的 如 輸入時眼睛不易疲勞 也可以是正式規(guī)定的 建立一個初始的命令層 可以有多種形式 如一系列MenuScreens 或一個MenuBar 或一系列Icons 細(xì)化命令層 考慮以下幾個問題 139 排列命令層次 把使用最頻繁的操作放在前面 按照用戶工作步驟排列 通過逐步分解 找到整體 局部模式 以幫助在命令層中對操作分塊 根據(jù)人們短期記憶的 7 2 或 每次記憶3塊 每塊3項 的特點 把深度盡量限制在三層之內(nèi) 減少操作步驟 把點取 拖動和鍵盤操作減到最少 140 4 設(shè)計詳細(xì)的交互 用戶界面設(shè)計有若干原則 包括 一致性 采用一致的術(shù)語 一致的步驟和一致的活動 操作步驟少 減少敲鍵和鼠標(biāo)點取的次數(shù) 減少完成某件事所需的下拉菜單的距離 不要 啞播放 每當(dāng)用戶等待系統(tǒng)完成一個活動時 要給出一些反饋信息 141 Undo 在操作出現(xiàn)錯誤時 要恢復(fù)或部分恢復(fù)原來的狀態(tài) 減少人腦的記憶負(fù)擔(dān) 不應(yīng)在一個窗口使用在另一個窗口中記憶或?qū)懴碌男畔?需要人按特定次序記憶的東西應(yīng)當(dāng)組織得容易記憶 學(xué)習(xí)的時間和效果 提供聯(lián)機(jī)的幫助信息 趣味性 盡量采取圖形界面 符合人類習(xí)慣 142 5 繼續(xù)做原型 用戶界面原型是用戶界面設(shè)計的重要工作 人需要對提交的人機(jī)交互活動進(jìn)行體驗 實地操作 并精煉成一致的模式 使用快速原型工具或應(yīng)用構(gòu)造器 對各種命令方式 如菜單 彈出 填充以及快捷命令 做出原型讓用戶使用 通過用戶反饋 修改 演示的迭代 使界面越來越有效 143 6 設(shè)計HIC 人機(jī)交互 類 窗口需要進(jìn)一步細(xì)化 通常包括 類窗口 條件窗口 檢查窗口 文檔窗口 畫圖窗口 過濾器窗口 模型控制窗口 運行策略窗口 模板窗口等 設(shè)計HIC類 首先從組織窗口和部件的用戶界面界面的設(shè)計開始 144 每個類包括窗口的菜單條 下拉菜單 彈出菜單的定義 還要定義用于創(chuàng)建菜單 加亮選擇項 引用相應(yīng)的響應(yīng)的操作 每個類負(fù)責(zé)窗口的實際顯示 所有有關(guān)物理對話的處理都封裝在類的內(nèi)部 必要時 還要增加在窗口中畫圖形圖符的類 在窗口中選擇項目的類 字體控制類 支持剪切和粘貼的類等 與機(jī)器有關(guān)的操作實現(xiàn)應(yīng)隱蔽在這些類中 145 7 根據(jù)圖形用戶界面進(jìn)行設(shè)計 圖形用戶界面區(qū)分為字型 坐標(biāo)系統(tǒng)和事件 字型是字體 字號 樣式和顏色的組合 坐標(biāo)系統(tǒng)主要因素有原點 基準(zhǔn)點 顯示分辨率 顯示維數(shù)等 事件則是圖形用戶界面程序的核心 操作將對事件做出響應(yīng) 146 任務(wù)管理部分的設(shè)計 任務(wù) 是進(jìn)程的別稱 是執(zhí)行一系列活動的一段程序 當(dāng)系統(tǒng)中有許多并發(fā)行為時 需要依照各個行為的協(xié)調(diào)和通信關(guān)系 劃分各種任務(wù) 以簡化并發(fā)行為的設(shè)計和編碼 任務(wù)管理主要包括任務(wù)的選擇和調(diào)整 它的工作有以下幾種 147 識別事件驅(qū)動任務(wù) 一些負(fù)責(zé)與硬件設(shè)備通信的任務(wù)是事件驅(qū)動的 也就是說 這種任務(wù)可由事件來激發(fā) 識別時鐘驅(qū)動任務(wù) 以固定的時間間隔激發(fā)這種事件 以執(zhí)行某些處理 某些人機(jī)界面 子系統(tǒng) 任務(wù) 處理機(jī)或與其它系統(tǒng)需要周期性的通信 因此時鐘驅(qū)動任務(wù)應(yīng)運而生 148 識別優(yōu)先任務(wù)和關(guān)鍵任務(wù) 根據(jù)處理的優(yōu)先級別來安排各個任務(wù) 識別協(xié)調(diào)者 當(dāng)有三個或更多的任務(wù)時 應(yīng)當(dāng)增加一個追加任務(wù) 起協(xié)調(diào)者的作用 它的行為可以用狀態(tài)轉(zhuǎn)換矩陣來描述 評審各個任務(wù) 對各任務(wù)進(jìn)行評審 確保它能滿足選擇任務(wù)的工程標(biāo)準(zhǔn) 事件驅(qū)動 時鐘驅(qū)動 優(yōu)先級 關(guān)鍵任務(wù) 協(xié)調(diào)者 149 定義各個任務(wù) 定義任務(wù)的工作主要包括 它是什么任務(wù) 如何協(xié)調(diào)工作及如何通信 1 它是什么任務(wù) 為任務(wù)命名 并簡要說明這個任務(wù) 2 如何協(xié)調(diào)工作 定義各個任務(wù)如何協(xié)調(diào)工作 指出它是事件驅(qū)動還是時鐘驅(qū)動 150 3 如何通信 定義各個任務(wù)之間如何通信 任務(wù)從哪里取值 結(jié)果送往何方 4 一個模版 任務(wù)的定義如下 Name 任務(wù)名 Description 描述 Priority 優(yōu)先級 Servicesincluded 包含的操作 CommunicationVia 經(jīng)由誰通信 151 數(shù)據(jù)管理部分的設(shè)計 數(shù)據(jù)管理部分提供了在數(shù)據(jù)管理系統(tǒng)中存儲和檢索對象的基本結(jié)構(gòu) 包括對永久性數(shù)據(jù)的訪問和管理 它分離了數(shù)據(jù)管理機(jī)構(gòu)所關(guān)心的事項 包括文件 關(guān)系型DBMS或面向?qū)ο驞BMS等 152 數(shù)據(jù)管理方法 數(shù)據(jù)管理方法主要有3種 文件管理 關(guān)系數(shù)據(jù)庫管理和面向?qū)ο髱鞌?shù)據(jù)管理 文件管理 提供基本的文件處理能力 關(guān)系數(shù)據(jù)庫管理系統(tǒng) 關(guān)系數(shù)據(jù)庫管理系統(tǒng)使用若干表格來管理數(shù)據(jù) 153 面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng) 通常 面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)以兩種方法實現(xiàn) 一是擴(kuò)充的RDBMS 二是擴(kuò)充的面向?qū)ο蟪绦蛟O(shè)計語言 擴(kuò)充的RDBMS主要對RDBMS擴(kuò)充了抽象數(shù)據(jù)類型和繼承性 再加一些一般用途的操作創(chuàng)建和操縱類與對象 擴(kuò)充的OOPL在面向?qū)ο蟪绦蛟O(shè)計語言中嵌入了在數(shù)據(jù)庫中長期管理存儲對象的語法和功能 154 程序設(shè)計語言的影響 詳細(xì)的面向?qū)ο笤O(shè)計與語言有關(guān) 一般地 所有的語言都可以完成面向?qū)ο髮崿F(xiàn) 但某些語言能夠提供更豐富的語法 能夠顯式地描繪在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計過程中所使用的表示法 155 1 面向?qū)ο笤O(shè)計與過程型語言 過程型語言只直接支持過程抽象可以增加數(shù)據(jù)抽象及封裝 如利用結(jié)構(gòu)化設(shè)計的信息隱蔽模塊 無法明確地表示繼承性 也無法明確支持整體與部分 類與成員 對象與屬性等關(guān)系 具有面向?qū)ο筇匦缘倪^程型語言可以成為一種實用的且可行的語言 156 2 面向?qū)ο笤O(shè)計與基于對象的語言 基于對象的語言 也叫做面向軟件包的語言 如Ada等能夠直接支持過程抽象 數(shù)據(jù)抽象 封裝和對象與屬性關(guān)系它無法表示繼承性 也無法表示類與成員 整體與部分的關(guān)系 基于對象語言的面向?qū)ο笤O(shè)計代表一種可行的開發(fā)方法 157 3 面向?qū)ο笤O(shè)計與面向?qū)ο蟮某绦蛟O(shè)計語言 面向?qū)ο蟮某绦蛟O(shè)計語言 包括C Smalltalk Objective C Actor Eiffel等 都直接支持過程抽象 數(shù)據(jù)抽象 封裝 繼承 以及對象與屬性 類與成員關(guān)系 它們不明確地支持整體與部分關(guān)系 但可以方便地表示組裝對象 158 因此 從面向?qū)ο蠓治?到面向?qū)ο笤O(shè)計 再到面向?qū)ο蟪绦蛟O(shè)計語言是一種與表示法十分一致的策略 159 4 面向?qū)ο笤O(shè)計與面向?qū)ο髷?shù)據(jù)庫語言 OO DBL 面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng) OO DBMS 及其語言 OO DBL 是面向?qū)ο蟪绦蛟O(shè)計語言 OOPL 與數(shù)據(jù)管理能力的組合 OO DBMS有四種不同的體系結(jié)構(gòu) 160 大屬性 擴(kuò)充關(guān)系型DBMS 使容納大屬性 如一個文檔 例如 Informix公司的面向?qū)ο蟮漠a(chǎn)品 松散耦合 一個OOPL與大量的DBMS組合在一起 緊密耦合 一個OOPL與某個專用的DBMS集成為一個系統(tǒng) 擴(kuò)充關(guān)系型 擴(kuò)充關(guān)系型DBMS 可容納 過程 之類的屬性 161 類的設(shè)計 應(yīng)用分析過程包括了對問題論域所需的類的模型化但在最終實現(xiàn)應(yīng)用時不只有這些類 還需要追加一些類在類設(shè)計的過程中應(yīng)當(dāng)做這些工作 162 單一概念的模型使用多個類來表示一個 概念 常常把一個概念進(jìn)行分解 用一組類來表示這個概念 也可以只用一個單個類來表示一個概念 在類的文檔中應(yīng)對類的用途做出清楚的標(biāo)識和精確的陳述 類的共有界面應(yīng)當(dāng)使用操作的特征 先決條件和后置條件加以定義 類設(shè)計的目標(biāo) 163 可復(fù)用的 插接相容性 部件部件可以在未來的應(yīng)用中使用 界面的標(biāo)準(zhǔn)化類的 插接相容性 可靠的部件可靠的 健壯的和正確定義的 部件 每個部件必須經(jīng)過充分的測試 每個操作盡可能小和作用單一 164 可集成的部件類的界面應(yīng)當(dāng)盡可能小一個類所需要的數(shù)據(jù)和操作都定義在類定義中避免命名沖突封裝特性保證了把一個概念的所有細(xì)節(jié)都組合在一個界面下信息隱蔽保證了實現(xiàn)級的名字將不會與其它類的名字互相干擾 165 類設(shè)計的方針 信息隱蔽保護(hù)抽象數(shù)據(jù)類型的存儲表示不被抽象數(shù)據(jù)類型實例的用戶直接存取 對其表示的唯一存取途徑只能是界面 166 直接引用類中的數(shù)據(jù) 167 通過界面引用類中的數(shù)據(jù) 168 消息限制避開直接引用另一個類的數(shù)據(jù)類A的數(shù)據(jù)表示中包括了類C的實例 類B的數(shù)據(jù)表示則直接使用了類C 如果類A的實例發(fā)送一個消息給類B的一個實例 則類A必須知道類B的實現(xiàn)是如何使用類C的實例的 并把這種知識包括到它自己的實現(xiàn)中去 當(dāng)類B需要改變自己的實現(xiàn) 改動類C的數(shù)據(jù)表示時 類A的實現(xiàn)也必須隨之改變 169 類間的相互影響 170 狹窄界面不是所有的操作都是公共的 對于一個HashTable類 界面應(yīng)包括插入和檢索表的操作 而不應(yīng)包括使用一個表項的關(guān)鍵碼計算散列值的操作 散列函數(shù)不應(yīng)由類的實例的用戶來訪問 它應(yīng)是一個單獨的操作 以便容易調(diào)整或改變散列函數(shù) 它應(yīng)是隱蔽實現(xiàn)的部分 171 強(qiáng)內(nèi)聚模塊內(nèi)部各個部分之間應(yīng)有較強(qiáng)的關(guān)系 它們不能分別標(biāo)識 弱耦合一個單獨模塊應(yīng)盡量不依賴于其它模塊 如果 在類A的實例中建立了類B的實例 類A的操作需要類B的實例做為參數(shù) 如果類A是類B的一個派生類 則稱類A 依賴于 類B 一個類應(yīng)當(dāng)盡可能少地依賴于其它類 172 顯式信息傳遞在類之間全局變量的共享隱含了信息的傳遞 并且是一種依賴形式 因此 兩個類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞 顯式信息傳遞是通過參數(shù)表來完成的 借助于顯式地列出將要通過參數(shù)表傳遞給一個操作的值 可以循特定的路徑來跟蹤錯誤 顯式信息傳遞要最小化 173 派生類當(dāng)做派生類型在繼承結(jié)構(gòu)中 每個派生類應(yīng)該當(dāng)做基類的特殊化來開發(fā) 而基類所具有的公共界面成為派生類的共有界面的一個子集 C 允許設(shè)計者選擇類的基類是共有的或私有的 如果基類是共有的 則其共有界面將成為新的派生類的共有界面部分 這類似于類型與派生類型之間的關(guān)系 174 如果基類是私有的 它的行為將不是派生類的公共行為部分而是實現(xiàn)部分 它的提出是為了提供實現(xiàn)新類的服務(wù) 在實現(xiàn)一個新類時通過聲明一個類的實例 就可以使得該類的服務(wù)有效 Dictionary類的實現(xiàn)可采用Array類的實例 這樣可以把存儲提供給Dictionary項 而不給Dictionary類的界面增加不適當(dāng)?shù)牟僮?175 抽象類某些語言提供了一個類 用它做為繼承結(jié)構(gòu)的開始點 所有用戶定義的類都直接或間接以這個類為基類 C 支持多重繼承結(jié)構(gòu) 每一種結(jié)構(gòu)都包含了一組類 它們是某種概念的特殊化 這個概念應(yīng)抽象地由結(jié)構(gòu)的根類來表示 因此 每個繼承結(jié)構(gòu)的根類應(yīng)當(dāng)是目標(biāo)概念的一個抽象模型 176 這個抽象模型起始于一個根類 它不產(chǎn)生實例 它定義了一個最小的共有界面 許多派生類可以加到這個界面上以給出概念的一個特定視圖 考慮一組涉及 List 概念的類 根類應(yīng)提供一組操作做為界面而不考慮是什么表 這個抽象類可以提供某些操作的缺省實現(xiàn) 但在派生類中將根據(jù)特殊化要求給出特定實現(xiàn) 177 通過復(fù)用設(shè)計類 利用既存類來設(shè)計類 有4種方式 選擇 分解 配置和演變 選擇設(shè)計一個類最簡單的服務(wù)是從既存的部件中簡單地選擇合乎需要的軟件部件 178 部件庫 一個面向?qū)ο箝_發(fā)環(huán)境應(yīng)提供一個常用部件庫 大多數(shù)語言環(huán)境都帶有一個初始部件庫 如整數(shù) 實數(shù)和字符 它是提供其它所有功能的基礎(chǔ)層 任一基本部件庫 如 基本數(shù)據(jù)結(jié)構(gòu) 部件 都應(yīng)建立在這些原始層上 這個層還包括一組提供其它應(yīng)用論域方法的一般類 如窗口系統(tǒng)和圖形圖元 179 一個面向?qū)ο蟛考斓膶哟?特定組的部件 一個小組為他們自己組內(nèi)所有成員使用而開發(fā) 特定項目的部件 一個小組為某一個項目而開發(fā) 特定問題論域的部件 購自某一個特定論域的軟件銷售商 一般部件 購自專門提供部件的銷售商 特定語言原操作 購自一個編譯器的銷售商 180 分解最初標(biāo)識的 類 常常是幾個概念的組合 在著手設(shè)計時 必須把一個類分成幾個類 希望新標(biāo)識的類容易實現(xiàn) 或它們已經(jīng)存在 配置在設(shè)計類時 我們可能會要求由既存類的實例提供類的某些特性 通過把相應(yīng)類的實例聲明為新類的屬性來配置新類 181 一種仿真服務(wù)器可能要求使用一個計時器來跟蹤服務(wù)時間 設(shè)計者應(yīng)當(dāng)找到計時器類 并在服務(wù)器類的定義中聲明它 這個服務(wù)器還要求有一個隊列類的實例來作客戶排隊工作 對每一個客戶的服務(wù)時間由一個已知的概率分布來確定 因此 可能使用一個具有泊松分布或具有均勻分布的隨機(jī)變量的類的實例 182 演化要求開發(fā)的新類可能與一個既存類非常類似 但不完全相同 此時 可以利用繼承機(jī)制 一般化 特殊化處理有三種可能的方式 183 面向?qū)ο筌浖膶崿F(xiàn)與測試 在開發(fā)過程中 類的實現(xiàn)是核心問題 在只用面向?qū)ο箫L(fēng)格所寫的系統(tǒng)中 所有的數(shù)據(jù)都被封裝在類的實例中而整個應(yīng)用則被封裝在一個更高級的類中 這種封裝和類提供的標(biāo)準(zhǔn)界面很容易把類所表達(dá)的特性嵌入到應(yīng)用中去 184 類級關(guān)系 當(dāng)我們實現(xiàn)類的時候就會遇到類級的關(guān)系 一個類的實現(xiàn)常常在某些方面依賴于其它類的實例 類級關(guān)系可以是應(yīng)用級關(guān)系的實現(xiàn) 也可以是類內(nèi)屬性的實現(xiàn) 消息組裝繼承 185 消息 messaging 在應(yīng)用程序中 應(yīng)用級關(guān)系大多是以類的實例之間的消息連接方式實現(xiàn)通信的 在消息的參數(shù)表中指定消息的接受者 一個類的實例 還可以通過參數(shù)表向接收者提供信息 消息指定一個屬于接收者的服務(wù) 這個服務(wù)必須對應(yīng)到該類共有界面規(guī)定的行為 186
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇連云港市海州灣發(fā)展集團(tuán)有限公司及子公司招聘20人筆試參考題庫附帶答案詳解
- 2025廣東省廣晟控股集團(tuán)校園招聘2025人筆試參考題庫附帶答案詳解
- 2025年福建省晉江市市政工程建設(shè)有限公司權(quán)屬公司招聘6人筆試參考題庫附帶答案詳解
- 2025年河北石家莊印鈔有限公司招聘13人筆試參考題庫附帶答案詳解
- 2025年國網(wǎng)河北省電力有限公司高校畢業(yè)生招聘約215人(第二批)筆試參考題庫附帶答案詳解
- 2025安徽蕪湖鳳鳴控股集團(tuán)及其子公司選調(diào)10人筆試參考題庫附帶答案詳解
- 劃款轉(zhuǎn)委托協(xié)議
- 品質(zhì)合同協(xié)議書
- 工程擔(dān)保合同協(xié)議書模板
- 企業(yè)合同變更協(xié)議書
- 七年級期中考試后家長會-圖文課件
- Python自動化運維(技術(shù)與最佳實踐)
- HY/T 0386-2023赤潮災(zāi)害損失調(diào)查與評估指南
- 小學(xué)期中家長會活動方案及流程
- GB/T 43824-2024村鎮(zhèn)供水工程技術(shù)規(guī)范
- 雪鐵龍DS 5LS說明書
- (2024版)小學(xué)六年級數(shù)學(xué)考試新題型與答題技巧解析
- 教育行業(yè)選址分析
- 2024年安徽國元農(nóng)業(yè)保險滁州中心支公司招聘筆試參考題庫含答案解析
- 2024年高等教育經(jīng)濟(jì)類自考-00100國際運輸與保險筆試歷年真題薈萃含答案
評論
0/150
提交評論