物件導向與面向過程的比較
來源:互聯網
上載者:User
1.什麼是物件導向技術?
物件導向技術是一種以對象為基礎,以事件或訊息來驅動對象執行處理的程式設計技術。它具有抽象性、封裝性、繼承性及多態性。
2.物件導向與面向過程程式設計有什麼不同?
物件導向與面向過程程式設計有如下不同:
(1)面向過程程式設計方法採用函數(或過程)來描述對資料的操作,但又將函數與其操作的資料分離開來;物件導向程式設計方法將資料和對資料的操作封裝在一起,作為一個整體來處理。
函數與資料是否分離
(2)面向過程程式設計方法以功能為中心來設計功能模組,難於維護;而物件導向程式設計方法以資料為中心來描述系統,資料相對於功能而言具有較強的穩定性,因此更易於維護。
以功能為中心;以資料為中心
(3)面向過程程式的控制流程程由程式中預定順序來決定;物件導向程式的控制流程程由運行時各種事件的實際發生來觸發,而不再由預定順序來決定,更符合實際需要。
預定順序;由運行時各種事件的實際發生來觸發
(4)物件導向程式設計方法可以利用架構產品(如MFC,Microsoft Foundation Classes)進行編程。
物件導向可利用架構物件導向和面向過程的根本差別,在於封裝之後,物件導向提供了面向過程不具備的各種特性,最主要的,就是繼承和多態。
3.物件導向技術有哪些優點?
物件導向技術具有程式結構清晰,自動產生程式架構,實現簡單,可有效地減少程式的維護工作量,代碼重用率高,軟體開發效率高等優點。
4.物件導向技術中的封裝性有何優缺點?如何克服這些缺點?
封裝將對象有關的資料和行為封裝成整體來處理,使得對象以外的部分不能隨意存取對象的內部屬性,從而有效地避免了外部錯誤對它的影響,大大減小了查錯和排錯的難度。另一方面,當進行修改對象內部時,由於只有少量的外部介面對外提供服務,因此同樣減小了內部的修改對外部的影響。
如果一味地強調封裝,對象的任何屬性都不允許外部直接存取,則要增加許多沒有其他意義、只負責讀或寫的行為。這會為編程工作增加負擔,增加運行開銷,並且使程式顯得臃腫。為了避免這一點,在程式的具體實現過程中應使對象有不同程度的可見度,進而與客觀世界的具體情況相符合。
5.為什麼要應用繼承機制?
客觀事物既有共性,也有特性。如果只考慮事物的共性,而不考慮事物的特性,就不能反映出客觀世界中事物之間的層次關係。抽象機制是考慮事物的共性,繼承機制是考慮事物的特性,這樣才能完整地描述客觀世界的層次關係。繼承能使軟體模組具有可重用性、獨立性,縮短軟體開發週期,提高軟體開發效率,同時使軟體易於維護。
6.C++對多態性的支援體現在哪些方面?
C++的多態性分為編譯時間多態和運行時多態。編譯時間多態是指在程式的編譯階段由編譯系統根據參數確定與哪個同名的函數相聯絡;運行時多態是指在程式的運行階段才根據產生的資訊確定需要調用哪個同名的函數。C++通過函數重載和運算子多載實現編譯時間多態,通過繼承和虛函數來實現運行時多態。
7.目前常用的物件導向程式設計語言有何異同?
目前常用的物件導向程式設計語言有C++、Java、Visual Basic等。C++是混合型物件導向程式設計語言,繼承並改進了C語言,是一種既支援物件導向又支援面向過程的程式設計方法。Java是純物件導向程式設計語言,從C++發展而來。C++和Java均支援物件導向技術的基本概念和基本特徵,如封裝、類、建構函式、解構函式、繼承、多態等。
C++與Java文法描述有相同之處,也有不同之處。如基本結構語句的文法大致相同,而類定義的文法等方面則不相同。此外還有以下不同:
(1)C++有運算子多載機制,而Java沒有此特性;
(2)C++支援多重繼承,而Java只支援單重繼承;
(3)C++通過建構函式建立對象,可以直接使用指標來操作對象的成員,而Java通過new運算子建立對象,通過new運算子返回的對象引用來使用對象,而不是直接操作指標;
(4)C++程式要顯式地釋放所分配的記憶體,而Java具有記憶體垃圾收集機制,自動管理記憶體,不需要顯式釋放所分配的記憶體。
Visual Basic繼承了BASIC語言所具有的文法簡單、容易學習、容易使用、資料處理能力強的特點,又引入了物件導向、事件驅動的編程機制和可視化程式設計方法,大大降低了開發Windows應用程式的難度,有效地提高了應用程式開發的效率。但是,Visual Basic存在文法不嚴格、開發出的系統穩定性較低的缺點。相對C++來說,Visual Basic面向系統底層的編程能力有限。
8.什麼是.NET?
.NET是一種面向網路、支援各種使用者終端的開發平台。它定義了一種公用語言子集(Common Language Subset,CLS),為符合其規範的語言與類庫之間提供無縫整合的混合語言。.NET統一了編程類庫,提供了對下一代網路通訊標準——可延伸標記語言 (XML)(eXtensible Markup Language,XML)的完全支援,使應用程式的開發變得更容易、更簡單。所以?.NET就是Microsoft的XML Web服務平台,不論作業系統或程式設計語言有何差別,XML Web服務均能使應用程式在Internet上傳輸和共用資料。