Presentation is loading. Please wait.

Presentation is loading. Please wait.

第10章 領域、概念與分析模型 10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型

Similar presentations


Presentation on theme: "第10章 領域、概念與分析模型 10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型"— Presentation transcript:

1 第10章 領域、概念與分析模型 10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型
10-4 分析類別與強韌圖的基礎 10-5 找出分析類別建立分析模型 10-6 本章總結

2 10-1 再談物件導向分析 領域、概念與分析模型 物件導向分析的主要工作 現象與概念

3 領域、概念與分析模型-說明 為了避免特定方法論造成讀者誤以為物件導向分析和設計只有一種過程,在這一節筆者準備從模型轉換和更新角度來說明物件導向分析的核心觀念,然後使用UML建立這些模型的類別圖,如右圖所示:

4 10-1-1 領域、概念與分析模型- 領域模型(Domain Model)
傳統程式設計方法是找出資料與資料之間的關係來建立資料模型(Data Model),最著名的就是資料庫設計的「實體關聯模型」(E-R Model)。 領域模型就是延伸實體關聯模型的觀念,用來描述問題領域(Problem Domain)中實體(Entity)與實體(Entity)之間的關係,我們可以將它視為是一種進階版本的資料模型,因為這個資料是物件,不只擁有屬性,它還有行為能力。

5 10-1-1 領域、概念與分析模型- 概念模型(Conceptual Model)
概念模型是在描述系統的本質,事實上,它就是一種領域模型,其主要差異在於領域模型著重在類別、屬性和關係;概念模型會進一步指定類別的責任。 概念模型有些像是房屋模型或樣品屋,可以提供我們一個軟體系統的抽象和直覺看法,讓我們感受一下將來開發出的系統是長什麼樣子。

6 10-1-1 領域、概念與分析模型- 分析模型(Analysis Model)
概念模型主要是由實體類別所組成,為了建立更佳結構和更容易修改的軟體系統,我們需要進一步將概念模型分割或加入三種分析類別: 邊界(Boundary) 控制(Control) 實體(Entity) 此時更新的模型稱為分析模型。

7 物件導向分析的主要工作-說明 物件導向分析的主要工作就是系統分析師的主要工作,其工作是將問題領域中找出的東西(物件)轉換成軟體系統的系統責任,即類別,如下圖所示:

8 物件導向分析的主要工作-主要活動 物件導向分析的主要工作是從問題領域找出物件,然後將它抽象化成類別(加上屬性)後,建立關係和指定類別的責任,換句話說,物件導向分析的主要活動有: 找出類別與屬性。 找出類別關係。 指定類別的責任。 分割或加入分析類別。

9 現象與概念-說明 因為類別和物件有時對於初學者來說很難分別,所以,筆者準備從概念(Concepts)和現象(Phenomena)角度來說明物件和類別的關係,幫助讀者將物件抽象化成類別(Class),即將現象分類成概念。

10 10-1-3 現象與概念-現象 現象(Phenomena)
現象是真實世界中,在指定問題領域內,我們可以認知出的物件。例如:紅色汽車、白色貨車和銀色休旅車等。

11 10-1-3 現象與概念-概念 概念(Concepts)
概念是在描述現象的共通特性,排除詳細部分。例如:紅色汽車、白色貨車和銀色休旅車是一種陸上交通工具的車輛。概念基本上有三種特性,如下所示: 名稱(Name):區別是不同概念的名稱。 目的(Purpose):描述現象需要符合哪些特性,才能成為概念的成員。 成員(Member):哪些現象屬於概念的成員。

12 現象與概念-範例 Vehicle是概念名稱,其目的是陸上交通工具,可以看到汽車、貨車、堆高機和休旅車都屬於概念的成員。

13 10-2 找出類別建立領域模型 識別物件 名詞分析法找出類別與屬性 找出類別關係

14 10-2-1 識別物件-物件的種類1 物件是從問題領域中找出的主意、想法和東西,可以包含:
有形的東西或物品:我們眼見和實際觸摸到的東西,例如:樹木、貓、狗、船和飛機等,電腦周邊的鍵盤、印表機和磁碟機,圖形使用介面的視窗和按鈕等。 扮演的角色:人類或組織扮演的角色,以人來說,特別是工作職稱,例如:老師、學生、和管理者等。

15 10-2-1 識別物件-物件的種類2 場所位置:實際的地點或辦公室,例如:倉庫、零售店和桌面等。
組織單位:公司團體的組織單位,例如:工作群組、部門和小組等。 設備裝置:連線的外部裝置,例如:刷卡機和控制器等。 事件、狀態與交易:特定條件或時間點產生的事件,例如:飛行、登入和信用卡開卡等,商業交易的合約和付款等。

16 10-2-1 識別物件-從問題領域識別出物件 筆者整理出幾個方法來幫助我們找出問題領域中的可能物件,如下所示:
問題領域中是否有【具體事物】,例如:人、書、電腦和車子等。 問題領域中是否有【事件】,例如:訂購商品、借書、參加會議和旅遊等。 問題領域中是否有【角色】或【組織成員】,例如:員工、客戶和售貨員等。 問題領域中是否有【位置】、【地方】或【結構】,例如:座標、圖書館、圓、三角形和長方形等。

17 名詞分析法找出類別與屬性- 步驟 名詞分析法找出類別與屬性已經有相當長的歷史,它就是從相關需求文件中找出名詞或名詞片語的概念(Concepts),這些都是可能的候選類別或屬性,步驟如下所示: Step 1:從第5章的事件表和第8章使用案例規格的描述中找出所有的名詞和名詞片語。 Step 2:直接觀察、請教領域專案或從現有系統、流程、報表或表單等其他資料來源找出更多的名詞和名詞片語。 Step 3:將名詞和名詞片語區分為概念或屬性,刪除哪些不相關的概念,最後剩下的概念就是領域模型的類別。 Step 4:針對每一個概念找出其屬性,請注意!我們只需找出重要的屬性,而不是完整的屬性清單。

18 10-2-2 名詞分析法找出類別與屬性- 分辨類別與屬性的原則
如果可以使用單一值的字串或數值來表示,就表示它是屬性,否則可能是類別,例如:【管理者】名詞代表姓名和薪水等多種資訊,不可能使用單一值來表示,所以它是概念;管理者【姓名】是單一值的字串,所以是屬性;不是概念。 如果找出的概念可以儲存資訊或提供服務,它多半是類別;不是屬性,例如:【車輛】名詞可以提供開車服務,所以它是類別;不是屬性。 當無法明確區分概念或屬性,或仍有些疑慮時,就將它視為概念,建立成類別。

19 10-2-2 名詞分析法找出類別與屬性- 篩選候選類別的原則
候選類別在真實世界是否擁有可識別的特性:類別一定擁有識別屬性,如此當建立物件時,才能分辨是不同的物件,如果找不到識別屬性,就表示它不是類別。 候選類別是可以定義的:一個類別一定可以使用一句描述來定義它,例如:員工是一位在旗標出版公司工作的人。 候選類別擁有屬性和行為:類別一定擁有屬性和行為。 候選類別是否與其他類別之間擁有關係:因為類別之間會擁有關係,但是屬性不會,例如:經理和公司車之間擁有駕駛關係。

20 10-2-2 名詞分析法找出類別與屬性- 案例:ATM自動櫃員機系統1

21 10-2-2 名詞分析法找出類別與屬性- 案例:ATM自動櫃員機系統2
然後分析每一個名詞和名詞片語來找出候選類別(即概念類別),如下表所示: 名詞和名詞子句 概念或屬性 是否候選 銀行 概念 帳戶 客戶 否,因為是動作者 ATM 提款金額 屬性 否,不屬於任何類別,和帳戶餘額相關 帳戶餘額 是,帳戶的屬性 交易

22 10-2-2 名詞分析法找出類別與屬性- 案例:ATM自動櫃員機系統3

23 找出類別關係-找出結合關係 結合關係(Associations)是一條類別之間互通訊息的管道,表示知道另一個類別存在,這種關係會自然發生在兩個類別之間,如下圖所示:

24 10-2-3 找出類別關係-結合清單 我們可以使用結合清單(Association List)來幫助我們找出結合關係,如下表所示: 分類
說明 類別A是類別B的實體部分 讀卡機是ATM的一部分 類別A是類別B的邏輯部分 訂單項目是訂單的一部分 類別B實際上包含(擁有)類別A 便利商店擁有POS銷售點系統 類別B邏輯上包含類別A 商品目錄包含商品描述 類別A使用或管理類別B 客戶使用ATM 類別B與類別A之間有通訊,表示類別B知道類別A的存在 客人與店員 類別A可以用來描述類別B 在訂單上會記錄業績屬於哪一位店員,即店員(A)可以用來描述訂單(B)

25 找出類別關係-指定可能的多重性 多重性(Multiplicity)表示實例參與類別關係的個數,我們只需標示出可能的多重性,並不用十分精確。在員工管理系統各概念類別之間的結合關係和多重性範例,如下圖所示:

26 找出類別關係-找出一般關係 一般關係(Generalization)就是繼承關係,當在描述文字中的類別出現多種相似但不同的類別時,就可以考量類別之間是否擁有一般關係。 例如:ATM系統會取得客戶的所有帳戶清單,換句話說,帳戶有很多種,當我們進一步找出支票帳戶和存款帳戶,因為它們都是一種帳戶,所以可以找出類別之間的一般關係,如右圖所示:

27 10-2-3 找出類別關係- 案例:ATM自動櫃員機系統1

28 10-2-3 找出類別關係- 案例:ATM自動櫃員機系統2

29 10-3 指定責任建立概念模型 CRC卡的基礎 CRC卡的基本分析流程 使用CRC卡找出類別責任

30 CRC卡的基礎-說明 CRC卡(Class,Responsibility,and Collaboration Card)是在1989年的OOPSLA,由Kent Beck和Ward Cunningham發表的方法,其主要目的是教授物件導向設計,到了1995年CRC卡已經廣泛使用在早期的物件導向系統開發。 CRC卡可以識別和定義類別的特性,雖然CRC卡不是UML認可的官方方式,但是仍然廣泛使用在物件導向分析階段。

31 CRC卡的基礎-圖例 CRC卡是一張尺寸約3-in X 5-in的卡片,如下圖所示:

32 CRC卡的基本分析流程 CRC卡屬於一種小組合作,使用腦力激盪方式進行的物件導向分析方法,事實上,CRC卡不只可以找出類別責任,更可以找出類別和屬性(在卡片背面可以列出類別屬性)。 CRC卡的分析流程可以分成兩個階段,如下所示: 階段一:收集資訊 主要目的是使用腦力激盪方式來收集資訊。 階段二:分析資訊 在完成階段一的資訊收集後,就可以將一張一張的CRC卡拿出來討論,決定它是類別或屬性。

33 使用CRC卡找出類別責任- CRC卡1 現在,我們就可以使用CRC卡找出ATM自動櫃員機系統的類別責任,然後更新領域模型,指定類別責任來建立概念模型。 在領域模型的【ATM】和【銀行】類別,其CRC卡如下圖所示:

34 使用CRC卡找出類別責任- CRC卡2 因為一位銀行客戶可以擁有1~2個帳戶和一張金融卡,我們可以使用金融卡卡號取得此位客戶的所有帳戶清單,所以需要一個【銀行客戶】新類別(請注意!使用ATM的客戶和銀行開戶的銀行客戶不見的是同一人),如下圖所示:

35 使用CRC卡找出類別責任- CRC卡3 在領域模型的【帳戶】和【交易】類別,其CRC卡如下圖所示:

36 10-3-3 使用CRC卡找出類別責任- 建立概念模型

37 10-4 分析類別與強韌圖的基礎 分析類別 強韌圖

38 分析類別- 實體類別 實體類別(Entity Classes)是軟體系統中需要長期保存資訊的類別,主要是源至概念模型的類別,或一些暫時實體類別(Transient Entity Classes),這是一種在使用案例結束後就消滅的物件,例如:搜尋結果的實體類別。 一般來說,實體類別常常是直接對應資料庫的資料表或檔案。在UML類別圖是使用<<entity>>模版來表示它是實體類別,如右圖所示:

39 分析類別- 邊界類別(說明) 邊界類別(Boundary Classes)也稱為介面類別,它是負責使用介面的類別,扮演動作者和系統之間的橋樑,通常就是GUI圖形使用介面元件的視窗或網頁表單。在UML類別圖是使用<<boundary>>模版來表示它是邊界類別。 對於小型軟體系統來說,因為類別不多,我們可以直接在實體類別建立使用介面,但是對於中大型軟體系統來說,這種作法,一旦更改使用介面,就需要大幅修改系統類別,因為使用介面和實體類別已經緊密的結合在一起。

40 分析類別- 邊界類別(圖例) 為了避免上述問題,我們可以使用邊界類別來分割使用介面和實體類別,系統的使用者直接面對的是邊界類別,它是系統與使用者互動的類別,如下圖所示:

41 分析類別- 邊界類別(範例) 例如:ATM自動櫃員機系統的提款本來是在【ATM】類別提供使用介面和【銀行】類別合作來完成提款行為,我們可以加入【提款使用介面】類別來處理使用介面和提款,讓它直接和【銀行】類別合作,如下圖所示:

42 分析類別- 控制類別(說明) 在系統中的控制類別(Control Classes)是扮演協調角色的類別,也稱為管理類別,它是連接邊界類別和實體類別的一種類別,負責管理行為和控制流程的執行,在UML類別圖是使用<<control>>模版表示它是控制類別。

43 分析類別- 控制類別(範例) 例如:在上述ATM自動櫃員機系統的邊界類別除了使用介面外,也分擔提款的流程控制,對於簡單流程還沒有關係,如果是複雜的流程控制,此時的邊界類別可能就太過複雜,我們可以再將流程控制獨立成控制類別,如下圖所示:

44 強韌圖-說明 強韌圖(Robustness Diagram)並不是UML標準圖形,它最早是由Ivar Jacobson在1992年提出,其目的是用來分析軟體系統的三種物件(即分析類別),和描述物件之間的互動連接,幫助我們建立物件導向設計所需的初始架構,和第11章的通訊圖與循序圖。

45 強韌圖-符號1 UML工具SIM支援繪製強韌圖,強韌圖的符號除了橢圓形的使用案例(同UML使用案例圖)外,就只有三種:邊界物件、控制物件和實體物件,如下圖所示:

46 強韌圖-符號2 在動作者和三種物件之間可以建立通訊結合關係(Communication Association)來傳遞訊息,例如:從動作者傳遞訊息給購物車介面,也就是執行購物車介面的行為,箭頭表示傳遞方向,如下圖所示:

47 10-4-2 強韌圖-連接規則(說明) 強韌圖的連接規則就是三種物件和動作者之間傳遞訊息的規則,共有四條規則,如下所示:
動作者只允許與邊界物件連接。 邊界物件只允許與控制者和動作者連接。 實體物件只允許與控制物件連接。 控制物件允許和邊界、實體和其他控制物件連接。

48 強韌圖-連接規則(圖例)

49 強韌圖-範例 客戶登入使用案例擁有一個登入表單的邊界物件、認證使用者身份規則的控制物件和儲存會員資料的實體物件(來自概念模型),我們可以建立客戶登入的強韌圖,如下圖所示:

50 10-5 找出分析類別建立分析模型 10-5-1 從使用案例情節建立活動圖 10-5-2 將活動圖轉換成強韌圖的轉換規則
找出分析類別建立分析模型

51 從使用案例情節建立活動圖- 說明 基本上,強韌圖本身讀起來就很像是一張活動圖,因為活動圖的動作轉換如同一個物件傳遞訊息給下一個物件,換句話說,我們可以將活動圖透過一些轉換規則來轉換成強韌圖。 在第7-2-3節筆者已經舉出一些範例將使用案例規格的主流程轉換成活動圖,不過,其目的只是視覺化顯示使用案例的操作步驟,所以轉換方式並不十分嚴謹。

52 10-5-1 從使用案例情節建立活動圖- 建立轉換所需的活動圖(動作順序)
因為本節是準備將建立的活動圖轉換成強韌圖,從活動圖的動作找出邊界和控制物件,所以需要使用一些標準寫法將主流程轉換成活動圖的動作,其動作轉換的標準順序,如下所示: 輸入介面->處理->輸出介面 上述順序的輸出介面有可能是下一個動作轉換的輸入介面。動作轉換順序是對應程式與使用者互動的過程,如下所示: 輸入資料->執行運算->輸出執行結果

53 10-5-1 從使用案例情節建立活動圖- 建立轉換所需的活動圖(範例)
例如:網站登入使用案例的主流程,如下所示: 主流程 1. 在登入表單輸入使用者名稱與密碼。 2. 驗證使用者。 3. 顯示網站首頁和使用者姓名。 上述主流程轉換成的活動圖,如右圖所示:

54 10-5-1 從使用案例情節建立活動圖- 建立轉換所需的活動圖(四種動作語法)
輸入資料動作:使用者輸入資料或設定條件,一定隱含一個輸入表單和送出資料,所以動作名稱是以「顯示」開始,之後是輸入表單名稱(也可以加上輸入資料的描述),在註解標示輸入資料,例如:之前的顯示登入表單。 選擇功能動作:使用者選擇功能表選單,動作名稱是顯示此功能表的名稱,在註解列出功能表選項,例如:顯示主選單選擇某一選項,在註解是選單的選項清單。 輸出資料動作:此動作就是顯示執行結果的介面,所以動作名稱是以「顯示」開始,之後是輸出結果,在註解標示輸出資料,例如:之前的顯示網站首頁。 執行運算、控制或商業邏輯的動作:如果在主流程是多個步驟的相關運算,請合併成單一動作即可,其動作名稱是執行的運算、搜尋、查詢、控制或商業邏輯,因為沒有資料輸入或輸出,所以不用加上註解,例如:之前的驗證使用者。

55 實體物件的屬性(也可能是邊界物件的屬性)
將活動圖轉換成強韌圖的轉換規則 現在我們就可以將上一節活動圖的四種動作和註解轉換成強韌圖物件,其基本轉換規則如下表所示: 活動圖的動作 可能轉換成的強韌圖物件 輸入資料動作 邊界物件 選擇功能動作 輸出資料動作 執行運算、控制或商業邏輯的動作 控制物件 註解的輸入資料 實體物件的屬性(也可能是邊界物件的屬性) 註解的輸出資料 實體物件的屬性 註解的選項資料 邊界物件的屬性

56 10-5-3 找出分析類別建立分析模型- 案例:找出登入使用案例的分析類別
筆者準備使用二個案例來說明如何從使用案例流程建立的活動圖轉換成強韌圖,並且從中找出分析模型的分析類別。 從第10-5-1節的活動圖,我們可以使用第10-5-2節的轉換規則轉換成強韌圖。

57 找出分析類別建立分析模型- 步驟一 Step 1:首先加入動作者【使用者】,然後將活動圖的所有動作轉換成邊界和控制物件,在名稱後分別加上「介面」和「控制」字尾,如下圖所示:

58 找出分析類別建立分析模型- 步驟二 Step 2:因為動作者有使用第一個邊界物件輸入使用者資料,所以先繪出動作者和第一個邊界物件之間的連接線,如下圖所示:

59 找出分析類別建立分析模型- 步驟三 Step 3:依據活動圖的動作轉換順序,建立物件之間的連接線,如下圖所示:

60 找出分析類別建立分析模型- 步驟四 Step 4:分析註解資料建立實體物件後,繪出控制物件與實體物件之間的連接線(驗證使用者需要取得會員資料),就可以完成強韌圖的建立,如下圖所示:

61 10-5-3 找出分析類別建立分析模型- 找出的分析類別
從前述強韌圖可以找出的分析類別,如下所示: 邊界類別:【登入表單介面】和【網站首頁介面】類別。 控制類別:【驗證使用者控制】類別。 實體類別:【會員資料】類別。如果在概念模型已經有此類別,就可以將註解的輸出與輸入資料轉換成此類別的新增屬性。

62 10-6 本章總結-說明 本章內容主要是說明如何建立物件導向分析的分析模型,筆者是從源於傳統系統開發的領域模型開始,一步一步經過概念模型來建立出分析模型的類別圖。 請記得!物件導向軟體系統的精神是讓各物件通力合作來完成使用案例的目標,只需你指定的類別責任與類別關係可以達成目標,並沒有規定一定要切割成三種分析類別,這也是為什麼同一個使用案例,讓不同人來進行分析,會有不同的結果。 相對的,本章說明的名詞分析法、CRC卡和強韌圖,只是為了幫助你建立領域模型、分析模型或概念模型,你不一定需要從頭開始一步一步建立,你可以全部使用或搭配一或二種方法,其最終目的就是能夠建立出分析模型或概念模型即可。

63 10-6 本章總結-建議流程 對於Web或視窗介面的軟體系統,在教學上為了讓初學者能夠實作物件導向分析(使用最少的經驗法則來實作),筆者的建議流程是從使用案例主流程的活動圖開始,在轉換成強韌圖過程中,找出邊界、控制和實體類別,如果需要,再使用第10-2和第10-3節的方法,從找出的實體類別反過來建立更完整的分析模型,其流程如下圖所示:

64 End


Download ppt "第10章 領域、概念與分析模型 10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型"

Similar presentations


Ads by Google