1. 程式人生 > >面向過程程式設計和麵向物件程式設計的區別

面向過程程式設計和麵向物件程式設計的區別

面向過程程式設計

面向過程程式設計是一種以過程為中心的程式設計思想,分析出解決問題的步驟,然後用函式把這些步驟一步一步實現。面向過程程式設計,資料和對資料的操作是分離的。

面向物件程式設計

面向物件程式設計是將事物物件化,通過物件通訊來解決問題。面向物件程式設計,資料和對資料的操作是繫結在一起的。

面向物件的三大基本特徵:

封裝:把客觀事物封裝成抽象的類,隱藏屬性和方法的實現細節,僅對外公開介面。

繼承:子類可以使用父類的所有功能,並且對這些功能進行擴充套件。繼承的過程,就是從一般到特殊的過程。

多型:介面的多種不同的實現方式即為多型。同一操作作用於不同的物件,產生不同的執行結果。在執行時,通過指向基類的指標或引用來呼叫派生類中的虛擬函式來實現多型。

封裝可以隱藏實現細節,使得程式碼模組化;繼承可以擴充套件已存在的類。它們的目的都是為了---程式碼重用。

而多型則是為了實現另一個目的---介面重用。

面向物件的程式碼更加支援重用,能降低軟體開發和維護的成本,提高軟體的質量。


掌握面向物件的困難之處在於思路的轉換。我們通常習慣於考慮解決問題的方法,而不是考慮將問題抽象成物件再去解決它。

從兩個簡單的例子來理解兩者的區別


第一個簡單的例子:編寫一個駕駛汽車的方法

面向過程的程式設計:
編寫一個方法,void drivecar();
面向物件的程式設計:
將一輛汽車看成一個物件,將所有汽車物件的共性抽取出來,設計一個類Car,類中有一個方法void drive(),用Car這個類例項化一個具體的物件car,呼叫:car.drive()。


第二個簡單的例子:求一個長方形的周長和麵積。
面向過程的程式設計方式:
1、確定長方形周長和麵積的演算法。
2、編寫兩個方法(函式)分別計算長方形的周長和麵積。
3、求周長的方法(函式)和求面積的方法(函式)需要兩個引數,分別是長方形的長和寬。

面向物件的程式設計方式:
1、一個長方形可以看成一個長方形物件。
2、一個長方形物件有兩個狀態(長和寬)和兩個行為(求周長和求面積)。
3、將所有長方形的共性抽取出來,設計一個長方形類。
4、通過長方形物件的行為,就可以求出某個具體的長方形物件的周長和麵積。