• 沒有找到結果。

第10章:領域、概念與分析模型

N/A
N/A
Protected

Academic year: 2021

Share "第10章:領域、概念與分析模型"

Copied!
64
0
0

加載中.... (立即查看全文)

全文

(1)

第 10 章 領域、概念與分析模型

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

(2)

10-1

再談物件導向分析

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

(3)

10-1-1 領域、概念與分析模型 - 說明

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

(4)

1011 領域、概念與分析模型

-領域模型( Domain Model )

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

(5)

1011 領域、概念與分析模型

-概念模型( Conceptual Model )

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

(6)

1011 領域、概念與分析模型

-分析模型( Analysis Model )

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

(7)

10-1-2 物件導向分析的主要工作 - 說明

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

(8)

10-1-2 物件導向分析的主要工作 - 主要活動

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

(9)

10-1-3 現象與概念 - 說明

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

(10)

10-1-3 現象與概念 - 現象

現象( Phenomena )

 現象是真實世界中,在指定問題領域內,我們可 以認知出的物件。例如:紅色汽車、白色貨車和 銀色休旅車等。

(11)

10-1-3 現象與概念 - 概念

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

(12)

10-1-3 現象與概念 - 範例

Vehicle 是概念名稱,其目的是陸上交通工具,可

以看到汽車、貨車、堆高機和休旅車都屬於概念 的成員。

(13)

10-2 找出類別建立領域模型

10-2-1 識別物件

10-2-2 名詞分析法找出類別與屬性10-2-3 找出類別關係

(14)

10-2-1 識別物件 - 物件的種類 1

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

(15)

10-2-1 識別物件 - 物件的種類 2

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

(16)

10-2-1 識別物件 - 從問題領域識別出物件

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

(17)

1022 名詞分析法找出類別與屬性

-步驟

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

(18)

1022 名詞分析法找出類別與屬性

-分辨類別與屬性的原則

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

(19)

1022 名詞分析法找出類別與屬性

-篩選候選類別的原則

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

(20)

1022 名詞分析法找出類別與屬性

-案例: ATM 自動櫃員機系統 1

從 ATM 自動櫃員機系統【提款】使用案例規格(

第 8-3-2 節)和問題描述中,我們可以找出重要的 名詞和名詞片語,如下圖所示:

(21)

1022 名詞分析法找出類別與屬性

-案例: ATM 自動櫃員機系統 2

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

(22)

1022 名詞分析法找出類別與屬性

-案例: ATM 自動櫃員機系統 3

依據上表的說明,我們可以找出 ATM 自動櫃員機

(23)

10-2-3 找出類別關係 - 找出結合關係

結合關係( 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)

10-2-3 找出類別關係 - 指定可能的多重性

多重性( Multiplicity )表示實例參與類別關係的個數,我

們只需標示出可能的多重性,並不用十分精確。在員工管 理系統各概念類別之間的結合關係和多重性範例,如下圖 所示:

(26)

10-2-3 找出類別關係 - 找出一般關係

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

(27)

1023 找出類別關係

-案例: ATM 自動櫃員機系統 1

現在,我們可以找出 ATM 自動櫃員機系統的類別

(28)

1023 找出類別關係

-案例: ATM 自動櫃員機系統 2

 然後再加上帳戶、支票帳戶和存款帳戶的一般關 係來建立 ATM 自動櫃員機系統的領域模型,如下 圖所示:

(29)

10-3 指定責任建立概念模型

10-3-1 CRC 卡的基礎

10-3-2 CRC 卡的基本分析流程

(30)

10-3-1 CRC 卡的基礎 - 說明

CRC 卡( Class,Responsibility,and Collaboration Card

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

(31)

10-3-1 CRC 卡的基礎 - 圖例

(32)

10-3-2 CRC 卡的基本分析流程

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

(33)

1033 使用 CRC 卡找出類別責任

-CRC

卡 1

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

(34)

1033 使用 CRC 卡找出類別責任

-CRC

卡 2

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

(35)

1033 使用 CRC 卡找出類別責任

-CRC

卡 3

 在領域模型的【帳戶】和【交易】類別,其 CRC 卡如下圖所示:

(36)

1033 使用 CRC 卡找出類別責任

(37)

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

10-4-1 分析類別

(38)

1041 分析類別

-實體類別

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

(39)

1041 分析類別

-邊界類別 ( 說明 )

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

(40)

1041 分析類別

-邊界類別 ( 圖例 )

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

(41)

1041 分析類別

-邊界類別 ( 範例 )

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

(42)

1041 分析類別

-控制類別 ( 說明 )

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

(43)

1041 分析類別

-控制類別 ( 範例 )

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

(44)

10-4-2 強韌圖 - 說明

強韌圖( Robustness Diagram )並不是 UML 標準

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

(45)

10-4-2 強韌圖 - 符號 1

UML 工具 SIM 支援繪製強韌圖,強韌圖的符號除

了橢圓形的使用案例(同 UML 使用案例圖)外, 就只有三種:邊界物件、控制物件和實體物件, 如下圖所示:

(46)

10-4-2 強韌圖 - 符號 2

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

(47)

10-4-2 強韌圖 - 連接規則 ( 說明 )

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

(48)
(49)

10-4-2 強韌圖 - 範例

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

(50)

10-5 找出分析類別建立分析模型

10-5-1 從使用案例情節建立活動圖

10-5-2 將活動圖轉換成強韌圖的轉換規則10-5-3 找出分析類別建立分析模型

(51)

1051 從使用案例情節建立活動圖

-說明

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

(52)

1051 從使用案例情節建立活動圖

-建立轉換所需的活動圖 ( 動作順序 )

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

(53)

1051 從使用案例情節建立活動圖

-建立轉換所需的活動圖 ( 範例 )

 例如:網站登入使用案例的 主流程,如下所示: 主流程 1. 在登入表單輸入使用者名稱與密碼 。 2. 驗證使用者。 3. 顯示網站首頁和使用者姓名。  上述主流程轉換成的活動圖 ,如右圖所示:

(54)

1051 從使用案例情節建立活動圖

-建立轉換所需的活動圖 ( 四種動作語法 )

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

(55)

10-5-2 將活動圖轉換成強韌圖的轉換規則

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

(56)

1053 找出分析類別建立分析模型

-案例:找出登入使用案例的分析類別

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

(57)

1053 找出分析類別建立分析模型

-步驟一

Step 1 :首先加入動作者【使用者】,然後將活動圖的所

有動作轉換成邊界和控制物件,在名稱後分別加上「介面 」和「控制」字尾,如下圖所示:

(58)

1053 找出分析類別建立分析模型

-步驟二

Step 2 :因為動作者有使用第一個邊界物件輸入使用者資

料,所以先繪出動作者和第一個邊界物件之間的連接線, 如下圖所示:

(59)

1053 找出分析類別建立分析模型

-步驟三

Step 3 :依據活動圖的動作轉換順序,建立物件

(60)

1053 找出分析類別建立分析模型

-步驟四

Step 4 :分析註解資料建立實體物件後,繪出控制物件與

實體物件之間的連接線(驗證使用者需要取得會員資料) ,就可以完成強韌圖的建立,如下圖所示:

(61)

1053 找出分析類別建立分析模型

-找出的分析類別

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

(62)

10-6 本章總結 - 說明

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

(63)

10-6 本章總結 - 建議流程

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

(64)

參考文獻

相關文件

第一梯次 第二梯次 第二梯次 第二梯次 第二梯次 第三梯次 第三梯次 第三梯次 第三梯次 2.未來將停辦職類 未來將停辦職類 未來將停辦職類 未來將停辦職類、 、 、 、級別 級別 級別 級別:

第一梯次 第二梯次 第二梯次 第二梯次 第二梯次 第三梯次 第三梯次 第三梯次 第三梯次 2.未來將停辦職類 未來將停辦職類 未來將停辦職類 未來將停辦職類、 、 、 、級別 級別 級別 級別:

收費原則 :CCC Code前6碼相同者歸為1類 登錄10個類別以 內收費 NT$5,000. 超過10個類別每類加收費 NT$1,000(超過部分)

類別 項目名稱 對象或條件限制 主要內容 辦理機關. 職 業

目次 課程類別 課程主題 時數

八、本職類原分甲、乙、丙三級實施檢定多年,各事業機構常按其等級分別進用或提

以下 Java 程式執行完後,輸出結果為何?(A)無法編譯,因為 Rectangle 類別不能同時 extends 一個類別且 implemets 一個介面(B)無法編譯,因為 Shapes 類別沒有

學校名稱 類別 系代碼 系科名稱 名額 備