第 10 章 領域、概念與分析模型
10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型 10-4 分析類別與強韌圖的基礎 10-5 找出分析類別建立分析模型 10-6 本章總結10-1
再談物件導向分析
10-1-1 領域、概念與分析模型 10-1-2 物件導向分析的主要工作 10-1-3 現象與概念
10-1-1 領域、概念與分析模型 - 說明
為了避免特定方法論 造成讀者誤以為物件 導向分析和設計只有 一種過程,在這一節 筆者準備從模型轉換 和更新角度來說明物 件導向分析的核心觀 念,然後使用 UML 建立這些模型的類別 圖,如右圖所示:1011 領域、概念與分析模型
-領域模型( Domain Model )
傳統程式設計方法是找出資料與資料之間的關係 來建立資料模型( Data Model ),最著名的就是 資料庫設計的「實體關聯模型」( E-R Model )。 領域模型就是延伸實體關聯模型的觀念,用來描 述問題領域( Problem Domain )中實體( Entity )與實體( Entity )之間的關係,我們可以將它 視為是一種進階版本的資料模型,因為這個資料 是物件,不只擁有屬性,它還有行為能力。1011 領域、概念與分析模型
-概念模型( Conceptual Model )
概念模型是在描述系統的本質,事實上,它就是 一種領域模型,其主要差異在於領域模型著重在 類別、屬性和關係;概念模型會進一步指定類別 的責任。 概念模型有些像是房屋模型或樣品屋,可以提供 我們一個軟體系統的抽象和直覺看法,讓我們感 受一下將來開發出的系統是長什麼樣子。1011 領域、概念與分析模型
-分析模型( Analysis Model )
概念模型主要是由實體類別所組成,為了建立更 佳結構和更容易修改的軟體系統,我們需要進一 步將概念模型分割或加入三種分析類別: • 邊界( Boundary ) • 控制( Control ) • 實體( Entity ) 此時更新的模型稱為分析模型。10-1-2 物件導向分析的主要工作 - 說明
物件導向分析的主要工作就是系統分析師的主要 工作,其工作是將問題領域中找出的東西(物件 )轉換成軟體系統的系統責任,即類別,如下圖 所示:
10-1-2 物件導向分析的主要工作 - 主要活動
物件導向分析的主要工作是從問題領域找出物件 ,然後將它抽象化成類別(加上屬性)後,建立 關係和指定類別的責任,換句話說,物件導向分 析的主要活動有: • 找出類別與屬性。 • 找出類別關係。 • 指定類別的責任。 • 分割或加入分析類別。10-1-3 現象與概念 - 說明
因為類別和物件有時對於初學者來說很難分別, 所以,筆者準備從概念( Concepts )和現象 ( Phenomena )角度來說明物件和類別的關係, 幫助讀者將物件抽象化成類別( Class ),即將現 象分類成概念。10-1-3 現象與概念 - 現象
現象( Phenomena )
現象是真實世界中,在指定問題領域內,我們可 以認知出的物件。例如:紅色汽車、白色貨車和 銀色休旅車等。
10-1-3 現象與概念 - 概念
概念( Concepts ) 概念是在描述現象的共通特性,排除詳細部分。 例如:紅色汽車、白色貨車和銀色休旅車是一種 陸上交通工具的車輛。概念基本上有三種特性, 如下所示: • 名稱( Name ):區別是不同概念的名稱。 • 目的( Purpose ):描述現象需要符合哪些特性,才能 成為概念的成員。 • 成員( Member ):哪些現象屬於概念的成員。10-1-3 現象與概念 - 範例
Vehicle 是概念名稱,其目的是陸上交通工具,可
以看到汽車、貨車、堆高機和休旅車都屬於概念 的成員。
10-2 找出類別建立領域模型
10-2-1 識別物件 10-2-2 名詞分析法找出類別與屬性 10-2-3 找出類別關係
10-2-1 識別物件 - 物件的種類 1
物件是從問題領域中找出的主意、想法和東西, 可以包含: • 有形的東西或物品:我們眼見和實際觸摸到的 東西,例如:樹木、貓、狗、船和飛機等,電 腦周邊的鍵盤、印表機和磁碟機,圖形使用介 面的視窗和按鈕等。 • 扮演的角色:人類或組織扮演的角色,以人來 說,特別是工作職稱,例如:老師、學生、和 管理者等。10-2-1 識別物件 - 物件的種類 2
• 場所位置:實際的地點或辦公室,例如:倉庫 、零售店和桌面等。 • 組織單位:公司團體的組織單位,例如:工作 群組、部門和小組等。 • 設備裝置:連線的外部裝置,例如:刷卡機和 控制器等。 • 事件、狀態與交易:特定條件或時間點產生的 事件,例如:飛行、登入和信用卡開卡等,商 業交易的合約和付款等。10-2-1 識別物件 - 從問題領域識別出物件
筆者整理出幾個方法來幫助我們找出問題領域中 的可能物件,如下所示: • 問題領域中是否有【具體事物】,例如:人、書、電 腦和車子等。 • 問題領域中是否有【事件】,例如:訂購商品、借書 、參加會議和旅遊等。 • 問題領域中是否有【角色】或【組織成員】,例如: 員工、客戶和售貨員等。 • 問題領域中是否有【位置】、【地方】或【結構】, 例如:座標、圖書館、圓、三角形和長方形等。1022 名詞分析法找出類別與屬性
-步驟
名詞分析法找出類別與屬性已經有相當長的歷史,它就是 從相關需求文件中找出名詞或名詞片語的概念( Concepts ),這些都是可能的候選類別或屬性,步驟如下所示: • Step 1 :從第 5 章的事件表和第 8 章使用案例規格的描述中找出 所有的名詞和名詞片語。 • Step 2 :直接觀察、請教領域專案或從現有系統、流程、報表或 表單等其他資料來源找出更多的名詞和名詞片語。 • Step 3 :將名詞和名詞片語區分為概念或屬性,刪除哪些不相關 的概念,最後剩下的概念就是領域模型的類別。 • Step 4 :針對每一個概念找出其屬性,請注意!我們只需找出重 要的屬性,而不是完整的屬性清單。1022 名詞分析法找出類別與屬性
-分辨類別與屬性的原則
如果可以使用單一值的字串或數值來表示,就表 示它是屬性,否則可能是類別,例如:【管理 者】名詞代表姓名和薪水等多種資訊,不可能使 用單一值來表示,所以它是概念;管理者【姓 名】是單一值的字串,所以是屬性;不是概念。 如果找出的概念可以儲存資訊或提供服務,它多 半是類別;不是屬性,例如:【車輛】名詞可以 提供開車服務,所以它是類別;不是屬性。 當無法明確區分概念或屬性,或仍有些疑慮時, 就將它視為概念,建立成類別。1022 名詞分析法找出類別與屬性
-篩選候選類別的原則
候選類別在真實世界是否擁有可識別的特性:類別一定擁 有識別屬性,如此當建立物件時,才能分辨是不同的物件 ,如果找不到識別屬性,就表示它不是類別。 候選類別是可以定義的:一個類別一定可以使用一句描述 來定義它,例如:員工是一位在旗標出版公司工作的人。 候選類別擁有屬性和行為:類別一定擁有屬性和行為。 候選類別是否與其他類別之間擁有關係:因為類別之間會 擁有關係,但是屬性不會,例如:經理和公司車之間擁有 駕駛關係。1022 名詞分析法找出類別與屬性
-案例: ATM 自動櫃員機系統 1
從 ATM 自動櫃員機系統【提款】使用案例規格(
第 8-3-2 節)和問題描述中,我們可以找出重要的 名詞和名詞片語,如下圖所示:
1022 名詞分析法找出類別與屬性
-案例: ATM 自動櫃員機系統 2
然後分析每一個名詞和名詞片語來找出候選類別 (即概念類別),如下表所示: 名詞和名詞子句 概念或屬性 是否候選 銀行 概念 是 帳戶 概念 是 客戶 概念 否,因為是動作者 ATM 概念 是 提款金額 屬性 否,不屬於任何類別,和帳 戶餘額相關 帳戶餘額 屬性 是,帳戶的屬性 交易 概念 是1022 名詞分析法找出類別與屬性
-案例: ATM 自動櫃員機系統 3
依據上表的說明,我們可以找出 ATM 自動櫃員機
10-2-3 找出類別關係 - 找出結合關係
結合關係( Associations )是一條類別之間互通訊
息的管道,表示知道另一個類別存在,這種關係 會自然發生在兩個類別之間,如下圖所示:
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 )10-2-3 找出類別關係 - 指定可能的多重性
多重性( Multiplicity )表示實例參與類別關係的個數,我
們只需標示出可能的多重性,並不用十分精確。在員工管 理系統各概念類別之間的結合關係和多重性範例,如下圖 所示:
10-2-3 找出類別關係 - 找出一般關係
一般關係( Generalization )就是 繼承關係,當在描述文字中的類 別出現多種相似但不同的類別時 ,就可以考量類別之間是否擁有 一般關係。 例如: ATM 系統會取得客戶的所 有帳戶清單,換句話說,帳戶有 很多種,當我們進一步找出支票 帳戶和存款帳戶,因為它們都是 一種帳戶,所以可以找出類別之 間的一般關係,如右圖所示:1023 找出類別關係
-案例: ATM 自動櫃員機系統 1
現在,我們可以找出 ATM 自動櫃員機系統的類別
1023 找出類別關係
-案例: ATM 自動櫃員機系統 2
然後再加上帳戶、支票帳戶和存款帳戶的一般關 係來建立 ATM 自動櫃員機系統的領域模型,如下 圖所示:
10-3 指定責任建立概念模型
10-3-1 CRC 卡的基礎 10-3-2 CRC 卡的基本分析流程
10-3-1 CRC 卡的基礎 - 說明
CRC 卡( Class,Responsibility,and Collaboration Card
)是在 1989 年的 OOPSLA ,由 Kent Beck 和 Ward Cunningham 發表的方法,其主要目的是教授物件 導向設計,到了 1995 年 CRC 卡已經廣泛使用在早 期的物件導向系統開發。 CRC 卡可以識別和定義類別的特性,雖然 CRC 卡 不是 UML 認可的官方方式,但是仍然廣泛使用在 物件導向分析階段。
10-3-1 CRC 卡的基礎 - 圖例
10-3-2 CRC 卡的基本分析流程
CRC 卡屬於一種小組合作,使用腦力激盪方式進行的 物件導向分析方法,事實上, CRC 卡不只可以找出 類別責任,更可以找出類別和屬性(在卡片背面可 以列出類別屬性)。 CRC 卡的分析流程可以分成兩個階段,如下所示: • 階段一:收集資訊 主要目的是使用腦力激盪方式來收集資訊。 • 階段二:分析資訊 在完成階段一的資訊收集後,就可以將一張一張 的 CRC 卡拿出來討論,決定它是類別或屬性。1033 使用 CRC 卡找出類別責任
-CRC
卡 1
現在,我們就可以使用 CRC 卡找出 ATM 自動櫃員 機系統的類別責任,然後更新領域模型,指定類 別責任來建立概念模型。 在領域模型的【 ATM 】和【銀行】類別,其 CRC 卡如下圖所示:1033 使用 CRC 卡找出類別責任
-CRC
卡 2
因為一位銀行客戶可以擁有 1~2 個帳戶和一張金 融卡,我們可以使用金融卡卡號取得此位客戶的 所有帳戶清單,所以需要一個【銀行客戶】新類 別(請注意!使用 ATM 的客戶和銀行開戶的銀行 客戶不見的是同一人),如下圖所示:1033 使用 CRC 卡找出類別責任
-CRC
卡 3
在領域模型的【帳戶】和【交易】類別,其 CRC 卡如下圖所示:
1033 使用 CRC 卡找出類別責任
10-4 分析類別與強韌圖的基礎
10-4-1 分析類別1041 分析類別
-實體類別
實體類別( Entity Classes )是軟體 系統中需要長期保存資訊的類別, 主要是源至概念模型的類別,或一 些暫時實體類別( Transient Entity Classes ),這是一種在使用案例結 束後就消滅的物件,例如:搜尋結 果的實體類別。 一般來說,實體類別常常是直接對 應資料庫的資料表或檔案。在 UML 類別圖是使用 <<entity>> 模版來表 示它是實體類別,如右圖所示:1041 分析類別
-邊界類別 ( 說明 )
邊界類別( Boundary Classes )也稱為介面類別, 它是負責使用介面的類別,扮演動作者和系統之 間的橋樑,通常就是 GUI 圖形使用介面元件的視 窗或網頁表單。在 UML 類別圖是使用 <<boundary>> 模版來表示它是邊界類別。 對於小型軟體系統來說,因為類別不多,我們可 以直接在實體類別建立使用介面,但是對於中大 型軟體系統來說,這種作法,一旦更改使用介面 ,就需要大幅修改系統類別,因為使用介面和實 體類別已經緊密的結合在一起。1041 分析類別
-邊界類別 ( 圖例 )
為了避免上述問題,我們可以使用邊界類別來分 割使用介面和實體類別,系統的使用者直接面對 的是邊界類別,它是系統與使用者互動的類別, 如下圖所示:1041 分析類別
-邊界類別 ( 範例 )
例如: ATM 自動櫃員機系統的提款本來是在【 ATM 】類 別提供使用介面和【銀行】類別合作來完成提款行為,我 們可以加入【提款使用介面】類別來處理使用介面和提款 ,讓它直接和【銀行】類別合作,如下圖所示:1041 分析類別
-控制類別 ( 說明 )
在系統中的控制類別( Control Classes )是扮演協 調角色的類別,也稱為管理類別,它是連接邊界 類別和實體類別的一種類別,負責管理行為和控 制流程的執行,在 UML 類別圖是使用 <<control>> 模版表示它是控制類別。1041 分析類別
-控制類別 ( 範例 )
例如:在上述 ATM 自動櫃員機系統的邊界類別除 了使用介面外,也分擔提款的流程控制,對於簡 單流程還沒有關係,如果是複雜的流程控制,此 時的邊界類別可能就太過複雜,我們可以再將流 程控制獨立成控制類別,如下圖所示:10-4-2 強韌圖 - 說明
強韌圖( Robustness Diagram )並不是 UML 標準
圖形,它最早是由 Ivar Jacobson 在 1992 年提出, 其目的是用來分析軟體系統的三種物件(即分析 類別),和描述物件之間的互動連接,幫助我們 建立物件導向設計所需的初始架構,和第 11 章的 通訊圖與循序圖。
10-4-2 強韌圖 - 符號 1
UML 工具 SIM 支援繪製強韌圖,強韌圖的符號除
了橢圓形的使用案例(同 UML 使用案例圖)外, 就只有三種:邊界物件、控制物件和實體物件, 如下圖所示:
10-4-2 強韌圖 - 符號 2
在動作者和三種物件之間可以建立通訊結合關係 ( Communication Association )來傳遞訊息,例 如:從動作者傳遞訊息給購物車介面,也就是執 行購物車介面的行為,箭頭表示傳遞方向,如下 圖所示:10-4-2 強韌圖 - 連接規則 ( 說明 )
強韌圖的連接規則就是三種物件和動作者之間傳 遞訊息的規則,共有四條規則,如下所示: • 動作者只允許與邊界物件連接。 • 邊界物件只允許與控制者和動作者連接。 • 實體物件只允許與控制物件連接。 • 控制物件允許和邊界、實體和其他控制物件連接。10-4-2 強韌圖 - 範例
客戶登入使用案例擁有一個登入表單的邊界物件 、認證使用者身份規則的控制物件和儲存會員資 料的實體物件(來自概念模型),我們可以建立 客戶登入的強韌圖,如下圖所示:
10-5 找出分析類別建立分析模型
10-5-1 從使用案例情節建立活動圖 10-5-2 將活動圖轉換成強韌圖的轉換規則 10-5-3 找出分析類別建立分析模型
1051 從使用案例情節建立活動圖
-說明
基本上,強韌圖本身讀起來就很像是一張活動圖 ,因為活動圖的動作轉換如同一個物件傳遞訊息 給下一個物件,換句話說,我們可以將活動圖透 過一些轉換規則來轉換成強韌圖。 在第 7-2-3 節筆者已經舉出一些範例將使用案例規 格的主流程轉換成活動圖,不過,其目的只是視 覺化顯示使用案例的操作步驟,所以轉換方式並 不十分嚴謹。1051 從使用案例情節建立活動圖
-建立轉換所需的活動圖 ( 動作順序 )
因為本節是準備將建立的活動圖轉換成強韌圖, 從活動圖的動作找出邊界和控制物件,所以需要 使用一些標準寫法將主流程轉換成活動圖的動作 ,其動作轉換的標準順序,如下所示: 輸入介面 -> 處理 -> 輸出介面 上述順序的輸出介面有可能是下一個動作轉換的 輸入介面。動作轉換順序是對應程式與使用者互 動的過程,如下所示: 輸入資料 -> 執行運算 -> 輸出執行結果1051 從使用案例情節建立活動圖
-建立轉換所需的活動圖 ( 範例 )
例如:網站登入使用案例的 主流程,如下所示: 主流程 1. 在登入表單輸入使用者名稱與密碼 。 2. 驗證使用者。 3. 顯示網站首頁和使用者姓名。 上述主流程轉換成的活動圖 ,如右圖所示:1051 從使用案例情節建立活動圖
-建立轉換所需的活動圖 ( 四種動作語法 )
輸入資料動作:使用者輸入資料或設定條件,一定隱含一個輸入表單 和送出資料,所以動作名稱是以「顯示」開始,之後是輸入表單名稱 (也可以加上輸入資料的描述),在註解標示輸入資料,例如:之前 的顯示登入表單。 選擇功能動作:使用者選擇功能表選單,動作名稱是顯示此功能表的 名稱,在註解列出功能表選項,例如:顯示主選單選擇某一選項,在 註解是選單的選項清單。 輸出資料動作:此動作就是顯示執行結果的介面,所以動作名稱是以 「顯示」開始,之後是輸出結果,在註解標示輸出資料,例如:之前 的顯示網站首頁。 執行運算、控制或商業邏輯的動作:如果在主流程是多個步驟的相關 運算,請合併成單一動作即可,其動作名稱是執行的運算、搜尋、查 詢、控制或商業邏輯,因為沒有資料輸入或輸出,所以不用加上註解 ,例如:之前的驗證使用者。10-5-2 將活動圖轉換成強韌圖的轉換規則
現在我們就可以將上一節活動圖的四種動作和註解轉換成 強韌圖物件,其基本轉換規則如下表所示: 活動圖的動作 可能轉換成的強韌圖物件 輸入資料動作 邊界物件 選擇功能動作 邊界物件 輸出資料動作 邊界物件 執行運算、控制或商業邏輯的動作 控制物件 註解的輸入資料 實體物件的屬性(也可能是邊 界物件的屬性) 註解的輸出資料 實體物件的屬性 註解的選項資料 邊界物件的屬性1053 找出分析類別建立分析模型
-案例:找出登入使用案例的分析類別
筆者準備使用二個案例來 說明如何從使用案例流程 建立的活動圖轉換成強韌 圖,並且從中找出分析模 型的分析類別。 從第 10-5-1 節的活動圖, 我們可以使用第 10-5-2 節 的轉換規則轉換成強韌圖 。1053 找出分析類別建立分析模型
-步驟一
Step 1 :首先加入動作者【使用者】,然後將活動圖的所
有動作轉換成邊界和控制物件,在名稱後分別加上「介面 」和「控制」字尾,如下圖所示:
1053 找出分析類別建立分析模型
-步驟二
Step 2 :因為動作者有使用第一個邊界物件輸入使用者資
料,所以先繪出動作者和第一個邊界物件之間的連接線, 如下圖所示:
1053 找出分析類別建立分析模型
-步驟三
Step 3 :依據活動圖的動作轉換順序,建立物件
1053 找出分析類別建立分析模型
-步驟四
Step 4 :分析註解資料建立實體物件後,繪出控制物件與
實體物件之間的連接線(驗證使用者需要取得會員資料) ,就可以完成強韌圖的建立,如下圖所示: