1.支持類與對象概念的機制
所有面向對象語言都允許用戶動態創建對象,并且可以用指針引用動態創建的對象。允許動態創建對象,就意味著系統必須處理內存管理問題,如果不及時釋放不再需要的對象所占用的內存,動態存儲分配就有可能耗盡內存
有兩種管理內存的方法:
一種是由語言的運行機制自動管理內存,即提供自動回收“垃圾”的機制;
另一種是由程序員編寫釋放內存的代碼。
2.實現整體-部分(即聚集)結構的機制
一般說來,有兩種實現方法:
(1)使用指針
(2)獨立的關聯對象
實現整體-部分結構。大多數現有的面向對象語言并不顯式支持獨立的關聯對象,在這種情況下,使用指針是最容易的實現方法,通過增加內部指針可以方便地實現關聯。
3.實現一般-特殊(即泛化)結構的機制
既包括實現繼承的機制也包括解決名字沖突的機制。
所謂解決名字沖突,指的是處理在多個基類中可能出現的重名問題。
這個問題僅在支持多重繼承的語言中才會遇到。某些語言拒絕接受有名字沖突的程序,另一些語言提供了解決沖突的協議。不論使用何種語言,程序員都應該盡力避免出現名字沖突。
4.實現屬性和服務的機制
對于實現屬性的機制應該著重考慮以下幾個方面:
支持實例連接的機制;屬性的可見性控制;對屬性值的約束。
對于服務來說,主要應該考慮下列因素:
支持消息連接(即表達對象交互關系)的機制;控制服務可見性的機制;動態聯編。
?所謂動態聯編,是指應用系統在運行過程中,當需要執行一個特定服務的時候,選擇(或聯編)實現該服務的適當算法的能力。
5.類型檢查
程序設計語言可以按照編譯時進行類型檢查的嚴格程度來分類。
如果語言僅要求每個變量或屬性隸屬于一個對象,則是弱類型的;
如果語法規定每個變量或屬性必須準確地屬于某個特定的類,則這樣的語言是強類型的。
?面向對象語言在這方面差異很大,例如,Smalltalk實際上是一種無類型語言(所有變量都是未指定類的對象);C++和Eiffel則是強類型語言。混合型語言(如C++、Objective_C等)甚至允許屬性值不是對象而是某種預定義的基本類型數據(如整數和浮點數等),這可以提高操作的效率。
強類型語言主要有兩個優點:
一是有利于在編譯時發現程序錯誤
二是增加了優化的可能性。
通常,
使用強類型編譯型語言開發軟件產品。
使用弱類型解釋型語言快速開發原型。
總地說來,強類型語言有助于提高軟件的可靠性和運行效率,現代的程序語言理論支持強類型檢查,大多數新語言都是強類型的。
6.類庫
大多數面向對象語言都提供一個實用的類庫。某些語言本身并沒有規定提供什么樣的類庫,而是由實現這種語言的編譯系統自行提供類庫。存在類庫,這為實現軟件重用帶來很大方便。
類庫中往往包含實現通用數據結構(例如,動態數組、表、隊列、棧、樹等)的類,通常把這些類稱為包容類。在類庫中還可以找到實現各種關聯的類。
更完整的類庫通常還提供獨立于具體設備的接口類(例如,輸入輸出流),此外,用于實現窗口系統的用戶界面類也非常有用,它們構成一個相對獨立的圖形庫。
7.效率
許多人認為面向對象語言的主要缺點是效率低。
一個原因是,某些早期的面向對象語言是解釋型的而不是編譯型的。
事實上,使用擁有完整類庫的面向對象語言,有時能比使用非面向對象語言得到運行更快的代碼。這是因為類庫中提供了更高效的算法和更好的數據結構。
另一個原因是,這種語言在運行時使用動態聯編實現多態性,這似乎需要在運行時查找繼承樹,以得到定義給定操作的類。
事實上,絕大多數面向對象語言都優化了這個查找過程,從而實現了高效率查找。
8.持久保存對象
任何應用程序都對數據進行處理,如果希望數據能夠不依賴于程序執行的生命期而長時間保存下來,則需要提供某種保存數據的方法。希望長期保存數據主要出于以下兩個原因:?
(1) 為實現在不同程序之間傳遞數據,需要保存數據;
(2) 為恢復被中斷了的程序的運行,首先需要保存數據
一些面向對象語言(例如C++),沒有提供直接存儲對象的機制。這些語言的用戶必須自己管理對象的輸入輸出,或者購買面向對象的數據庫管理系統。
另外一些面向對象語言(例如Smalltalk),把當前的執行狀態完整地保存在磁盤上。還有一些面向對象語言,提供了訪問磁盤對象的輸入輸出操作。
通過在類庫中增加對象存儲管理功能,可以在不改變語言定義或不增加關鍵字的情況下,就在開發環境中提供這種功能。然后,可以從“可存儲的類”中派生出需要持久保存的對象,該對象自然繼承了對象存儲管理功能。這就是Eiffel語言采用的策略。
9.參數化類
所謂參數化類,就是使用一個或多個類型去參數化一個類的機制。
有了這種機制,程序員就可以先定義一個參數化的類模板(即在類定義中包含以參數形式出現的一個或多個類型)
然后把數據類型作為參數傳遞進來,從而把這個類模板應用在不同的應用程序中,或用在同一應用程序的不同部分。
Eiffel語言中就有參數化類,C++語言也提供了類模板。
10.開發環境
軟件工具和軟件工程環境對軟件生產率有很大影響。
編譯程序或解釋程序是最基本、最重要的軟件工具。
在開發大型系統的時候,需要有系統構造工具和變動控制工具。