1.類與對象
對象(Object)是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。對象可以用來描述要研究的任何事物。從一本書到一家圖書館,單的整數到整數列龐大的資料庫、極其複雜的自動化工廠、太空梭都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計劃或事件。對象由資料(描述事物的屬性)和作用於資料的操作(體現事物的行為)構成一獨立整體。從程式設計者來看,對象是一個程式模組,從使用者來看,對象為他們提供所希望的行為。在對內的操作通常稱為方法。
類(Class)是對象的模板。即類是對一組有相同資料和相同操作的對象的定義,一個類所包含的方法和資料描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的執行個體。類可有其子類,也可有其它類,形成類階層。
1所示是類的例子,其中類的名字是Employee,該類有5個屬性和4個方法。
圖1 類Employee
2.封裝
封裝(Encapsulation)是一種資訊隱蔽技術,它體現於類的說明,是對象的重要特性。封裝使資料和加工該資料的方法(函數)封裝為一個整體,以實現獨立性很強的模組,使得使用者只能見到對象的外特性(對象能接受哪些訊息,具有那些處理能力),而對象的內特性(儲存內部狀態的私人資料和實現加工能力的演算法)對使用者是隱形。封裝使一個對象形成兩個部分:介面部分和實現部分。封裝的目的在於把對象的設計者和對象者的使用分開,使用者只需瞭解對象的介面不必知曉行為實現的細節,用設計者提供的訊息來訪問該對象。
3.繼承
繼承(Inheritance)是子類自動共用父類之間資料和方法的機制。它由類的派生功能體現,一個類直接繼承其它類的全部描述,同時可修改和擴充。
繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,如果沒繼承性機制,則類對象中資料、方法就會出現大量重複。通過繼承可以實現代碼的重用:從已存在的類派生出的一個新類將自動具有原來那個類的特性,同時,它還可以擁有自己的新特性。
2所示是單繼承的例子。其中,交通工具(Vehicle)是父類,地面交通工具(GroundVehicle)和空中交通工具(TransatmosphericVehicle)是子類。
圖2 單繼承
3所示是多繼承的例子。其中子類鳥(Bird)同時繼承飛行物(FlyingThing)和動物(Animal)兩個父類。
圖3 多繼承
4.訊息
對象之間進行通訊的結構叫做訊息(Message)。在對象的操作中,當一個訊息發送給某個對象時,訊息包含接收對象去執行某種操作的資訊。發送一條訊息至少要包括說明接受訊息的對象名、發送給該對象的訊息名。一般還要對參數加以說明,參數可以是認識該訊息的對象所知道的變數名,或者是所有對象都知道的全域變數名。
4所示,接受訊息calculateOrderTotal()的訂單(Order)類有責任計算訂單的總金額,計算結果返回給訂單錄入介面(OrderEntryForm)類。
圖4 訊息
5.多態
多態(Polymorphism),字面上是指有多種形態的意思。在物件導向技術中,多態是指一個事物在不同上下文中具有不同意義或用法的能力。同一訊息為不同的對象接受時可產生完全不同的行動。利用多態使用者可發送一個通用的資訊,而將所有的實現細節都留給接受訊息的對象自行決定,同一訊息即可調用不同的方法。例如:Print訊息被發送給一圖或表時調用的列印方法與將同樣的Print訊息發送給一本文檔案而調用的列印方法會完全不同。
多態的實現受到繼承性的支援,利用類繼承的層次關係,把具有通用功能的協議存放在類層次中儘可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上產生的對象就能給通用訊息以不同的響應。在物件導向程式設計語言中可通過在衍生類別中重定義基類函數(定義為重載函數或虛函數)來實現多態機制。多態機制使具有不同內部結構的對象可以共用相同的外部介面,通過這種方式減少代碼的複雜度。
在OO方法中,對象和傳遞訊息分別表現事物及事物間相互聯絡的概念。類和繼承是是適應人們一般思維方式的描述範式。方法是允許作用於該類對象上的各種操作。這種對象、類、訊息和方法的程式設計範式的基本點在於對象的封裝性和類的繼承性。通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關係,以及由此帶來的動態聯編和實體的多態性,從而構成了物件導向軟體系統。