天天看點

面向過程和面向對象的差別是什麼?

1.面向過程(結構化程式設計)

  采用自頂向下、分而治之的方法,将整個程式按功能劃分為幾個可獨立程式設計的子過程子產品,每一子子產品完成指定的子任務,主過程通過調用各子過程完來成全部處理工作 。

2.面向對象的程式設計(Object-Oriented Programming)

  面向對象的程式設計方法強調直接以現實世界中的物體為中心來思考和認識問題,并按照這些事物的本質特征把它們抽象為類。采用資料抽象和資料隐藏,類之間互互相動,共同構成大型的面向對象基礎。

3.面向對象的相關概念

1)類(Class):具有相似屬性和行為的一組對象,就稱為類。可見,有了類的概念以後,就可以對具有共同特征的事物進行統一描述;

2)對象(Object):類的執行個體,每個對象都具有屬性和方法這兩方面的特征。對象的屬性描述了對象的狀态和特征,對象的方法說明了對象的行為和功能,并且對象的屬性值隻應由這個對象的方法來讀取和修改,兩者結合在一起就構成了對象的完整描述。;

3)封裝(Encapsulation):封裝把對象的屬性和方法看成了一個密不可分的整體,進而使對象能夠完整地描述并對應于一個具體事物 ;

4)繼承(Inheritance):在面向對象的程式設計中,允許在已有類的基礎上通過增加新特征而派生出新的類,這稱為繼承。其原有的類稱為基類(base class),而建立立的類稱為派生類(derived class);

5)消息(Message):當一個對象需要另外一個對象提供服務時,它向對方發出一個服務請求,而收到請求的對象會響應這個請求并完成指定的服務。這種向對象發出的服務請求就稱為消息。所謂消息就是調用一個對象所提供的方法;

6)多态性(Polymorphism):多态性是面向對象的一個重要特征。多态有兩種,靜态的和動态的。在通過繼承而派生出的一系列類中,可能存在一些名稱相同,但實作過程和功能不同的方法(Method)。 當程式中的其他部分發出同樣的消息時,按照接收消息對象的不同能夠自動執行類中相應的方法。其好處是,使用者不必知道某個對象所屬的類就可以執行多态行為,進而為程式設計帶來更大友善。

4.面向對象程式設計的特點

1)OOP以“對象”或“資料”為中心。由于對象自然地反映了應用領域的子產品性,是以具有相對穩定性,可以被用作一個元件去構成更複雜的應用,又由于對象一般封裝的是某一實際需求的各種成分,是以,某一對象的改變對整個系統幾乎沒有影響;

2)引入了“類”(class)的概念。類與類以層次結構組織,屬于某個類的對象除具有該類所描述的特性外,還具有層次結構中該類上層所有類描述的全部性質,OOP中稱這種機制為繼承;

3)OOP方法的子產品性與繼承性,保證了新的應用程式設計可在原有對象的資料類型和功能的基礎上通過重用、擴充和細化來進行,而不必從頭做起或複制原有代碼,這樣,大大減少了重新編寫新代碼的工作量,同時降低了程式設計過程中出錯的可能性,達到了事半功倍的效果。

5.設計了良好的OOP系統具有的特性

1)可維護性:軟體在投入使用的過程中,随着運作時間的延長,後期可能就不符合客戶的需求了,我們就需要對軟體進行修改。後期維護的人員初期可能沒有參與到軟體的開發中,對軟體的結構是不熟悉的。那OOP系統就能保證後期的維護比較友善,比較簡單;

2)可擴充性:在軟體運作後期我們需要對軟體新增一些功能的時候,不需要對軟體的架構進行大的更改就能非常友善的增加一些功能;

3)可複用性:我們在這一個項目中使用的一些代碼和類,子產品可以很容易的拿到另外一個項目中去使用;

4)健壯性:軟體要比較穩定,出錯的幾率比較小。

6.二者比較

1)傳統的結構化程式設計方法以過程為中心構造應用程式,資料和處理資料的過程代碼是分離的、互相獨立的實體,設計出的程式可重用代碼少,且當代碼量增加時維護資料和代碼的一緻性困難;

2)面向對象程式設計方法中,對象所具有的封裝性和繼承性使得代碼重用成為可能,并大大減少了程式出錯的可能性;

3)面向對象方法吸收了結構化程式設計方法的優點,同時引入了新概念、新機制并建立了比傳統方法更高層次的抽象。面向對象内部也包含了面向過程,比如我們在設計類中的一個方法時,我們就會采用面向過程的一些原則,一些思想等等…….

7.一些誤區

1)面向對象優于面向過程:面向對象與面向過程沒有絕對的優劣之分,隻有是否适用之别;

2)C++ = C + 類, C++的程式設計思想被很大的改變,如果僅僅隻是适用類将C封裝起來,那不是C++的面向對象的原則;

3)使用面向對象技術一定能構造出更優秀的軟體:有人認為面向對象做出來的軟體一定是非常優秀的,但是面向對象不慎誤用,或者是面向對象程式設計的思想沒有掌握好的話,這樣的軟體隻會比面向過程寫出的軟體更糟糕而已;

4)學會了C++就學會了面向對象技術,這個我們前面也已經說過,學習C++隻是學習面向對象的第一步,後面還需要學習面向對象的一些原理,原則和方法。更是需要自己去實踐,對面向對象不斷加深了解。