【摘 要】面向?qū)ο笳Z言分為純面向?qū)ο笳Z言和混合型面向?qū)ο笳Z言兩種形式,純面向?qū)ο笳Z言適合面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶崿F(xiàn);混合型面向?qū)ο笳Z言則注重于提高系統(tǒng)的運行速度,使傳統(tǒng)使用結(jié)構(gòu)化編程方式的程序員容易接受面向?qū)ο笏枷?。本文就面向?qū)ο笳Z言機制進行探討研究。
【關(guān)鍵詞】面向?qū)ο?語言機制
面向?qū)ο笳Z言發(fā)展有兩大方向,一是純面向?qū)ο蟮恼Z言,如Java等語言;另一類是混合型面向?qū)ο笳Z言,也就是在過程語言或其他語言中增加了類、繼承等面向?qū)ο髾C制,如C++等語言。就兩種形式的面向?qū)ο笳Z言比較而言,純面向?qū)ο笳Z言更加適合面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶崿F(xiàn);而混合型面向?qū)ο笳Z言則更加注重于提高系統(tǒng)的運行速度,使傳統(tǒng)使用結(jié)構(gòu)化編程方式的程序員容易接受面向?qū)ο笏枷?。面向?qū)ο蟪绦蛟O(shè)計語言以對象為中心,對象是程序運行時的基本成分。面向?qū)ο蟪绦蛟O(shè)計語言中提供了類、繼承等機制。面向?qū)ο蟮某绦蛟O(shè)計即為設(shè)計類及由類構(gòu)造程序的方法和過程,用計算機對象模擬現(xiàn)實世界。成熟的面向?qū)ο蟮某绦蛟O(shè)計語言通常都提供豐富的類庫和強有力的開發(fā)環(huán)境。
1.支持類與對象概念的機制:面向?qū)ο笳Z言都允許用戶動態(tài)創(chuàng)建對象,且可以用指針引用動態(tài)創(chuàng)建的對象。允許動態(tài)創(chuàng)建對象,就意味著系統(tǒng)必須處理內(nèi)存管理問題,如果不及時釋放不再需要的對象所占用的內(nèi)存,動態(tài)存儲分配就有可能耗盡內(nèi)存,出現(xiàn)內(nèi)存不足的問題。通常,對這類問題的解決方法有兩種,一種是由語言的運行機制自動管理內(nèi)存,即提供自動回收“垃圾”的機制;另一種是由程序員編寫釋放內(nèi)存的代碼。自動管理內(nèi)存不僅方便而且安全,但是必須采用先進的垃圾收集算法才能減少開銷。某些面向?qū)ο蟮恼Z言(如C++)允許程序員定義析構(gòu)函數(shù)。每當一個對象超出范圍或被顯式刪除時,就自動調(diào)用析構(gòu)函數(shù)。這種機制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存的操作,卻又不是采用垃圾收集機制。
2.實現(xiàn)整體-部分結(jié)構(gòu)的機制:實現(xiàn)整體-部分結(jié)構(gòu)的機制有兩種方法,一種是使用指針實現(xiàn)整體-部分結(jié)構(gòu),另一種是使用獨立的關(guān)聯(lián)對象實現(xiàn)整體-部分結(jié)構(gòu)。一般來說,通過增加內(nèi)部指針可以方便地實現(xiàn)關(guān)聯(lián),使用指針是最容易的實現(xiàn)方法。但是,大多數(shù)現(xiàn)有的面向?qū)ο笳Z言并不顯式支持獨立的關(guān)聯(lián)對象。
3.實現(xiàn)一般-特殊結(jié)構(gòu)的機制:實現(xiàn)一般-特殊結(jié)構(gòu)的機制,包括實現(xiàn)繼承的機制和解決名字沖突的機制。所謂解決名字沖突,是指在支持多重繼承的語言中,處理在多個基類中可能出現(xiàn)的重名問題。通常,有些語言拒絕接受有名字沖突的程序,另一些語言提供了解決沖突的協(xié)議。無論使用何種語言,程序員都應(yīng)該盡力避免出現(xiàn)名字沖突。
4.實現(xiàn)屬性和服務(wù)的機制:實現(xiàn)屬性的機制應(yīng)該著重考慮的幾個因素:支持實例連接的機制;屬性的可見性控制;對屬性值的約束。對于實現(xiàn)服務(wù)的機制來說,主要應(yīng)該考慮下列因素:支持消息連接的機制;控制服務(wù)可見性的機制;動態(tài)聯(lián)編:所謂動態(tài)聯(lián)編,是指應(yīng)用系統(tǒng)在運行過程中,當需要執(zhí)行一個特定服務(wù)的時候,選擇(或聯(lián)編)實現(xiàn)該服務(wù)的適當算法的能力。動態(tài)聯(lián)編機制使得程序員在向?qū)ο蟀l(fā)送消息時擁有較大自由,在發(fā)送消息前,無須知道接收消息的對象當時屬于哪個類。
5.類型檢查機制:按照編譯時進行類型檢查的嚴格程度,程序設(shè)計語言分為三種類型:弱類型、強類型和混合型。弱類型:語言僅要求每個變量或?qū)傩噪`屬于一個對象。強類型:語法規(guī)定每個變量或?qū)傩员仨殰蚀_地屬于某個特定的類。面向?qū)ο笳Z言包含不同類型的語言,如,Smalltalk實際上是一種無類型語言;C++則是強類型語言?;旌闲驼Z言:為提高操作效率,允許屬性值不是對象而是某種預(yù)定義的基本類型數(shù)據(jù),如C++等。強類型語言有兩個優(yōu)點:有利于在編譯時發(fā)現(xiàn)程序錯誤;增加了優(yōu)化的可能性。通常使用強類型編譯型語言開發(fā)軟件產(chǎn)品,使用弱類型解釋型語言快速開發(fā)原型。一般來說,強類型語言有助于提高軟件的可靠性和運行效率,現(xiàn)代的程序語言都是強類型的,大多數(shù)理論支持強類型檢查。
6.類庫機制:目前,所有的面向?qū)ο蟮某绦蛟O(shè)計語言都提供一個實用的類庫。某些語言本身并沒有規(guī)定提供什么樣的類庫,而是由實現(xiàn)這種語言的編譯系統(tǒng)自行提供類庫。有了類庫,程序員可以重用許多軟構(gòu)件,不必重新編寫,這為實現(xiàn)軟件重用帶來很大方便。類庫中通常包含實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)的類,例如動態(tài)數(shù)組、表、隊列、棧和樹等,通常把這些類稱為包容類。類庫中還包含了實現(xiàn)各種關(guān)聯(lián)的類。更完整的類庫通常還提供了接口類和圖形庫。
7.效率機制:早期的面向?qū)ο笳Z言是解釋型而不是編譯型的。大家認為這些語言缺點是效率低。當今面向?qū)ο笳Z言都擁有完整類庫,類庫中提供了更高效的算法和更好的數(shù)據(jù)結(jié)構(gòu),與非面向?qū)ο笳Z言相比,得到更快運行的代碼。如,庫中已經(jīng)提供了算法先進、代碼可靠的一類數(shù)據(jù)結(jié)構(gòu),程序員再不必編寫像實現(xiàn)哈希表或平衡樹算法的代碼了,因此,提高了編程效率和運行效率。
8.永久保存對象機制:在一個程序都對數(shù)據(jù)進行處理時,希望數(shù)據(jù)能夠長時間保存下來。保存數(shù)據(jù)需要提供某種保存數(shù)據(jù)的方法。長期保存數(shù)據(jù)主要有兩個原因:①為實現(xiàn)在不同程序之間傳遞數(shù)據(jù),需要保存數(shù)據(jù);②為恢復(fù)被中斷了的程序的運行,首先需要保存數(shù)據(jù)。對于不同面向?qū)ο笳Z言,長期保存數(shù)據(jù)的方法也不同。有些面向?qū)ο笳Z言(例如C++)沒有提供直接存儲對象的機制,這些語言的用戶必須自己管理對象的輸入/輸出,或者購買面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)。有些面向?qū)ο笳Z言(Smalltalk)把當前的執(zhí)行狀態(tài)完整地保存在磁盤上。還有一些面向?qū)ο笳Z言提供了訪問磁盤對象的輸入/輸出操作。通過在類庫中增加對象存儲管理功能(EIFFEL采用策略),可在開發(fā)環(huán)境中提供對象存儲管理功能,而且還不改變語言定義或不增加關(guān)鍵字。然后,從“可存儲的類”中派生出需要永久保存的對象,該對象自然繼承了對象存儲管理功能。
9.類模板機制:EIFFEL語言中就有參數(shù)化類,C++語言也提供了類模板。Visual Basic和Visual C++提供了函數(shù)模板和類模板。
10.開發(fā)環(huán)境機制:在開發(fā)大型系統(tǒng)的時候,還可能需要系統(tǒng)構(gòu)造工具和變動控制工具。因此應(yīng)該考慮語言本身是否提供了這種工具,或者該語言能否與現(xiàn)有的這類工具很好地集成起來。
結(jié)論:面向?qū)ο蟪绦蛟O(shè)計語言以對象為中心,提供了類、繼承等機制,每個對象是程序運行時的基本成分。面向?qū)ο蟮某绦蛟O(shè)計是設(shè)計類及由類構(gòu)造程序的方法和過程,以計算機對象模擬現(xiàn)實世界,提供豐富的類庫和強有力的開發(fā)環(huán)境。完善的機制是面向?qū)ο笳Z言強大生命力的體現(xiàn)。研究和發(fā)展面向?qū)ο笳Z言機制有其實用價值和學(xué)術(shù)價值。