面向物件分析與設計 - 功能建模



功能建模提供了面向物件分析模型的過程視角,以及對系統應該做什麼的概述。它藉助資料流圖 (DFD) 定義了系統內部過程的功能。它描述了資料值的函式推導,而沒有說明它們在計算時是如何推匯出來的,或者為什麼需要計算它們。

資料流圖

功能建模透過 DFD 的層次結構來表示。DFD 是一個系統的圖形表示,它顯示了系統的輸入、對輸入的處理、系統的輸出以及內部資料儲存。DFD 說明了對物件或系統執行的一系列轉換或計算,以及影響轉換的外部控制和物件。

Rumbaugh 等人將 DFD 定義為:“資料流圖是一個圖形,它顯示資料值從物件中的源流向轉換它們的程序,再到其他物件上的目標。”

DFD 的四個主要部分是:

  • 程序,
  • 資料流,
  • 參與者,以及
  • 資料儲存。

DFD 的其他部分是:

  • 約束,以及
  • 控制流。

DFD 的特徵

程序

程序是轉換資料值的計算活動。整個系統可以被視為一個高級別程序。一個程序可以進一步分解成更小的元件。最低級別的程序可能是一個簡單的函式。

DFD 中的表示 - 程序表示為一個橢圓形,其名稱寫在其中,幷包含固定數量的輸入和輸出資料值。

示例 - 下圖顯示了一個名為 Compute_HCF_LCM 的程序,它接受兩個整數作為輸入,並輸出它們的 HCF(最大公約數)和 LCM(最小公倍數)。

DFD to calculate HCM and LCM

資料流

資料流表示兩個程序之間的資料流動。它可能存在於參與者和程序之間,或者資料儲存和程序之間。資料流表示資料項在計算的某個點上的值。此值不會因資料流而改變。

DFD 中的表示 - 資料流由帶方向的弧或箭頭表示,並用其攜帶的資料項的名稱進行標記。

在上圖中,Integer_a 和 Integer_b 表示到程序的輸入資料流,而 L.C.M. 和 H.C.F. 是輸出資料流。

資料流可能在以下情況下被分叉:

  • 輸出值被髮送到多個位置,如下圖所示。此處,輸出箭頭未標記,因為它們表示相同的值。

  • 資料流包含聚合值,並且每個元件都被髮送到不同的位置,如下圖所示。此處,每個分叉的元件都已標記。

Forked Data Flow

參與者

參與者是主動物件,透過產生資料並將其輸入到系統或使用系統產生的資料來與系統互動。換句話說,參與者充當資料來源和資料匯。

DFD 中的表示 - 參與者用矩形表示。參與者連線到輸入和輸出,並位於 DFD 的邊界上。

示例 - 下圖顯示了櫃檯銷售系統中的參與者,即客戶和銷售員。

Actors in DFD

資料儲存

資料儲存是被動物件,充當資料的儲存庫。與參與者不同,它們不能執行任何操作。它們用於儲存資料並檢索儲存的資料。它們表示資料庫中的資料結構、磁碟檔案或表。

DFD 中的表示 - 資料儲存用包含資料儲存名稱的兩條平行線表示。每個資料儲存至少連線到一個程序。輸入箭頭包含修改資料儲存內容的資訊,而輸出箭頭包含從資料儲存檢索的資訊。當要檢索部分資訊時,輸出箭頭將被標記。未標記的箭頭表示完全資料檢索。雙向箭頭表示檢索和更新。

示例 - 下圖顯示了一個數據儲存 Sales_Record,它儲存所有銷售的詳細資訊。對資料儲存的輸入包括銷售的詳細資訊,例如商品、計費金額、日期等。要查詢平均銷售額,該過程檢索銷售記錄並計算平均值。

Data Store in DFD

約束

約束指定需要隨時間滿足的條件或限制。它們允許新增新規則或修改現有規則。約束可以出現在面向物件分析的所有三個模型中。

  • 在物件建模中,約束定義物件之間的關係。它們還可以定義物件在不同時間可能採用的不同值之間的關係。

  • 在動態建模中,約束定義不同物件的狀態和事件之間的關係。

  • 在功能建模中,約束定義對轉換和計算的限制。

表示 - 約束以花括號內的字串形式呈現。

示例 - 下圖顯示了計算公司員工工資的 DFD 的一部分,該公司已決定向銷售部門的所有員工提供獎勵,並增加人力資源部門所有員工的工資。可以看出,約束 {Dept:Sales} 導致僅當部門為銷售時才計算獎勵,而約束 {Dept:HR} 導致僅當部門為人力資源時才計算加薪。

Constraints in DFD

控制流

一個程序可能與某個布林值相關聯,並且僅當該值為真時才進行評估,儘管它不是程序的直接輸入。這些布林值稱為控制流。

DFD 中的表示 - 控制流由從產生布爾值的程序到受其控制的程序的虛線弧表示。

示例 - 下圖表示算術除法的 DFD。測試除數是否為非零。如果它不為零,則控制流 OK 的值為 True,隨後 Divide 程序計算商和餘數。

Control Flow in DFD

開發系統的 DFD 模型

為了開發系統的 DFD 模型,構建了 DFD 的層次結構。頂級 DFD 包含單個程序以及與其互動的參與者。

在每個後續的較低級別,逐漸包含更多詳細資訊。一個程序被分解成子程序,識別子程序之間的資料流,確定控制流並定義資料儲存。在分解程序時,程序的輸入或輸出資料流應與 DFD 的下一級別的輸入或輸出資料流匹配。

示例 - 讓我們考慮一個軟體系統,批發商軟體,它使批發商店的交易自動化。該商店批次銷售,客戶包括商人、零售店店主。每個客戶都被要求註冊其個人資訊,並被分配一個唯一的客戶程式碼 C_Code。一旦銷售完成,商店就會註冊其詳細資訊併發送貨物進行發貨。每年,商店都會向其客戶分發聖誕禮物,根據總銷售額和店主決定,禮物包括銀幣或金幣。

批發軟體的功能模型如下所示。下圖顯示了頂級 DFD。它將軟體顯示為單個程序以及與其互動的參與者。

系統中的參與者是:

  • 客戶
  • 銷售人員
  • 店主
DFD of Wholesale Store

在下一級 DFD 中,如下圖所示,識別了系統的主要程序,定義了資料儲存,並建立了程序與參與者和資料儲存的互動。

在系統中,可以識別三個程序,它們是:

  • 註冊客戶
  • 處理銷售
  • 確定禮物

需要的資料儲存是:

  • 客戶詳細資訊
  • 銷售詳細資訊
  • 禮物詳細資訊
DFD of Wholesale Software

下圖顯示了“註冊客戶”程序的詳細資訊。其中有三個程序:驗證詳細資訊、生成 C_Code 和更新客戶詳細資訊。當輸入客戶的詳細資訊時,會對其進行驗證。如果資料正確,則生成 C_Code 並更新資料儲存“客戶詳細資訊”。

DFD of Customer Process

下圖顯示了“確定禮物”程序的擴充套件。它有兩個程序:查詢總銷售額和決定禮物硬幣型別。查詢總銷售額程序計算每個客戶的年度總銷售額並記錄資料。以該記錄和店主決定作為輸入,透過“決定禮物硬幣型別”程序分配禮物硬幣。

DFD of Gift Process

DFD 的優缺點

優點 缺點
DFD 描述了系統的邊界,因此有助於描繪外部物件與系統內部程序之間的關係。 建立 DFD 需要很長時間,這對於實際目的來說可能不可行。
它們幫助使用者瞭解系統。 DFD 沒有提供任何關於時間相關行為的資訊,即它們沒有指定何時執行轉換。
圖形表示用作程式設計師開發系統的藍圖。 它們沒有闡明計算的頻率或計算的原因。
DFD 提供了有關係統程序的詳細資訊。 DFD 的準備工作是一個複雜的過程,需要相當的專業知識。此外,對於非技術人員來說,也很難理解。
它們用作系統文件的一部分。 準備方法是主觀的,並留有很大的空間不精確。

物件模型、動態模型和功能模型之間的關係

物件模型、動態模型和功能模型對於完整的面向物件分析是互補的。

  • 物件建模以物件的形式開發軟體系統的靜態結構。因此,它顯示了系統的“執行者”。

  • 動態建模開發物件響應外部事件的時間行為。它顯示了對物件執行的操作序列。

  • 功能模型概述了系統應該做什麼。

功能模型和物件模型

從物件模型的角度來看,功能模型的四個主要部分是:

  • 程序 - 程序意味著需要實現的物件的方法。

  • 參與者 - 參與者是物件模型中的物件。

  • 資料儲存 - 這些要麼是物件模型中的物件,要麼是物件的屬性。

  • 資料流 − 資料流向或來自參與者表示對物件的操作或由物件執行的操作。資料流向或來自資料儲存表示查詢或更新。

功能模型和動態模型

動態模型說明操作何時執行,而功能模型說明操作如何執行以及需要哪些引數。由於參與者是主動物件,因此動態模型必須指定其何時採取行動。資料儲存是被動物件,它們僅響應更新和查詢;因此,動態模型不需要指定它們何時採取行動。

物件模型和動態模型

動態模型顯示物件的狀​​態以及在事件發生時執行的操作以及隨後的狀態變化。物件模型顯示了由於這些變化而導致的物件狀態。

廣告

© . All rights reserved.