天天看點

《面向對象分析與設計》一1.3面向對象的基本原則

面向對象的基本原則主要有抽象、分類、封裝、消息通信、多态性、行為分析和複雜性控制。

(1)抽象

抽象(abstraction)是指從事物中舍棄個别的、非本質的特征,而抽取共同的、本質特征的思維方式。在面向對象方法中,可從幾個方面來了解抽象:

1)程式設計語言的發展呈現抽象層次提高的趨勢。例如,用c++程式設計,不用考慮cpu寄存器和堆棧中存放的内容,因為大多數程式設計語言都是從這些細節中抽象出來的。對于一個完成确定功能的語句序列,其使用者都可把它看作單一的實體(如函數),這種抽象就是過程抽象。在面向對象程式設計語言中,存在着過程抽象和資料抽象。在類的範圍内,使用過程抽象來形成操作。資料抽象是指把資料類型和施加在其上的操作結合在一起,形成一種新的資料類型。類就是一種資料抽象,棧也是一種資料抽象。

2)在面向對象方法中,對象是對現實世界中事物的抽象,類是對對象的抽象,一般類是對特殊類的抽象。有的抽象是根據開發需要進行的。例如,就對象是對現實世界中的事物的抽象而言,高校中的學籍管理系統和夥食管理系統中所使用的學生的資訊就是不一樣的;再如,一個現實事物可能要擔任很多角色,隻有與問題域有關的角色,在系統中才予以考慮。

3)在面向對象的不同開發階段需要進行不同程度的抽象。典型地,在面向對象分析階段,先定義類的屬性和操作,而與實作有關的因素在設計階段再考慮。例如,對自動售貨機模組化,在分析階段先定義一個類“自動售貨機”,根據其收錢和發貨的職責定義其屬性和操作,其中對外提供的操作為收錢口、選擇按鈕和發貨口(三者形成一個接口),而對于如何根據實作條件來設計它的内部細節是設計階段的任務。這與現實生活中一樣,我們可以在較高的抽象層次上分析與解決問題,然後再逐漸地在較低抽象層次上予以落實。

從上述自動售貨機的例子中能看到,使用抽象至少有如下好處:一是便于通路,外部對象隻需知道有限的幾個操作(作為接口)即可使用自動售貨機對象;二是便于維護,如自動售貨機的某部分有變化而其接口沒有發生變化,隻需在機器内部對該部分進行修改。甚至可用更優的具有相同接口的售貨機對其進行替換,而不影響使用者的使用方式。

(2)分類

分類(classification)的作用是按照某種原則劃分出事物的類别,以有助于認識複雜世界。

在oo中,分類就是把具有相同屬性和相同操作的對象劃分為一類,用類作為這些對象的抽象描述。如果一個對象是分類(類)的一個執行個體,它将符合該分類的模式。分類實際上是把抽象原則運用于對象描述時的一種表現形式。在oo中,進一步地還可以運用分類原則,通過不同程度的抽象,形成一般/特殊結構。

運用分類原則,清楚地表示了對象與類的關系,以及特殊類與一般類的關系。

(3)封裝

封裝(encapsulation)有兩個含義:①把描述一個事物的性質和行為結合在一起,對外形成該事物的一個界限。面向對象方法中的封裝就是用對象把屬性和操縱這些屬性的操作包裝起來,形成一個獨立的單元。封裝原則使對象能夠集中而完整地對應并描述具體的事物,展現了事物的相對獨立性。②資訊隐蔽,即外界不能直接存取對象的内部資訊(屬性)以及隐藏起來的内部操作,外界也不用知道對象對外操作的内部實作細節。在原則上,對象對外界僅定義其什麼操作可被其他對象通路,而其他的對象不知道所要通路的對象的内部屬性和隐藏起來的内部操作以及它是如何提供操作的。

通過封裝,使得在對象的外部不能随意通路對象的内部資料和操作,而隻允許通過由對象提供的外部可用的操作來通路其内部,這就降低了對象間的耦合度,還可以避免外部錯誤對它的“交叉感染”。另外,這樣對象的内部修改對外部的影響變小,減少了修改引起的“波動效應”。圖13所示的是封裝的原理圖,其中的一部分操作是外部可用的。

《面向對象分析與設計》一1.3面向對象的基本原則

嚴格的封裝也會帶來問題,如程式設計麻煩,有損執行效率。有些語言不強調嚴格的封裝和資訊隐蔽,而實行可見性控制,以此來解決問題。例如,c++和java就是這樣的語言,通過定義對象的屬性和操作的可見性,對外規定了其他對象對其屬性和操作的可通路性;另外,一個對象也可以提供僅局限于特定對象的屬性和操作,這可以通過把相應的可見性指定為受保護的或私有的來做到。

(4)消息通信

原則上,對象之間隻能通過消息(message)進行通信,而不允許在對象之外直接地通路它内部的屬性,這是由封裝原則引起的。

消息必須直接發給特定的對象,消息中包含所請求服務的必要資訊,且遵守所規定的通信規格說明。一條消息的規格說明至少包括:消息名、入口參數和可能的傳回參數。一個對象可以是消息的發送者,也可以是消息的接收者,還可以作為消息中的參數。

(5)多态性

多态性(polymorphism)是指一般類和特殊類可以有相同格式的屬性或操作,但這些屬性或操作具有不同的含義,即具有不同的資料類型或表現出不同的行為。這樣,針對同一個消息,不同的對象可對其進行響應,但所展現出來的行為是不同的。

(6)行為分析

關系機制提供了用關聯、繼承和聚合等組織類的方法。很多面向對象學者把系統模型的這部分結構稱作靜态模型,也有的稱其為結構模型。通常,對系統還需要進行行為分析。

對于一個對象,由于其内的屬性值在不斷地發生着變化,按一定的規則根據屬性值可把對象劃分為不同的狀态。在請求對象操作時,可能會使對象的狀态發生改變,而對象的目前狀态對随後的執行是有影響的。通過狀态機圖可以分析對象的狀态變遷情況。

系統中的對象是互相協作的,通過發消息共同完成某項功能。這種協作的互動性可以用互動圖來描述。

很多系統具有并發行為。從事物的并發行為的起因上看,事物的每個并發行為是主動發生的。展現在對象上,就是有一種對象是主動的,每個對象代表着一個程序或線程。在互動圖上也能展現出對象間的并發行為。

(7)複雜性控制

為了控制系統模型的複雜性,引入了包(package)的概念。使用包可以把模型元素組織成不同粒度的系統機關,也可以根據需要用包來組織包。例如,用分析包和設計包來分别組織分析模型和設計模型,以顯式地描述不同抽象層次的模型;對複雜類圖也可以按類之間關系的緊密程度用包來組織類。

繼續閱讀