OOAD&UML學習筆記

OOAD(Object-Oriented Analysis and Design)介紹

1.  OOAD方法論的定義
答:1) 面向對象是一種系統建模技術;
    2) 將系統描述爲許多相互作用的有關係對象;
    3) 系統中相互作用的對象被組織成類;
    4) OO方法論由以下三部分組成:
       . 一個過程
       . 一個符號
       . 一系列規則
 
2.  在一個OOAD軟件開發過程,我們要完成二個不同的工作:
答:1) 分析階段我們主要:
       . 建立一個清晰的商業問題的視圖;
       . 概述系統必須執行的任務;
       . 建立商業問題描述的通用詞彙;
       . 概述商業問題的最佳方案。
    2) 設計階段我們主要:
       . 解決商業問題;
       . 定義“how”代替“what”;
       . 介紹將使系統工作的支撐元素;
       . 定義系統的實現策略。

3.  對象
答:1) 是單個的、唯一確認的實體或項目;
    2) 作爲面向對象的構建塊被使用;
    3) 有身份、數據和行爲;
    4) 可以是簡單或複雜的;
    5) 可以是真實或想象的;
    6) 有屬性和操作;
    7) 是一個類的動態實例;
 
4.  類
答:多個相同對象的一種抽象,對象都創建自類

5.  面向對象編程的特徵
答:1) Abstraction(抽象):
       . 忽略細節,處理對象或實體本質的特徵;
       . 簡化功能以及信息;
       . 幫助用戶和對象交互;
    2) Encapsulation(封裝):
       . 隱藏對象的數據;
       . 處理每個對象的二種視圖:
         a. 外部視圖:顯示一個對象做什麼;
         b. 內部視圖:顯示對象如何完成它的任務;
    3) Association(關聯)
       . 對象間交互的方式;
       . 一個對象使用另一個對象的服務或操作另一個對象,這時候對象相互關聯。
    4) Aggregation(聚合)
       . 定義一個對象是另一個對象的一個組成部分;
       . 是一種比較強的關聯;
       . 通過“Has A”關係可進行確認。一輛車有輪子、座椅以及門,它們是一部車的組成部分。假如你移除其間的任何一部分,車沒有了相應的功能,但仍是一部車。
    5) Composition(合成)
       . 一個對象包含另一個對象;
       . 是最強的關聯形式;
       . 通過“contain”關係可進行確認。
       . 假設部件不存在,對象亦不存在。
    6) Inheritance(繼承)
       . 是一種根據既存類定義新類的機制;
       . 通過“Is A”或者“Kind of”關係可進行確認;
       . 允許你組織相關類,這樣這些類可共同地被管理以及重用。
    7) Cohesion(類聚)和Coupling(耦合)
       . Cohesion: 一個或一組類對系統中單個功能貢獻程度的度量;
       . Coupling: 二個或多個類間對聯繫緊密程度的度量;
    8) Polymorphism(多態)
       . 不同對象完成相同語義上的結果;
       . 基於繼承;
       . 多態功能的實現依賴於它應用的對象;
       . 舉例:足球-扔-需二隻手、網球-扔-只需一隻手,同樣是扔,有不同的實現。當你將不同的球給一個小孩子,他知道是用一隻手還是二隻手。小孩都知道多態。

6.  開發過程預覽
答:1) 傳統開發過程:
       . 瀑布式開發:需求->分析->設計->實現->測試。每個步驟完成和文檔化後才進入下一個階段。
       . 假設在後期階段出現問題,很難返回到先前階段。
       . 項目組成員花費大量時間和精力於每個階段確保它是正確的.
       . 各階段所用符號和術語均是變化的。完成的軟件雖然正確,但與它所表現的商業邏輯相關甚少。
    2) OOAD開發過程
       . 典型的處理方式是將一個項目作爲一系列的小項目;
       . UML(Unified Modeling Language)是一種符號,不是一個處理過程;
       . USDP(Unified Software Development Process)是迭代增量式的;
       . USDP和RUP(Rational Unified Process)都是流行的OOAD過程。

7.  迭代增量式項目生命週期
答:1) “迭代”指生命週期中每一個步驟;
    2) 迭代的結果便是整個項目功能完成的一步步增長;
    3) 在每個迭代的構建階段,你應該:
       . 選擇並分析相關的用例;
       . 使用選擇的體系結構創建一個設計;
       . 用組件實現設計;
       . 檢驗組件滿足用例。

8.  迭代增量生命週期的主要階段
答:1) Inception(開始)階段:
       . 這個階段的增長集中在:
         a. 開始項目;
         b. 爲這個項目建立起商業原則;
         c. 定義一個商業問題;
         d. 識別潛在的風險;
         e. 定義對問題更好理解的範圍;
         f. 創建對商業問題的解釋文檔。
       . 每個循環包括一至多個反覆,每個階段的完成結果都是里程碑式的。
    2) Elaboration(細節)階段:
       . 這個階段的增長集中在:
         a. 高水平的分析和設計;
         b. 爲項目建立一個架構體系的基線;
         c. 監測潛在的風險;
         d. 創建一個實現項目目標的構建計劃;
    3) The Construction(構建)階段:
       . 這個階段的增長集中在軟件項目日益成型;
    4) The Transition(躍遷)階段:
       . 這個階段的增長集中在:
         a. 發佈產品給客戶;
         b. 完成beta測試;
         c. 實現性能調整、用戶培訓以及接受度測試。
9.  階段期間的工作步驟
答:1) 每個階段由以下五個工作步驟組成:
       . 需求
       . 分析
       . 設計
       . 實現
       . 測試
    2) 不同的反覆對每個工作步驟完成的程度不同;
    3) 早期的反覆在深度上覆蓋了第一個工作步驟,以後的反覆在深度上覆蓋了最後的工作步驟。
    4) 8/2原則:假如完成了80%, 即可進入下一個反覆。

10. 反覆和工作步驟
答:1) 在每個反覆過程,根據需求你可以包括五個工作步驟中的任何一個。
    2) 早期的反覆過程集中在靠前的工作步驟,後期的反覆過程集中在靠後的工作步驟。
    3) 當你發現應該修改早先工作步驟中的某些錯誤,你可以:
       . 繼續並在下一個反覆過程中修正;
       . 繼續並增加一個新的反覆過程修正問題;
       . 假如時間允許,返回到當前的反覆並修正這個問題。
    4) 不同的反覆執行每個工作步驟於不同的程度。

11. 迭代增量生命週期的好處
答:1) 減少費用;
    2) 對項目進度的更好保證;
    3) 對於開發團隊而言開發速度更快;
    4) 可適應用戶需求的改變;

UML(Unified Modeling Language)介紹

1.  UML定義
答:1) UML是一種圖形化語言用於:
       . 說明;
       . 構建;
       . 肉眼觀察;
       . 文檔化系統原型;
    2) 在分析階段,你創建類圖以幫助你理解商業概念(還沒有實現的細節);
    3) 在構建階段,我們通過爲相同的類圖增加附加的細節——實現商業細節;

2.  UML和藍圖的關係
答:開發OOAD程序——UML
    建房——藍圖

3.  UML圖形類型
答:1) 靜態模型:代表你正在建模的軟件系統的基本結構;
    2) 動態模型:強調了系統的行爲;

4.  靜態模型
答:1) 構建以及文檔化一個系統的靜態方面;
    2) 反映了一個軟件系統基本的、穩定的框架;
    3) 創建問題主要元素的代表;
    4) 由以下圖形組成:
       . 用例圖
       . 類圖
       . 對象圖
       . 組件以及部署圖

5.  動態圖
答:1) 構建顯示系統行爲的圖形;
    2) 由以下圖形組成:
       . 時序圖
       . 協作圖
       . 狀態圖
       . 活動圖

6.  用例圖
答:1) 顯示誰或什麼使用系統以及它的特徵;
    2) 一個用例圖中特徵的用戶稱爲“actors”;
    3) 用例用橢圓表示;
    4) 爲使建模容易,用例圖需區分先後順序;

7.  類圖
答:1) 代表一系列包含普通屬性和特徵的對象;
    2) 結構化的圖形顯示了一系列的類、接口、對象間的協作以及關係;
    3) 由一至多個描述了以下信息的矩形組成:
       . 類型(類名)
       . 可選擇的屬性
       . 操作部分

8.  對象圖
答:1) 代表一個明確的對象
    2) 結構化的圖形顯示了一系列對象以及他們之間的關係

9.  組件圖
答:顯示軟件組件間的關係

10. 部署圖
答:顯示能用於部署軟件應用程序的物理設備

11. 時序圖
答:1) 不同對象一定時間範圍發生的消息;
    2) 強調消息的時間順序

12. 協作圖
答:1) 顯示了使用消息期間對象間的協作;
    2) 強調發送和接收消息的結構化組織;

13. 狀態轉換圖
答:強調對象行爲的事件順序

14. 活動圖
答:1) 描述一項活動到另外一項間的流程
    2) 強調一項活動到另外一項間的流程

15. 包的符號
答:1) 指組織項目的一種方式;
    2) 通常用於控制類的名域空間;
    3) 在UML中使用包組織類、軟件組件、硬件組件、其它包以及和你模型相關的任何其它東西

2004-11-5        星期五      陰

需求和初始化分析

1.  開始開發過程
答:1) 分析最初的工作流;
    2) 收集信息;
    3) 創建一個問題的狀態;
    4) 創建用例;
    5) 引介組件以及部署圖;

2.  收集信息
答:你可從許多資源中收集信息,這些資源包括:
    . 用戶的初始化需求詳情
    . 行業專家
    . 顧客和用戶
    . 管理者
    . 市場
    . 以前類似項目

3.  避免習慣性的假設
答:1) 你必須避免習慣性的假設,包括:
       . 用戶是天真的,開發者最清楚
       . 需求是靜態的
       . 一開始便能建立正確的方案
    2) 記住項目的發展以及客戶的需求均是變化的。
    3) 爲了避免這些假設,我們應該:
       . 明確用戶的需求
       . 確保你的模型能適應不斷變化的需求
       . 確保你能修改你的模型
    
4.  行業專家
答:1) 指某個特定商業領域的專家
    2) 可大致細分爲:
       . 通用行業專家
       . 特定應用程序行業專家以及當前商業領域專家
       . 類似商業領域專家
    3) 沒有行業專家,從其它領域抽象通用元素很困難

5.  問題聲明
答:1) 文檔清楚地描述了客戶和系統需求嗎?
    2) 用戶輸入對於文檔很重要
    3) 使用客戶熟悉的語言詞彙
    4) 句義清楚,不用行話
    5) 函蓋項目範圍內的細節
    6) 詳細說明問題的背景
    7) 詳細說明所知的約束
    8) 問題聲明提供了關於商業背景、範圍以及計算機術語無關方面的約束。它用於作爲確認問題範圍的基礎。
 
6.  對象和類的侯選值
答:1) 可從問題聲明中確定
    2) 給問題聲明中的名詞短語加下劃線以建設對象和類侯選值列表
    3) 在接下去的分析階段,你需要確定你係統中所需的對象和類的列表

7.  數據字典
答:1) 描述了用於項目所有詞彙的文檔
    2) 通過和用戶溝通積累所得的條款
    3) 用於整個項目和系統
    4) 在整個項目期間會不斷地加入新的術語
    5) 幫助消除歧義
    6) 必須對所有項目組成員可用
    7) 數據字典對於大型項目中各團隊溝通非常重要。這時,它既是商業文檔也是系統文檔。

8.  創建用例
答:1) 一個用例是用戶和系統交互的圖形化的表現形式;
    2) 是定義和理解系統需求和背景的工具;
    3) 是任何系統某一方面的簡單印象。當你將所有印象收集在一塊,你便擁有了系統的整個描述;
    4) 圖形具體表現爲實線的橢圓。

9.  用例圖中的“include”和“extend”
答:1) “include”集中於包含關係,完成某個模塊之前,你必須使用另一個模塊;
    2) “extend”集中於擴展關係,也許或也許不基於某個模塊,不是強制性的;

10. 用例中的情節假設
答:1) 用例從用戶的角度顯示了軟件的功能。也許存在超過一種方式完成一指定功能。
    2) 一個假設情節指用例的一個實例——從開始到結束的一個邏輯路徑。
    3) 情節假設不包括有條件的聲明——因爲它們描述了用戶多個可能路徑中的一種。
    4) 所有的情節假設從相同的方式開始,但結果卻不同。
    5) 一個用例中成功或不成功的路徑都應該顯示出來——在一個ATM中,你必須考慮一些情節諸如用戶個人身份號碼輸入不對或者金額不足。
 
11. 用例表單
答:1) 每個用例的摘要
    2) 用例表單不是UML的內容,但是建議完成它。
    3) 在這個表單中,包括以下項目:
       . 用例名稱
       . 參與者
       . 優先權
       . 狀態
       . 擴展內容部分
       . 預處理/假想情節
       . 提交條件
       . 事件流
       . 可選路徑
       . 執行
       . 頻率

12. 活動圖
答:1) 創建用例圖後,你可以使用圖形說明活動或工作流
    2) 圖形化了所有用例假想情節
    3) 顯示活動、過程或工作流

13. 風險評估
答:1) 有必要對項目進行風險評估
    2) 用例可以是風險評估的起點
    3) 高風險的用例應該在早期的迭代中開發
    4) 風險能出現在以下方面:
       . 需求風險
       . 技術風險
       . 技能風險
       . 資源風險
       . 政策風險

14. 需求風險
答:1) 需求風險指沒完全滿足客戶需求
    2) 你應該使工作於該系統的所有用戶和管理者都參與進來

15. 技術風險
答:記住已證實過的技術比未證實的技術所冒風險要小

16. 技能風險
答:確信你有所需的全部技能

17. 資源和政策風險
答:1) 資源風險指超出時間和資金預算
    2) 政治風險指與現行的政治規則衝突

18. 包圖
答:1) UML中存在符號以包裝任何邏輯相關的UML元素(類、對象、用例等等);
    2) 就像Java一樣,相關的類組織成不同的包;
    3) 這個符號像文件夾圖標;
    4) 有助於降低複雜性;
    5) 包間可存在依賴關係;
    6) 包有助於:
       . 查看沒有太多細節的大圖;
       . 查看獨立的小部分;
       . 創建部件中的一小部分;
       . 顯示組件間的依賴性;
       . 組件圖顯示了代碼物理組織形式,可以是一個類文件、Java源文件、jar文件、Java中的包、共享庫、對象代碼、RDB等等;
       . 當一個組件改變,它能影響其它——依賴性;
       . 組件應該有一個良好的接口,這樣你可以使用其它實現該接口的組件去替換它。

19. 部署圖介紹
答:1) 顯示了硬件組件間的物理關係;
    2) 每個符號代表了一些硬件設備:服務器、工作站、個人PC、傳感器、時鐘、電話交換機等。
    3) 當你獲得信息的時候可在任何階段添加以及修正。
    4) 符號間的連接伴隨着協議一起顯示。

系統對象和類分析

1.  分析階段的理解
答:1) 定義系統必須做什麼;
    2) 避免描述和實現的問題;
    3) 專注於系統的組件;
    4) 分析階段確定對象在運行時需要什麼以確保系統正確的功能;
    5) 分析階段在需求收集階段和用例階段之後,在系統設計階段之前;
    6) 在確定哪些是類和對象的時候,你應該回答以下問題:
       . 什麼對象組成了這個系統?
       . 什麼是可能的類?
       . 每個對象或類的責任是什麼?
       . 對象和類間是如何相聯繫的?
    7) 記住將所有新項目加入數據字典;

2.  關鍵字的提取
答:1) 當你定義組成系統的對象時,你應該創建一個滿足系統功能對象的列表;
    2) 列表中的對象稱爲對象侯選值;
    3) 然後你可以爲這個列表中最重要的對象準備一個子列表;
    4) 關鍵字代表了系統中主要或第一位的對象;

3.  用UML表示對象和類
答:1) 對象模型顯示了邏輯和特理的靜態視圖;
    2) 對象模型有二種圖:
       . 類圖:顯示了你必須創建一個系統所需的類。在運行時你可使用一個類創建許多對象。類圖必須顯示類間所有可能關係。
       . 對象圖:代表了系統中真實的對象,描述了特定案例中外在關係。
    3) 你可以使用主鍵去創建類圖和對象圖。
    4) 類圖在整個分析階段都會被更新和修正。

4.  屬性和方法
答:1) 對象包含了定義對象狀態的屬性;
    2) 方法定義了對象能執行的操作;
    3) 因此類必須定義這些屬性和方法;
    4) 在類執行之前,你必須定義所有的屬性和方法;
    5) 但是很多屬性和方法到設計階段才知道,加上所有你能加的先;
    6) 在設計階段存在的屬性和方法足夠了,但是他們的類型和參數還不夠。

5.  屬性和方法
答:二種類型的屬性:
    . 普通屬性:是一個對象中真實存在的變量或常量。一個普通屬性將會存儲對象中一些有意義的值。
    . 衍生屬性:並未存儲在系統中,通過系統中其它信息計算得出。

6.  聯接和鏈接
答:1) 聯接——針對類而言
       . 指類圖中用直線表示的關係;
       . 線可以是水平也可以是垂直的;
       . 可以在關係線上給一個邏輯名稱描述這個關係;
    2) 鏈接——針對對象而言
       . 指對象圖中二個對象間的關係;

7.  聯接和多樣性
答:1) 多樣性顯示了一個類中對象和另一個類中對象聯繫的可能性;
    2) 在類圖中,每個類只有一個矩形,因此聯接會確定一個類有多少個對象鏈接於另一個類的對象;
    3) 聯接線的末端有標記;
 
8.  多樣性的值
答:1) 2: 剛好二個;
    2) *: 0至多個;
    3) 5..15: 5到15個;
    4) 2,4,6: 2、4、6個;
    5) 10..*: 最少10個;
    6) 0..10: 最多10個;

9.  複雜性的聯接
答:1) 多樣性標記“*”出現在聯接的兩端;
    2) 你命名了類圖中所有聯接並分配了多樣性後,是時候重新審視他們並嘗試解決複雜聯接。可使用聯接類或符合條件聯接。

10. 聯接類(類似於數據庫中索引表)
答:1) 這意味着聯接它本身必須編碼爲一個類,這個類帶有解決衝突的屬性;
    2) 這種技術用於分析階段解決多對多關係;

11. 符合條件的聯接
答:1) 通過使用屬性值可解決多對多問題;
    2) 分配一個唯一的屬性值;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章