OO(object oriented面向對象)
面向對象OO = 面向對象的分析OOA + 面向對象的設計OOD + 面向對象的編程OOP
一、OO - Object-Oriented(面向對象)
對象代表真實或抽象的事物,有一個名字(唯一標識),有明確的職責(well-defined responsibilities),展示良好的行為(well-defined behavior),接口清晰,並且盡可能簡單、自相容,內聚,完備(self-consistent,coherent,and complete)。
基於對象概念,以對象為中心,以類和繼承為構造機制,來認識,理解,刻畫客觀世界和設計,構建相應的軟件系統的一門方法;本意--模擬人類的思維方式,使開發,維護,修改更加容易。
面向對象三大機制,即:“封裝、繼承、多態”
– 封裝,隱藏內部實現
– 繼承,復用現有代碼
– 多態,改寫對象行為
二、OOA - Object-Oriented Analysis(面向對象分析)
強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析--其實就是進一步對OO進行細化,初步得出該OO的屬性與方法(或者簡單的理解:在得出的文檔中對接口的粗略定義)。
OOA模型由5個層次(主題層、對象類層、結構層、屬性層和服務層)和5個活動(標識對象類、標識結構、定義主題、定義屬性和定義服務)組成。在這種方法中定義了兩種對象類之間的結構,一種稱為分類結構,一種稱為組裝結構。分類結構就是所謂的一般與特殊的關系。組裝結構則反映了對象之間的整體與部分的關系。
OOA在定義屬性的同時,要識別實例連接。實例連接是一個示例與另一個實例的映射關系。
OOA在定義服務的同時要識別消息連接。當一個對象需要向另一個對象發送消息時,它們之間就存在消息連接。
OOA中的5個層次和5個活動繼續貫穿在OOD(面向對象設計)過程中。OOD模型由4個部分組成。它們分別是設計問題域部分、設計人機交互部分、設計任務管理部分、和設計數據管理部分。
OOA的主要原則:
1、抽象:從許多食物中舍棄個別的、非本質的特征,抽取共同的、本質性的特征,就叫做抽象。愁鄉石形成概念的必須手段。
抽象原則有兩個方面的意義:第一,盡管問題域中的事物是很復雜的,但是分析員並不需要了解和描述它們的一切,只需要分析其中與系統目標有關的事物及其本質性特征。第二,通過舍棄個體事物在細節上的差異,抽取其共同特性而得到一批事物的抽象概念。
抽象是面向對象方法中使用最為廣泛的原則。抽象原則包括過程抽象和數據抽象兩個方面。
過程抽象是指,任何一個完成確定功能的操作序列,其使用者都可以把它看做一個單一的實體,盡管實際上它可能是由一系列更低級的操作完成的。
數據抽象是根據施加於數據之上的操作來定義數據類型,並限定數據的值只能由這些操作來修改和觀察。數據抽象是OOA的核心原則。它強調把數據(屬性)和操作(服務)結合為一個不可分的系統單位(即對象),對象的外部只需要知道它做什麽,而不必知道它如何做。
2、封裝:把對象的屬性和服務結合為一個不可分的系統單位,並盡可能隱蔽對象的內部細節。
3、繼承:特殊類的對象擁有的其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。
4、分類:就是把具有相同屬性和服務的對象劃分為一類,用類作為這些對象的抽象描述。分類原則實際上是抽象原則運用於對象描述時的一種表現形式。
5、聚合:又稱組裝,其原則是:把一個復雜的事物看成若幹比較簡單的事物組裝體,從而簡化對復雜事物的描述。
6、關聯:是人類思考問題時經常運用的思想方法:通過一個事物聯想到另外的事物。能使人發生聯想的原因是事物之間確實存在著某些聯系。
7、消息通信:這一原則要求對象之間只能通過消息進行通信,而不允許在對象之外直接地存取對象內部的屬性。通過消息進行通信是由於封裝原則而引起的。在OOA中要求消息連接表示出對象之間的動態聯系。
8、粒度控制:一般來講,人在面對一個復雜的問題域時,不可能在同一時刻既能縱觀全局,又能洞察秋毫。因此需要控制自己的視野:考慮全局時,註意其大的組成部分,暫時不詳查每一部分的具體的細節:考慮某部分的細節時則暫時撇開其余的部分。著就是粒度控制原則
9、行為分析:顯示世界中事物的行為是復雜的。由大量的事物所構成的問題域中各種行為往往相互依賴交織
OOA的主要優點
1、加強了對問題域和系統責任的理解。
2、改進與分析有關的各類人員之間的交流
3、對需求的變化具有較強的適應性
4、支持軟件復用。
5、貫穿軟件聲明周期全過程的一致性、
6、實用性
7、有利於用戶參與
OOA方法的具體步驟
在用OOA具體分析一個事物時。大致上遵循如下5個基本步驟;
1、確定對象和類。這裏所說的對象是對數據及其處理方式的抽象,它反映了系統保存和處理現實世界總某些事物的信息能力。。類是多個對象的共同屬性和方法集合的描述,它包括如何在一個類中建立一個新對象的描述。
2、確定結構(structure)。結構是指問題域的復雜性和連接關系。類成員結構反映了泛華—特化關系,整體-部分結構反映整體和局部之間的關系
3、確定主題(subject)。主題是指事物的總體概貌和總體分析模型
4、確定屬性(attribute)。屬性就是數據元素,可用來描述對象或分類結構的實例,可在圖中給出,並在對象的存儲中指定。
5、確定方法(method)。方法是在收到消息後必須進行的一些處理方法:方法要在圖中定義,並在對象的存儲中指定。對於每個對象和結構來說,那些用來增加、修改、刪除和選擇一個方法本身都是隱含的(雖然它們是要在對象的存儲中定義的,但並不在圖上給出),而有些則是顯示的。
三、OOP - Object-Oriented Programming (面象對象編程)
把組件的實現和接口分開,並且讓組件具有多態性 --(抽象、繼承、封裝、多態)
OOP是一種計算機編程架構,它的一條基本準則是計算機程序是由單個能夠引起子程序作用的單元或對象組合而成。OOP達到了軟件工程的三個主要目標:重用性,靈活性和擴展性。為了實現整體運算,每個對象都能夠接收消息,處理數據和向其它對象發送消息。
OOP主要有以下的概念和組件:
組件:數據和功能一起在運行著的計算機程序中形成的單元,組件在OOP計算機程序中是模塊和結構化的基礎;
抽象性:程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關註的能力;
封裝:也叫作信息封裝,確保組件不會以不可預期的方式改變其它組件內部狀態,只有在那些提供了內部狀態改變方法的組建中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯系的接口。並規定了其它組件進行調用的方法;
多態性:組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的的結果得依據實際調用的類型.
繼承性:允許在現存的組件基礎上創建子類組件,著統一並強調了多態性和封裝性。典型的來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴展,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
四、OOD - Object-Oriented Design(面向對象設計)
OOD是OO方法中一個中間過渡環節,其主要作用是對OOA分析的結果作進一步的規範化整理,以便能夠被OOP直接接受 -- 整理和定義OO的屬性和方法。
OOD的 目標是管理程序內部各部分的相互依賴。為了達到這個目標,OOD要求將程序分成塊,每個塊的規模應該小到可以管理的程度,然後分別將各個塊隱藏在借口(interface)的後面,讓它們只通過接口相互交流。比如說,如果用OOD的方法類設計一個服務器-客戶端(client-server)應用,那麽服務器和客戶端之間不應該有直接地依賴,而是應該讓服務器的接口和客戶端的接口相互依賴。
這種依賴關系的轉換使得系統的各部分具有了可復用性。還是拿上面那個例子來說,客戶端就不必依賴於特定的服務器,所以就可以復用到其他的環境下。如果要復用某一個程序塊,只要實現必須的接口就行了。
OOD是一種解決軟件問題的設計範式(paradigm),一種抽象的範式。使用OOD這種設計範式,我們可以用對象(object)來表現問題領域(problem domain)的實體,每個對象都有相應的狀態和行為。我們剛才說到:OOD是一種抽象的範式。抽象可以分成很多層次,從非常概括的到非常特殊的都有,而對象可能處於任何一個抽象層次上。另外,彼此不同但又相互關聯的對象可以共同構成抽象:只要這些對象之間有相似性,就可以把它們當成同一類的對象類處理。
OOD步驟(據需求決定所需的類、類的操作以及類之間關聯的過程):
1、細化重組類;
2、細化和實現類之間關系,明確其可見性;
3、增加屬性,指定屬性的類型與可見性;
4、分配職責,定義執行每個職責的方法;
5、對消息驅動的系統,明確消息傳遞的方式;
6、利用設計模式進行局部設計;
7、畫出詳細的類圖和時序圖。
OOD設計過程中要展開的主要幾項工作:
1、對象定義規格的求精過程
對於OOA所抽象出來的對象&類以及匯集的分析文檔,OOD需要有一個根據設計要求整理和求精的過程,是指更能符合OOP的需要。
2、數據模型和數據庫設計
數據模型的設計需要確定類與對象屬性的內容,消息連接的方式,系統訪問,數據模型的方法等。最後每個對象實例的數據都必須落實到面向對象的庫結構模型中。
3、優化
OOD的優化設計過程是從另一個角度對分析結果和處理業務過程的整理歸納,優化包括對象和結構的優化,抽象,繼承。
附:
OOT - Object-Oriented Testing (面向對象測試)
OOSM - Object-Oriented Software Maintenance(面向對象軟件維護)
OOM - Object-Oriented Method(面向對象方法)
OOPL - object-oriented programming language(面向對象的程序設計語言)
OO(object oriented面向對象)