面向物件正規化



面向物件 (OO) 正規化起源於一種新的程式設計方法的初始概念,而對設計和分析方法的興趣則出現得晚得多。OO 分析和設計正規化是 OO 程式語言廣泛採用的邏輯結果。

  • 第一種面嚮物件語言是 **Simula**(模擬真實系統),它由挪威計算中心的研究人員於 1960 年開發。

  • 1970 年,**Alan Kay** 和他在施樂帕洛阿爾託研究中心的研究小組建立了一臺名為 **Dynabook** 的個人電腦,以及第一種純面向物件程式語言 (OOPL) - Smalltalk,用於為 Dynabook 程式設計。

  • 在 1980 年代,**Grady Booch** 發表了一篇題為面向物件設計的論文,主要介紹了程式語言 Ada 的設計。在隨後的版本中,他將自己的想法擴充套件到了一種完整的面向物件設計方法。

  • 在 1990 年代,**Coad** 將行為思想融入到面向物件方法中。

其他重要的創新包括 **James Rum Baugh** 的物件建模技術 (OMT) 和 **Ivar Jacobson** 的面向物件軟體工程 (OOSE)。

OO 正規化簡介

OO 正規化是開發任何軟體的重要方法。大多數架構風格或模式,如管道和過濾器、資料儲存庫和基於元件的模式,都可以使用這種正規化來實現。

面向物件系統的基本概念和術語 -

物件

物件是在面向物件環境中存在的真實世界元素,可以具有物理或概念上的存在。每個物件都有 -

  • 標識,將其與系統中的其他物件區分開來。

  • 狀態,確定物件的特徵屬性以及物件持有的屬性值。

  • 行為,表示物件根據其狀態變化執行的外部可見活動。

可以根據應用程式的需要對物件進行建模。物件可能具有物理存在,例如客戶、汽車等;或者無形的概念存在,例如專案、流程等。

類表示具有相同特徵屬性並表現出共同行為的物件的集合。它提供了可以從中建立物件的藍圖或描述。建立作為類成員的物件稱為例項化。因此,物件是類的**例項**。

類的組成部分是 -

  • 要從類例項化的一組物件的屬性。通常,一個類的不同物件在屬性值上存在一些差異。屬性通常被稱為類資料。

  • 一組描述類物件行為的操作。操作也稱為函式或方法。

示例

讓我們考慮一個簡單的類 Circle,它表示二維空間中的幾何圖形圓。該類的屬性可以識別如下 -

  • x-coord,表示中心的 x 座標
  • y-coord,表示中心的 y 座標
  • a,表示圓的半徑

其一些操作可以定義如下 -

  • findArea(),計算面積的方法
  • findCircumference(),計算周長的方法
  • scale(),增加或減少半徑的方法

封裝

封裝是將屬性和方法都繫結到類中的過程。透過封裝,可以隱藏類的內部細節。它允許僅透過類提供的介面從外部訪問類的元素。

多型性

多型性最初是一個希臘詞,表示能夠採用多種形式。在面向物件正規化中,多型性意味著以不同的方式使用操作,具體取決於它們正在操作的例項。多型性允許具有不同內部結構的物件具有共同的外部介面。多型性在實現繼承時特別有效。

示例

讓我們考慮兩個類 Circle 和 Square,每個類都有一個方法 findArea()。儘管類中方法的名稱和目的相同,但內部實現,即計算面積的過程對於每個類都是不同的。當 Circle 類的物件呼叫其 findArea() 方法時,操作會找到圓的面積,而不會與 Square 類的 findArea() 方法發生衝突。

關係

為了描述一個系統,必須提供系統的動態(行為)和靜態(邏輯)規範。動態規範描述了物件之間的關係,例如訊息傳遞。靜態規範描述了類之間的關係,例如聚合、關聯和繼承。

訊息傳遞

任何應用程式都需要許多物件以和諧的方式互動。系統中的物件可以透過使用訊息傳遞相互通訊。假設一個系統有兩個物件 - obj1 和 obj2。如果 obj1 想要 obj2 執行其方法之一,則物件 obj1 會向物件 obj2 傳送訊息。

組合或聚合

聚合或組合是類之間的一種關係,透過這種關係,一個類可以由其他類的任何物件的組合構成。它允許物件直接放置在其他類的主體中。聚合被稱為“部分-整體”或“具有-a”關係,能夠從整體導航到其各個部分。聚合物件是由一個或多個其他物件組成的物件。

關聯

關聯是一組具有共同結構和共同行為的連結。關聯描述了一個或多個類的物件之間的關係。連結可以定義為關聯的例項。關聯的度數表示參與連線的類的數量。度數可以是一元、二元或三元。

  • 一元關係連線同一類的物件。
  • 二元關係連線兩個類的物件。
  • 三元關係連線三個或更多類的物件。

繼承

這是一種機制,允許透過擴充套件和改進其功能來從現有類建立新類。現有類稱為基類/父類/超類,新類稱為派生類/子類/子類。

子類可以繼承或派生超類(s)的屬性和方法,前提是超類允許這樣做。此外,子類可以新增自己的屬性和方法,並且可以修改任何超類方法。繼承定義了“是 - a”關係。

示例

從哺乳動物類,可以派生許多類,例如人類、貓、狗、牛等。人類、貓、狗和牛都具有哺乳動物的獨特特徵。此外,每個都有自己的特定特徵。可以說,奶牛“是 - a”哺乳動物。

OO 分析

在軟體開發的面向物件分析階段,確定系統需求,識別類,並確認類之間的關係。OO 分析的目的是瞭解應用領域和系統的特定需求。此階段的結果是需求規範以及對系統邏輯結構和可行性的初步分析。

三種用於面向物件分析的分析技術相互結合使用,分別是物件建模、動態建模和功能建模。

物件建模

物件建模根據物件開發軟體系統的靜態結構。它識別物件、物件可以分組到的類以及物件之間的關係。它還識別表徵每個類的主要屬性和操作。

物件建模的過程可以視覺化為以下步驟 -

  • 識別物件並將其分組到類中
  • 識別類之間的關係
  • 建立使用者物件模型圖
  • 定義使用者物件屬性
  • 定義應在類上執行的操作

動態建模

在分析了系統的靜態行為之後,需要檢查其相對於時間和外部變化的行為。這是動態建模的目的。

動態建模可以定義為“描述單個物件如何響應事件的一種方式,無論是其他物件觸發的內部事件,還是外部世界觸發的外部事件”。

動態建模的過程可以視覺化為以下步驟 -

  • 識別每個物件的狀態
  • 識別事件並分析操作的適用性
  • 構建動態模型圖,包括狀態轉換圖
  • 用物件屬性表示每個狀態
  • 驗證繪製的狀態轉換圖

功能建模

功能建模是面向物件分析的最後一個組成部分。功能模型顯示在物件內部執行的過程以及資料如何在方法之間移動時發生的變化。它指定物件建模的操作和動態建模的動作的含義。功能模型對應於傳統結構化分析的資料流圖。

功能建模的過程可以視覺化為以下步驟 -

  • 識別所有輸入和輸出
  • 構建顯示功能依賴關係的資料流圖
  • 說明每個功能的目的
  • 識別約束條件
  • 指定最佳化標準

面向物件設計

在分析階段之後,概念模型將使用面向物件設計 (OOD) 進一步發展為面向物件模型。在 OOD 中,分析模型中與技術無關的概念被對映到實現類,識別約束並設計介面,從而生成解決方案域的模型。OO 設計的主要目標是開發系統的結構體系結構。

面向物件設計可以分為以下幾個階段:

  • 定義系統的上下文
  • 設計系統架構
  • 識別系統中的物件
  • 構建設計模型
  • 指定物件介面

OO 設計可以分為兩個階段:概念設計和詳細設計。

概念設計

在此階段,識別構建系統所需的所有類。此外,將特定的職責分配給每個類。類圖用於闡明類之間的關係,互動圖用於顯示事件的流程。它也稱為**高階設計**。

詳細設計

在此階段,根據互動圖將屬性和操作分配給每個類。狀態機圖用於描述設計的更多細節。它也稱為**低階設計**。

設計原則

以下是一些主要的設計原則:

解耦原則

對於一組高度相互依賴的類,很難維護系統,因為一個類的修改可能會導致其他類的級聯更新。在 OO 設計中,可以透過引入新類或繼承來消除緊耦合。

確保內聚性

一個內聚的類執行一組密切相關的功能。缺乏內聚性意味著:一個類執行不相關的功能,儘管它不會影響整個系統的操作。它使軟體的整個結構難以管理、擴充套件、維護和更改。

開閉原則

根據此原則,系統應能夠擴充套件以滿足新的需求。由於系統擴充套件,不應該修改系統的現有實現和程式碼。此外,在開閉原則中必須遵循以下準則:

  • 對於每個具體類,必須維護單獨的介面和實現。

  • 在多執行緒環境中,保持屬性私有。

  • 儘量減少全域性變數和類變數的使用。

廣告