1. 程式人生 > >什麼是面向物件 什麼是面向過程 面向物件和麵向過程的區別

什麼是面向物件 什麼是面向過程 面向物件和麵向過程的區別

轉自http://blog.163.com/[email protected]/blog/static/83583263201131611916893/

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。 
面向物件是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

1.什麼是面向物件技術?

面向物件技術是一種以物件為基礎,以事件或訊息來驅動物件執行處理的程式設計技術。它具有抽象性、封裝性、繼承性及多型性。

2.面向物件與面向過程程式設計有什麼不同?

面向物件與面向過程程式設計有如下不同:

(1)面向過程程式設計方法採用函式(或過程)來描述對資料的操作,但又將函式與其操作的資料分離開來;面向物件程式設計方法將資料和對資料的操作封裝在一起,作為一個整體來處理。 函式與資料是否分離

(2)面向過程程式設計方法以功能為中心來設計功能模組,難於維護;而面向物件程式設計方法以資料為中心來描述系統,資料相對於功能而言具有較強的穩定性,因此更易於維護。

(3)面向過程程式的控制流程由程式中預定順序來決定;面向物件程式的控制流程由執行時各種事件的實際發生來觸發,而不再由預定順序來決定,更符合實際需要。 預定順序;由執行時各種事件的實際發生來觸發

(4)面向物件程式設計方法可以利用框架產品(如MFC,Microsoft Foundation Classes)進行程式設計。 面向物件可利用框架 面向物件和麵向過程的根本差別,在於封裝之後,面向物件提供了面向過程不具備的各種特性,最主要的,就是繼承和多型。

 3.面向物件技術有哪些優點?

面向物件技術具有程式結構清晰,自動生成程式框架,實現簡單,可有效地減少程式的維護工作量,程式碼重用率高,軟體開發效率高等優點。 4.面向物件技術中的封裝性有何優缺點?如何克服這些缺點?

封裝將物件有關的資料和行為封裝成整體來處理,使得物件以外的部分不能隨意存取物件的內部屬性,從而有效地避免了外部錯誤對它的影響,大大減小了查錯和排錯的難度。另一方面,當進行修改物件內部時,由於只有少量的外部介面對外提供服務,因此同樣減小了內部的修改對外部的影響。 如果一味地強調封裝,物件的任何屬性都不允許外部直接存取,則要增加許多沒有其他意義、只負責讀或寫的行為。這會為程式設計工作增加負擔,增加執行開銷,並且使程式顯得臃腫。為了避免這一點,在程式的具體實現過程中應使物件有不同程度的可見性,進而與客觀世界的具體情況相符合。

面向物件的特點是:封裝,多型,繼承。其中多型有分為過載和重寫。面向物件的程式設計思想更加接近現實的事物。 有這樣幾點好處:

 1、是程式設計更加容易。因為面向物件更接近於現實,所以你可以從現實的東西出發,進行適當的抽象。

 2、在軟體工程上,面向物件可以使工程更加模組化,實現更低的耦合和更高的內聚。

3、在設計模式上(似乎只有面向物件才設計到設計模式),面向物件可以更好的實現開-閉原則。也使程式碼更易閱讀。 相對而言,面向過程的程式設計是面向物件程式設計的基礎。面向物件的程式裡面一定會有面向過程的程式片斷的

 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面向系統底層的程式設計能力有限