標籤:
OOA - OOD - OOP 簡介
一. OOA
- OOA : (Object-Oriented Analysis, 物件導向分析方法) 。
- 是在一個系統的開發過程中進行了系統業務調查以後,按照物件導向的思想來分析問題。OOA與結構化分析有較大的區別。OOA所強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。
- OOA(物件導向的分析)模型由5個層次(主題層、對象類層、結構層、屬性層和服務層)和5個活動(標識對象類、標識結構、定義主題、定義屬性和定義服務)組成。在這種方法中定義了兩種對象類之間的結構,一種稱為分類結構,一種稱為組裝結構。分類結構就是所謂的一般與特殊的關係。組裝結構則反映了對象之間的整體與部分的關係。
- OOA在定義屬性的同時,要識別執行個體串連。執行個體串連是一個執行個體與另一個執行個體的映射關係。
- OOA在定義服務的同時要識別訊息串連。當一個對象需要向另一對象發送訊息時,它們之間就存在訊息串連。
- OOA 中的5個層次和5個活動繼續貫穿在OOD(畫向對象的設計)過程中。OOD模型由4個部分組成。它們分別是設計問題域部分、設計人機互動部分、設計任務管理部分和設計資料管理部分。
- OOA 的主要原則
(1)抽象
- (2)封裝就是把對象的屬性和服務結合為一個不可分的系統單位,並儘可能隱蔽對象的內部細節。
- (3)繼承:特殊類的對象擁有的其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。
- (4)分類:就是把具有相同屬性和服務的對象劃分為一類,用類作為這些對象的抽象描述。分類原則實際上是抽象原則運用於對象描述時的一種表現形式。
- (5)彙總:又稱組裝,其原則是:把一個複雜的事物看成若干比較簡單的事物的組裝體,從而簡化對複雜事物的描述。
- (6)關聯:是人類思考問題時經常運用的思想方法:通過一個事物聯想到另外的事物。能使人發生聯想的原因是事物之間確實存在著某些聯絡。
- (7)訊息通訊:這一原則要求對象之間只能通過訊息進行通訊,而不允許在對象之外直接地存取對象內部的屬性。通過訊息進行通訊是由於封裝原則而引起的。在OOA中要求用訊息串連表示出對象之間的動態聯絡。
- (8)粒度控制:一般來講,人在面對一個複雜的問題域時,不可能在同一時刻既能縱觀全域,又能洞察秋毫。因此需要控制自己的視野:考慮全域時,注意其大的組成部分,暫時不詳察每一部分的具體的細節;考慮某部分的細節時則暫時撇開其餘的部分。這就是粒度控制原則。
- (9)行為分析:現實世界中事物的行為是複雜的。由大量的事物所構成的問題域中各種行為往往相互依賴、相互交織。
- OOA的主要優點
- (1)加強了對問題域和系統責任的理解;
- (2)改進與分析有關的各類人員之間的交流;
- (3)對需求的變化具有較強的適應性;
- (4)支援軟體複用。
- (5)貫穿軟體生命週期全過程的一致性。
- (6)實用性;
- (7)有利於使用者參與。
- OOA方法的基本步驟
二. OOD
OOD: (Object-Oriented Design,物件導向設計) 。
3 明確地使用繼承來表現共同點。
- OOD和傳統方法有什麼區別?
還記得結構化設計方法嗎?程式被劃分成許多個模組,這些模組被組織成一個樹型結構。這棵樹的根就是主模組,葉子就是工具模組和最低級的功能模組。同時,這棵樹也表示調用結構:每個模組都調用自己的直接下級模組,並被自己的直接上級模組調用。 那麼,哪個模組負責收集應用程式最重要的那些策略?當然是最頂端的那些。在底下的那些模組只管實現最小的細節,最頂端的模組關心規模最大的問題。所以,在這個體繫結構中越靠上,概念的抽象層次就越高,也越接近問題領域;體繫結構中位置越低,概念就越接近細節,與問題領域的關係就越少,而與解決方案領域的關係就越多。 但是,由於上方的模組需要調用下方的模組,所以這些上方的模組就依賴於下方的細節。換句話說,與問題領域相關的抽象要依賴於與問題領域無關的細節!這也就是說,當實現細節發生變化時,抽象也會受到影響。而且,如果我們想複用某一個抽象的話,就必須把它依賴的細節都一起拖過去。 而在OOD中,我們希望倒轉這種依賴關係:我們建立的抽象不依賴於任何細節,而細節則高度依賴於上面的抽象。這種依賴關係的倒轉正是OOD和傳統技術之間根本的差異,也正是OOD思想的精華所在。
OOD步驟
- 細化重組類
- 細化和實作類別間關係,明確其可見度
- 增加屬性,指定屬性的類型與可見度
- 分配職責,定義執行每個職責的方法
- 對訊息驅動的系統,明確訊息傳遞方式
- 利用設計模式進行局部設計
- 畫出詳細的類圖與時序圖
OOD設計過程中要展開的主要幾項工作
對於OOA所抽象出來的對象-&-類以及彙集的分析文檔,OOD需要有一個根據設計要求整理和求精的過程,使之更能符合OOP的需要。這個整理和求精過程主要有兩個方面:一是要根據物件導向的概念 模型整理分析所確定的對象結構、屬性、方法等內容,改正錯誤的內容,刪去不必要和重複的內容等。二是進行分類整理,以便於下一步資料庫設計和程式處理模組設計的需要。整理的方法主要是進行歸 類,對類一&一對象、屬性、方法和結構、主題進行歸類。
資料模型的設計需要確定類-&-對象屬性的內容、訊息串連的方式、系統訪問、資料模型的方法等。最後每個對象執行個體的資料都必須落實到物件導向的庫結構模型中。
OOD的最佳化設計過程是從另一個角度對分析結果和處理業務過程的整理歸納,最佳化包括對象和結構的最佳化、抽象、整合。
對象和結構的模組化表示OOD提供了一種範式,這種範式支援對類和結構的模組化。這種模組符合一般模組化所要求的所有特點,如資訊隱蔽性好,內部彙總度強和模組之間耦合度弱等。
整合化使得單個構件有機地結合在一起,相互支援。
- OO方法的特點和面臨的問題
OO方法以對象為基礎,利用特定的軟體工具直接完成從對象客體的描述到軟體結構之間的轉換。這是OO方法最主要的特點和成就。OO方法的應用解決了傳統結構化開發方法中客觀世界描述工具與軟 件結構的不一致性問題,縮短了開發週期,解決了從分析和設計到軟體模組結構之間多次轉換映射的繁雜過程,是一種很有發展前途的系統開發方法。 但是同原型方法一樣,OO方法需要一定的軟體基礎支援才可以應用,另外在大型的MIS開發中如果不經自頂向下的整體劃分,而是一開始就自底向上的採用OO 方法開發系統,同樣也會造成系統結構不合理、各部分關係失調等問題。所以OO方法和結構化方法目前仍是兩種在系統開發領域相互依存的、不可替代的方法。
七、OOD能給我帶來什嗎?
問這個問題的人,腦子裡通常是在想“OOD能解決所有的設計問題嗎?”沒有銀彈。OOD也不是解決一切設計問題、避免軟體危機、捍衛世界和平……的銀彈。OOD只是一種技術。但是,它是一種優秀的技術,它可以很好地解決目前的大多數軟體設計問題——當然,這要求設計者有足夠的能力。 OOD可能會讓你頭疼,因為要學會它、掌握它是很困難的;OOD甚至會讓你失望,因為它也並不成熟、並不完美。OOD也會給你帶來欣喜,它讓你可以專註於設計,而不必操心那些細枝末節;OOD也會使你成為一個更好的設計師,它能提供給你很好的工具,讓你能開發出更堅固、更可維護、更可複用的軟體。
三. OOP
OOP: (Object Oriented Programming,物件導向的程式設計)。
OOP 的一條基本原則是電腦程式是由單個能夠起到子程式作用的單元或對象組合而成。OOP 達到了軟體工程的三個主要目標:重用性、靈活性和擴充性。為了實現整體運算,每個對象都能夠接收資訊、處理資料和向其它對象發送資訊。OOP 主要有以下的概念和組件:
- 組件 - 資料和功能一起在運行著的電腦程式中形成的單元,組件在 OOP 電腦程式中是模組和結構化的基礎。
- 抽象性 - 程式有能力忽略正在處理中資訊的某些方面,即對資訊主要方面關注的能力。
- 封裝 - 也叫做資訊封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯絡的介面,並規定了其它組件進行調用的方法。
- 多態性 - 組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
- 繼承性 - 允許在現存的組件基礎上建立子類組件,這統一併增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴充,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
- 由於抽象性、封裝性、重用性以及便於使用等方面的原因,以組件為基礎的編程在指令碼語言中已經變得特別流行。Python 和 Ruby 是最近才出現的語言,在開發時完全採用了 OOP 的思想,而流行的 Perl 指令碼語言從版本5開始也慢慢地加入了新的物件導向的功能組件。用組件代替“現實”上的實體成為 JavaScript(ECMAScript) 得以流行的原因,有論證表明對組件進行適當的組合就可以在英特網上代替 HTML 和 XML 的文件物件模型(DOM)。
OOA - OOD - OOP 簡介