中科永聯高級技術培訓中心(www.itisedu.com)
OO方法(Object-Oriented Method,面向對象方法,面向對象的方法)是一種把面向對象的思想套用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關係,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關係的類的屬性和操作進行共享的一種方式。所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。
面向對象方法作為一種新型的獨具優越性的新方法正引起全世界越來越廣泛的關注和高度的重視,它被譽為"研究高技術的好方法",更是當前計算機界關心的重點。十多年來,在對OO方法如火如荼的研究熱潮中,許多專家和學者預言:正象70年代結構化方法對計算機技術套用所產生的巨大影響和促進那樣,90年代OO方法會強烈地影響、推動和促進一系列高技術的發展和多學科的綜合。
一、面向對象方法的由來與發展
回顧歷史可激勵現在,以規劃將來。
OO方法起源於面向對象的程式語言(簡稱為OOPL)。50年代後期,在用FORTRAN語言編寫大型程式時,常出現變數名在程式不同部分發生衝突的問題。鑒於此,ALGOL語言的設計者在ALGOL60中採用了以"Begin……End"為標識的程式塊,使塊內變數名是局部的,以避免它們與程式中塊外的同名變數相衝突。這是程式語言中首次提供封裝(保護)的嘗試。此後程式塊結構廣泛用於高級語言如Pascal 、Ada、C之中。
60年代中後期,Simula語言在ALGOL基礎上研製開發,它將ALGOL的塊結構概念向前發展一步,提出了對象的概念,並使用了類,也支持類繼承。70年代,Smalltalk語言誕生,它取Simula的類為核心概念,它的很多內容借鑑於Lisp語言。由Xerox公司經過對Smautalk72、76持續不斷的研究和改進之後,於1980年推出商品化的,它在系統設計中強調對象概念的統一,引入對象、對象類、方法、實例等概念和術語,採用動態聯編和單繼承機制。
從80年代起,人們基於以往巳提出的有關信息隱蔽和抽象數據類型等概念,以及由modula2、Ada和Smalltalk和等語言所奠定的基礎,再加上客觀需求的推動,進行了大量的理論研究和實踐探索,不同類型的面向對象語言(如:Object-c、Eiffel、c++、Java、Object-Pascal等)逐步地發展和建立起較完整的和雨後春筍般研製開發出來,OO方法的概念理論體系和實用的軟體系統。
面向對象源出於Simula,真正的OOP由Smalltalk奠基。Smalltalk現在被認為是最純的OOPL。
正是通過Smalltalk80的研製與推廣套用,使人們注意到OO方法所具有的模組化、信息封裝與隱蔽、抽象性、繼承性、多樣性等獨特之處,這些優異特性為研製大型軟體、提高軟體可靠性、可重用性、可擴充性和可維護性提供了有效的手段和途徑。
80年代以來,人們將面向對象的基本概念和運行機制運用到其它領域,獲得了一系列相應領域的面向對象的技術。面向對象方法已被廣泛套用於程式設計語言、形式定義、設計方法學、作業系統、分散式系統、人工智慧、實時系統、資料庫、人機接口、計算機體系結構以及並發工程、綜合集成工程等,在許多領域的套用都得到了很大的發展。1986年在美國舉行了首屆"面向對象編程、系統、語言和套用(OOPSLA'86)"國際會議,使面向對象受到世人矚目,其後每年都舉行一次,這進一步標誌OO方法的研究已普及到全世界。
二、面向對象的基本概念與特徵
用計算機解決問題需要用程式設計語言對問題求解加以描述(即編程),實質上,軟體是問題求解的一種表述形式。顯然,假如軟體能直接表現人求解問題的思維路徑(即求解問題的方法),那么軟體不僅容易被人理解,而且易於維護和修改,從而會保證軟體的可靠性和可維護性,並能提高公共問題域中的軟體模組和模組重用的可靠性。面向對象的機能念和機制恰好可以使得按照人們通常的思維方式來建立問題域的模型,設計出儘可能自然地表現求解方法的軟體。
面向對象的基本概念
對象:對象是要研究的任何事物。從一本書到一家圖書館,單的整數到整數列龐大的資料庫、極其複雜的自動化工廠、太空梭都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計畫或事件。對象由數據(描述事物的屬性)和作用於數據的操作(體現事物的行為)構成一獨立整體。從程式設計者來看,對象是一個程式模組,從用戶來看,對象為他們提供所希望的行為。在對內的操作通常稱為方法。
類:類是對象的模板。即類是對一組有相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結構。
訊息:訊息是對象之間進行通信的一種規格說明。一般它由三部分組成:接收訊息的對象、訊息名及實際變元。
面向對象主要特徵:
封裝性:封裝是一種信息隱蔽技術,它體現於類的說明,是對象的重要特性。封裝使數據和加工該數據的方法(函式)封裝為一個整體,以實現獨立性很強的模組,使得用戶只能見到對象的外特性(對象能接受哪些訊息,具有那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的算法)對用戶是隱蔽的。封裝的目的在於把對象的設計者和對象者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的訊息來訪問該對象。
繼承性:繼承性是子類自動共享父類之間數據和方法的機制。它由類的派生功能體現。一個類直接繼職其它類的全部描述,同時可修改和擴充。
繼職具有傳達室遞性。繼職分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,如果沒繼承性機制,則類對象中數據、方法就會出現大量重複。繼承不僅支持系統的可重用性,而且還促進系統的可擴充性。
多態性:對象根據所接收的訊息而做出動作。同一訊息為不同的對象接受時可產生完全不同的行動,這種現象稱為多態性。利用多態性用戶可傳送一個通用的信息,而將所有的實現細節都留給接受訊息的對象自行決定,如是,同一訊息即可調用不同的方法。例如:Print訊息被傳送給一圖或表時調用的列印方法與將同樣的Print訊息傳送給一正文檔案而調用的列印方法會完全不同。多態性的實現受到繼承性的支持,利用類繼承的層次關係,把具有通用功能的協定存放在類層次中儘可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用訊息以不同的回響。在OOPL中可通過在派生類中重定義基類函式(定義為重載函式或虛函式)來實現多態性。
綜上可知,在OO方法中,對象和傳遞訊息分別表現事物及事物間相互聯繫的概念。類和繼承是是適應人們一般思維方式的描述範式。方法是允許作用於該類對象上的各種操作。這種對象、類、訊息和方法的程式設計範式的基本點在於對象的封裝性和類的繼承性。通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關係,以及由此帶來的動態聯編和實體的多態性,從而構成了面向對象的基本特徵。
三、面向對象的新方法論、新范型、新技術
OO方法的作用和意義決不只局限於編程技術,它是一種新的程式設計范型--面向對象程式設計范型;是信息系統開發的新方法論--面向對象方法學;是正在興起的新技術--面向對象技術。
面向對象程式設計范型:程式設計范型(以下簡稱程設范型)具體指的是程式設計的體裁,正如文學上有小說、詩歌、散文等體裁,程式設計體裁是用程式設計語言表達各種概念和各種結構的一套設施。
目前,程設范型分為:過程式程設范型、函式式程設范型,此外還有進程式程設范型、事件程設范型和類型系統程設范型。每一程設范型都有多種程式設計語言支持(如:FORTRAN、PASCAL、C均體現過程式程設范型,用來進行面向過程的程式設計),而某些語言兼備多種范型(如:Lisp屬過程與函式混合范型,C++則是進程與面向對象混合范型的語言)。
過程式程設范型是流行最廣泛的程式設計范型(人們平常所使用的程式設計語言大多屬於此類型一筆勾銷它們為面向過程的語言),這一程設范型的中心點是設計過程,所以程式設計時首先要決定的是問題解所需要的過程,然後設計過程的算法。這類范型的語言必須提供設施給過程(函式)傳送變元和返回的值,如何區分不同種類的過程(函式??題。
面向對象程設范型是在以上范型之上發展起來的,它的關鍵在於加入了類及其繼承性,用類表示通用特性,子類繼承父類的特性,並可加入新的特性。對象以類為樣板被創建。所以在面向對象程設范中,首要的任務是決定所需要的類,每個類應設定足夠的操作,並利用繼承機制里二地共享共同的特性。
簡而言之,面向對象程設范型具有其它范型所缺乏或不具備的特點,極富生命力,能夠適應複雜的大型的軟體開發。可以肯定地說,這種新的程設范型必將有力地推動軟體開發的新的進展。限於篇幅,其它程設范型在此不作細述。
面向對象方法學:OO方法遵循一般的認知方法學的基本概念(即有關演繹--從一般到特殊和歸納--從特殊到一般的完整理論和方法體系)而建立面向對象方法等基礎。面向對象方法學要點之一:認為客觀世界是由各種"對象"所組成的,任何事物都是對象,每一個對象都有自已的運動規律和內部狀態,每一個對象都屬於某個對象"類",都是該對象類的一個元素。複雜的對象可以是由相對比較簡單的各種對象以某種方式而構成的。不同對象的組合及相互作用就構成了我們要研究、分析和構造的客觀系統。面向對象方法學要點之二:是通過類比,發現對象間的相似性,即對象間的共同屬性,這就是構成對象類的依據。在?quot;類"、"父類"、"子類"的概念構成對象類的層次關係時,若不加特殊說明,則處在下一層次上的對象可自然地繼承位於上一層次上的對象的屬性。面向對象方法學齡前要點之三:認為對已分成類的各個對象,可以通過定義一組"方法"來說明該對象的功能,即允許作用於該對象上的各種操作。對象間的相互聯繫是通過傳遞"訊息"來完成的,訊息就是通知對象去完成一個允許作用於該對象的操作,至於該對象將如何完成這個操作的細節,則是封裝在相應的對象類的定義中的,細節對於外界是隱蔽的。
可見,OO方法具有很強的類的概念,因此它就能很自然地直觀地模擬人類認識客觀世界的方式,亦即模擬人類在認知進程中的由一般到特殊的演繹功能或由特殊到一般的歸納功能,類的概念既反映出對象對象的本質屬性,又提供了實現對象共享機制的理論根據。
當我們遵照面向對象方法學的思想進行軟體系統開發時,首先要行面向對象的分析(OOA――Object Oriented Analysis),其任務是了解問題域所涉及的對象、對象間的關係和作用(即操作),然後構造問題的對象模型,力爭該模型能真實地反映出所要解決的"實質問題"。在這一過程中,抽象是最本質、最重要的方法。針對不同的問題性質選擇不同的抽象層次,過簡或過繁都會影響到對問題的本質屬性的了解和解決。
其次就是進行面向對象的設計(OOD――Object Oriented Analysis),即設計軟體的對象模型。根據所套用的面向對象軟體開發環境的功能強弱不等,在對問題的對象模型的分析基礎上,可能要對它進行一定的改造,但應以最少改變原問題域的對象模型為原則。然後就在軟體系統內設設計各個對象、對象間的關係(如層次關係、繼承關係等)、對象間的通信方式(如訊息模式)等,總之是設計各個對?quot;應做些什麼"。
最後階段是面向對象的實現(OOI-- Object Oriented Zmplementation),即指軟體功能的編碼實現,它包括:每個對象的內部功能的實現;確立對象哪一些處理能力應在哪些類中進行描述;確定並實現系統的界面、輸出的形式及其它控制機理等,總之是實現在OOD階段所規定的各個對象所應完成的任務。
用OO方法進行面向對象程式設計,其基本步驟如下:
(1) 分析確定在問題空間和解空間出現的全部對象及其屬性;
(2) 確定應施加於每個對象的操作,即對象固有的處理能力;
(3) 分析對象間的聯繫,確定對象彼此間傳遞的訊息;
(4) 設計對象的訊息模式,訊息模式和處理能力共同構成對象的外部特性;
(5) 分析各個對象的外部特性,將具有相同外部特性的對象歸為一類,從而確定所需要的類;
(6) 確定類間的繼承關係,將各對象的公共性質放在較上層的類中描述,通過繼承來共享對公共性質的描述;
(7) 設計每個類關於對象外部特性的描述;
(8) 設計每個類的內部實現(數據結構和方法);
(9) 創建所需的對象(類的實例),實現對象間應有的聯繫(發訊息)。
面向對象技術:技術"泛指根據生產實踐經驗和自然科學原理
而發展起來的各種工藝操作方法與技能";"廣義地講,還包括相應的生產工具和其它物質設備,以及生產的工藝過程或作業程式、方法"。OO方法既是程式設計新范型、系統開發的新方法學,作為一門新技術它就有了基本的依據,事實上,OO方法可支持種類不同的系統開發地,已經或正在許多方面得以套用,因此,可以說OO方法是一門新的技術――面向對象技術。
近十多年來,除了面向對象的程式設計以外,OO方法已發展套用到整個信息系統領域和一些新興的工業領域,包括:用戶界面(特別是圖形用戶界面――GUI)、套用集成平台、面向對象資料庫(OODB)、分散式系統、網路管理結構、人工智慧領域以及並發工程、綜合集成工程等。人工智慧是和計算機密切相關的新領域,在很多方面已經採用面向對象技術,如知識的表示,專家系統的建造、用戶界面等。人工智慧的軟體通常規模較大,用面向對象技術有可能更好地設計並維護這類程式。
80年代後期形成的並發工程,其概念要點是在產品開發初期(即方案設計階段)就把結構、工藝、加工、裝配、測試、使用、市場等問題同期並行地啟動運行,其實現必須有兩個基本條件:一是專家群體,二是共享並管理產品信息(將CAD、CAE、CIN緊密結合在一起)。顯然,這需要面向對象技術的支持。目前,一些公司採用並發工程組織產品的開發,已取得顯著效益:波音公司用以開發巨型777運輸機,比開發767節省了一年半時間;日本把並發工程用於新型號的汽車生產,和美國相比只用一半的時間。產業界認為它們念後的生存要依靠並發工程,而面向對象技術是促進並發工程發展的重要支持。
綜合集成工程是開發大型開放式複雜統的新的工程概念,和並發工程相似,專家群體的組織和共享信息,是支持這一新工程概念的兩大支柱。由於開放式大系統包含人的智慧型活動,建立數學模型非常困難,而OO方法能夠比較自然地刻劃現實世界,容易達到問題空間和程式空間的一致,能夠在多種層次上支持複雜系統層次模型的建立,是研究綜合集成工程的重要工具。
面向對象技術對於並發工程和綜合集成工程的作用,一方面說明了這一新技術套用範圍的寬廣,同時也說明了它的重要影響,更證明了面向對象技術是一門新興的值得廣泛重視的技術。
綜上所述,可歸納出OO方法用於系統開發有如下優越性:
(1) 強調從現實世界中客觀存在的事物(對象)出發來認識問
題域和構造系統,這就使系統開發者大大減少了對問題域的理解難度,從而使系統能更準確地反映問題域。
(2) 運用人類日常的思維方法和原則(體現於OO方法的抽
象、分類、繼承、封裝、訊息通訊等基本原則)進行系統開發,有益於發揮人類的思維能力,並有效地控制了系統複雜性。
(3) 對象的概念貫穿於開具良好的對應,從而顯著地提高了系統的開發效率與質量,並大大降低系統維護的難度。
(4) 對象概念的一致性,使參與系統開發的各類人員在開發的各所段具有共同語言,有效地改善了人員之間的交流和協作。
(5) 對象的相對穩定性和對易變因素隔離,增強了系統的應變能力。
(6) 對象類之間的繼承關係和對象的相對獨立性,對軟體復用提供了強有力的支持。
六、OO方法當前的研究領域
當前,在研究OO方法的熱潮中,有如下主要研究領域:
(1) 智慧型計算機的研究。因為OO方法可將知識片看作對象,並為相關知識的模組化提供方便,所以在知識工程領域越來越受到重視。OO方法的設計思想被引入到智慧型計算機的研究中。
(2) 新一代作業系統的研究。採用OO方法來組織設計新一代作業系統具有如下優點:採用對象來描述OS所需要設計、管理的各類資源信息,如檔案、印表機、處理機、各類解設等更為自然;引入OO方法來處理OO的諸多事務,如命名、同步、保護、管理等,會更易實現、更便於維護;OO方法對於多機、並發控制可提供有力的支持,並能得當地管理網路,使其更豐富和協調。
(3) 多學科的綜合研究。當前,人工智慧、資料庫、程式語言的研究有匯合趨勢。例如,在研究新一代資料庫系統(智慧型資料庫系統)中,能否用人工智慧思想與OO方法建立描述功能更強的數椐模型?能否將資料庫語言和程式語言融為一體?為了實現多學科的綜合,OO方法是一個很有希望的匯聚點。
(4) 新一代面向對象的硬體系統的研究。要支持採用OO方法設計的軟體系統的運行,必須建立更理想的能支持OO方法的硬體環境。目前採用松耦合(分布主存)結構的多處理機系統更接近於OO方法的思想;作為最新出現的神經網路計算機的體系結構與OO方法的體系結構具有驚人的類似,並能相互支持與配合:一個神經元就是一個小粒度的對象;神經元的連線機制與OO方法的訊息傳送有著天然的聯繫;一次連線可以看作一次訊息的傳送。可以預料,將OO方法與神經網路研究相互結合,必然可以開發出功能更強、更迷人的新一代計算機硬體系統。
五、展望
面向對象方法在80年代已經得到了很大的發展,並且已在計算機科學、信息科學、系統科學和產業界得到了有效的套用,顯示出其強大的生命力。可以展望在90年代內,面向對象方法將會大更深、吏廣、更高的方向上取得進展:
(1) 更深的方向:如OO方法的理論基礎和形式化描述;用OO技術設計出新一代OS等。
(2) 更廣的方向:如面向對象的知識表示;面向對象的仿真系統;面向對象的多媒體系統;面向對象的靈境系統等。
(3) 更高的方向:如從思維科學的高度來豐富OO方法學的本質屬性,突破現有的面向對象技術的一些局限、研究統一的面向對象的範式等。