iOS 開發之 OOA (物件導向分析) & OOD (物件導向設計)& OOP (物件導向程式設計)
OOA
OOA 基本概念
OOA 全稱 Object-Oriented Analysis 物件導向分析
指的是在一個系統的開發過程中進行了系統業務調查以後,按照物件導向的思想來分析問題。OOA 與結構化分析有較大的區別。OOA 所強調的是在系統調查資料的基礎上,針對 OO 方法所需要的素材進行的歸類化分析和整理,而不是對管理業務現狀和方法的分析。
OOA 模型由 5 個層次(主題層、物件類層、結構層、屬性層和服務層)和 5 個活動(標識物件類、標識結構、定義主題、定義屬性和定義服務)組成。在這種方法中定義了兩種物件類之間的結構,一種稱為分類結構,一種稱為組裝結構。分類結構就是所謂的一般與特殊的關係。組裝結構則反映了物件之間的整體與部分的關係。
OOA 在定義屬性的同時,要識別例項連線。例項連線是一個例項與另一個例項的對映關係。
OOA 在定義服務的同時要識別訊息連線。當一個物件需要向另一個物件傳送訊息時,它們之間就存在訊息連線。
OOA 中的 5 個層次和 5 個活動繼續貫穿在 OOD(物件導向設計)過程中。OOD 模型由 4 各部分組成。它們分別是設計問題域部分、設計人機互動部分、設計任務管理部分、和設計資料管理部分。
OOA 的主要原則
-
抽象:從許多食物中捨棄個別的、非本質的特徵,抽取共同的、本質性的特徵,就叫做抽象。愁鄉石形成概念的必須手段。
抽象原則有兩個方面的意義:1,儘管問題域中的事物是很複雜的,但是分析員並不需要了解和描述它們的一切,只需要分析其中與系統目標有關的事物及其本質性特徵;
2,通過捨棄個體事物在細節上的差異,抽取其共同特性而得到一批事物的抽象概念;
抽象是物件導向方法中使用最為廣泛的原則。抽象原則包括過程抽象和資料抽象兩個方面。
過程抽象是指,任何一個完成確定功能的操作序列,其使用者都可以把它看做一個單一的實體,儘管實際上它可能是由一系列更低階的操作完成的。
資料抽象是根據施加於資料之上的操作來定義資料型別,並限定資料的值只能由這些操作來修改和觀察。資料抽象是 OOA 的核心原則。它強調把資料(屬性)和操作(服務)結合為一個不可分的系統單位(即物件),物件的外部只需要知道它做什麼,而不必知道它如何做;
封裝就是把物件的屬性和服務結合為一個不可分的系統單位,並儘可能隱蔽物件的內部細節;
繼承:特殊類的物件擁有的其一般類的全部屬性與服務,稱作特殊類對一般類的繼承;
在 OOA 中運用繼承原則,就是在每個由一般類和特殊類形成的一半特殊結構總,把一般類的物件例項和所有特殊類的物件例項都共同具有的屬性和服務,一次性的在一般類中進行顯式的定義。在特殊類中不在重複的定義一般類中已定義的東西,但是在語義上,特殊類卻自動的、隱含地擁有它的一般類(以及所有更上層的一般類)中定義的全部屬性和服務。繼承原則的好處是:是系統模型比較簡練也比較清晰;
- 分類:
就是把具有相同屬性和服務的物件劃分為一類,用類作為這些物件的抽象描述。分類原則實際上是抽象原則運用於物件描述時的一種表現形式。
- 聚合:
又稱組裝,其原則是:把一個複雜的事物看成若干比較簡單的事物組裝體,從而簡化對複雜事物的描述;
- 關聯:
是人類思考問題時經常運用的思想方法:通過一個事物聯想到另外的事物。能使人發生聯想的原因是事物之間確實存在著某些聯絡;
- 訊息通訊:
這一原則要求物件之間只能通過訊息進行通訊,而不允許在物件之外直接地存取物件內部的屬性。通過訊息進行通訊是由於封裝原則而引起的。在 OOA 中要求訊息連線表示出物件之間的動態聯絡;
- 粒度控制:
一般來講,人在面對一個複雜的問題域時,不可能在同一時刻既能縱觀全域性,又能洞察秋毫。因此需要控制自己的視野。考慮全域性時,注意其大的組成部分,暫時不詳查每一部分的具體的細節。考慮某部分的細節時則暫時撇開其餘的部分。著就是粒度控制原則;
- 行為分析:
顯示世界中事物的行為是複雜的。由大量的事物所構成的問題域中各種行為旺旺相互依賴交織;
物件導向分析產生三種模型
- 物件模型:
對用例模型進行分析,把系統分解成互相協作的分析類,通過類圖\物件圖描述物件\物件的屬性\物件間的關係,是系統的靜態模型;
- 動態模型:
描述系統的動態行為,通過時序圖/協作圖/描述物件的互動,以揭示物件間如何協作來完成每個具體的用例。單個物件的狀態變化/動態行為可以通過狀態圖來表示;
- 功能模型:
OOA 的主要優點
- 加強了對問題域和系統責任的理解;
- 改進與分析有關的各類人員之間的交流;
- 對需求的變化具有較強的適應性;
- 支援軟體複用;
- 貫穿軟體宣告週期全過程的一致性;
- 實用性;
- 有利於使用者參與;
OOA 方法的具體步驟
在用 OOA 具體分析一個事物時。大致上遵循如下 5 個基本步驟:
- 確定物件和類
這裡所說的物件是對資料及其處理方式的抽象,它反映了系統儲存和處理現實世界總某些事物的資訊能力。類是多個物件的共同屬性和方法集合的描述,它包括如何在一個類中建立一個新物件的描述;
- 確定結構
structure
結構是指問題域的複雜性和連線關係。類成員結構反映了泛華—特化關係,整體-部分結構反映整體和區域性之間的關係;
- 確定主題
subject
主題是指事物的總體概貌和總體分析模型;
- 確定屬性
attribute
屬性就是資料元素,可用來描述物件或分類結構的例項,可在圖中給出,並在物件的儲存中指定;
- 確定方法
method
方法是在收到訊息後必須進行的一些處理方法:方法要在圖中定義,並在物件的儲存中指定。對於每個物件和結構來說,那些用來增加、修改、刪除和選擇一個方法本身都是隱含的(雖然它們是要在物件的儲存中定義的,但並不在圖上給出),而有些則是顯示的;
OOD
OOD 基本概念
OOD 全稱 Object-Oriented Design 物件導向設計
OOD 是 OO 方法中一箇中間過渡環節。其主要作用是對 OOA 分析的結構作進一步的規範化整理,以便能夠被 OOP 物件導向的程式設計
直接接受。
OOD 是一個軟體設計方法,是一種工程化規範。這是毫無疑問的。按照 Bjarne Stroustrup 的說法,OOP 是決定你要的類,給每一個類提供完整的一組操作。
明確地使用繼承來表現共同點。由這個定義,我們可以看出 OOD 就是“根據需求決定所需的類、類的操作以及類之間關聯的過程”。
OOD 的目標是管理程式內部各部分的相互依賴。為了達到這個目標,OOD 要求將程式分成塊,每個塊的規模應該小到可以管理的程度,然後分別將各個塊隱藏在介面 interface
的後面,讓它們只通過介面相互交流。比如說,如果用OOD 的方法類設計一個伺服器-客戶端 client-server
應用,那麼伺服器和客戶端之間不應該有直接地依賴,而是應該讓伺服器的介面和客戶端的介面相互依賴。
這種依賴關係的轉換使得系統的各部分具有了可複用性。還是拿上面那個例子來說,客戶端就不必依賴於特定的伺服器,所以就可以複用到其他的環境下。如果要複用某一個程式塊,只要實現必須的介面就行了。
OOD 是一種解決軟體問題的設計正規化 paradigm
,一種抽象的正規化。使用 OOD 這種設計正規化,我們可以用物件 object
來表現問題領域 problem domain
的實體,每個物件都有相應的狀態和行為。
抽象可以分成很多層次,從非常概括的到非常特殊的都有,而物件可能處於任何一個抽象層次上。另外,彼此不同但又相互關聯的物件可以共同構成抽象。只要這些物件之間有相似性,就可以把它們當成同一類的物件類處理。
OOP 基本概念
OOP 全稱 Object Oriented Programming 物件導向程式設計
OOP 是一種實現的方法。在這種方法中,程式被組織成許多組互相協作的物件,每個物件代表某個類的一個例項,而類則屬於一個通過繼承關係形成的層次結構具體實現。
OOP 的三大特性:
封裝:
就是將一個類使用和實現分開,只保留部分介面和方法與外部聯絡 。
繼承:
子類自動繼承其父級類中的屬性和方法,並可以新增新的屬性和方法或者對部分屬性和方法進行重寫。繼承增加了程式碼的可重用性。
多型:
多個子類中雖然都具有同一個方法,但是這些子類例項化的物件呼叫這些相同的方法後卻可以獲得完全不同的結果,多型性增強了軟體的靈活性。
相關文章
- 物件導向設計(OOD)原則物件
- Python OOP 物件導向程式設計PythonOOP物件程式設計
- 如何向妻子解釋物件導向設計(OOD)物件
- The Principles of OOD 物件導向設計原則物件
- 物件導向程式設計物件程式設計
- 物件導向(oop)物件OOP
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- JS物件導向程式設計(一):物件JS物件程式設計
- 十三、物件導向程式設計物件程式設計
- js物件導向程式設計JS物件程式設計
- 程式設計思想 物件導向程式設計物件
- 十六、物件導向程式設計物件程式設計
- perl 物件導向程式設計物件程式設計
- LotusScript物件導向程式設計物件程式設計
- Javascript 物件導向程式設計JavaScript物件程式設計
- Go物件導向程式設計OOP的實現Go物件程式設計OOP
- JS物件導向設計-建立物件JS物件
- Python之物件導向程式設計Python物件程式設計
- 翻譯 | The Principles of OOD 物件導向設計原則物件
- JavaScript設計模式之物件導向程式設計JavaScript設計模式物件程式設計
- 物件導向-物件導向思想物件
- Scala的物件導向程式設計物件程式設計
- JavaScript物件導向程式設計理解!JavaScript物件程式設計
- Python物件導向程式設計Python物件程式設計
- 物件導向程式設計C++物件程式設計C++
- Python 物件導向程式設計Python物件程式設計
- Javascript 物件導向程式設計(一)JavaScript物件程式設計
- Javascript 物件導向程式設計(二)JavaScript物件程式設計
- Javascript 物件導向程式設計(三)JavaScript物件程式設計
- JS物件導向的程式設計JS物件程式設計
- javascript:物件導向的程式設計JavaScript物件程式設計
- 再見物件導向程式設計?物件程式設計
- 淺談物件導向程式設計物件程式設計
- 這才是物件導向程式設計物件程式設計
- java物件導向程式設計(轉)Java物件程式設計
- 06 物件導向程式設計 (續)物件程式設計
- 用java進行物件導向程式設計,物件導向是什麼意思Java物件程式設計
- JS物件導向設計模式JS物件設計模式