- OOAD 教程
- OOAD - 首頁
- OOAD - 面向物件正規化
- OOAD - 面向物件模型
- OOAD - 面向物件系統
- 面向物件設計(OOAD) - 面向物件原則
- OOAD - 面向物件分析
- OOAD - 動態建模
- OOAD - 功能建模
- OOAD - UML分析模型
- OOAD - UML基本符號
- OOAD - UML結構圖
- OOAD - UML行為圖
- OOAD - 面向物件設計
- OOAD - 實現策略
- OOAD - 測試與質量保證
- OOAD 有用資源
- OOAD - 快速指南
- OOAD - 有用資源
面向物件設計(OOAD) - 面向物件原則
面向物件系統的原則
面向物件系統的概念框架基於物件模型。面向物件系統中存在兩類元素:
主要元素 - 所謂主要元素是指,如果一個模型缺少任何一個這些元素,它就不再是面向物件的。四個主要元素是:
- 抽象
- 封裝
- 模組化
- 層次結構
次要元素 - 所謂次要元素是指,這些元素很有用,但不是物件模型中不可或缺的部分。三個次要元素是:
- 型別化
- 併發
- 永續性
抽象
抽象意味著在面向物件程式設計中關注元素或物件的本質特徵,忽略其無關或偶然的屬性。本質特徵是相對於物件使用環境而言的。
Grady Booch 對抽象的定義如下:
“抽象表示物件的本質特徵,這些特徵將其與所有其他型別的物件區分開來,從而相對於觀察者的視角提供了清晰定義的概念邊界。”
示例 - 當設計一個名為 Student 的類時,包含屬性 enrolment_number、name、course 和 address,而排除諸如 pulse_rate 和 size_of_shoe 等特徵,因為它們與教育機構的視角無關。
封裝
封裝是將屬性和方法都繫結到一個類中的過程。透過封裝,可以將類的內部細節隱藏在外部。類具有提供使用者介面的方法,使用者可以透過這些方法使用類提供的服務。
模組化
模組化是將問題(程式)分解成一組模組的過程,以降低問題的整體複雜性。Booch 將模組化定義為:
“模組化是系統的一個屬性,它已被分解成一組內聚且鬆散耦合的模組。”
模組化與封裝緊密相關。模組化可以被視為一種將封裝的抽象對映到具有高內聚性和低模組間互動或耦合的實際物理模組的方式。
層次結構
用 Grady Booch 的話說,“層次結構是抽象的等級或排序”。透過層次結構,系統可以由相互關聯的子系統組成,這些子系統可以擁有它們自己的子系統,以此類推,直到達到最小的級別元件。它使用了“分而治之”的原則。層次結構允許程式碼重用。
面向物件分析中的兩種層次結構是:
“IS-A” 層次結構 - 它定義了繼承中的層次關係,透過它可以從一個超類派生出多個子類,這些子類又可以有子類,以此類推。例如,如果我們從 Flower 類派生出一個 Rose 類,我們可以說玫瑰“是”花。
“PART-OF” 層次結構 - 它透過聚合定義層次關係,透過它一個類可以由其他類組成。例如,一朵花由萼片、花瓣、雄蕊和雌蕊組成。可以說花瓣是花的“一部分”。
型別化
根據抽象資料型別的理論,型別是一組元素的特徵。在面向物件程式設計中,類被視為具有與任何其他型別不同的屬性的型別。型別化是強制執行物件是單個類或型別的例項的概念。它還強制執行不同型別的物件通常不能互換;只有在絕對需要時,才能以非常有限的方式互換。
兩種型別的型別化是:
強型別 - 在這裡,對物件的運算在編譯時進行檢查,就像在 Eiffel 程式語言中一樣。
弱型別 - 在這裡,可以向任何類傳送訊息。運算只在執行時檢查,就像在 Smalltalk 程式語言中一樣。
併發
作業系統中的併發允許同時執行多個任務或程序。當系統中存在單個程序時,據說存在單個控制執行緒。但是,大多數系統都具有多個執行緒,有些處於活動狀態,有些正在等待 CPU,有些處於掛起狀態,有些已終止。具有多個 CPU 的系統固有地允許併發的控制執行緒;但是,在單個 CPU 上執行的系統使用適當的演算法來為執行緒提供公平的 CPU 時間,從而實現併發。
在面向物件環境中,存在活動物件和非活動物件。活動物件具有獨立的控制執行緒,可以與其他物件的執行緒併發執行。活動物件彼此同步,也與純順序物件同步。
永續性
物件佔據記憶體空間並在特定時間段記憶體在。在傳統程式設計中,物件的生存期通常是建立它的程式的執行生存期。在檔案或資料庫中,物件的生存期長於建立物件的程序的持續時間。物件即使在其建立者停止存在後繼續存在,這個屬性被稱為永續性。