面向過程編程和面向對象編程的區別


面向過程編程和面向對象編程的區別


一、引言:

無論是哪種語言,我們最終的目的都是希望設計這個語言來解決我們現實生活需要解決的問題。當然,你也要明白,我們現實生活中出現的軟件程序絕不是一個簡單的1~100的這樣的小算法程序,而是成百上千個這樣的小算法集合在一個,共同構成了我們所需要的一個軟件程序。

二、面向過程:

以面向過程的C語言為例。當我們面對一個問題時,我們更加側重以正常人的邏輯思維來理解問題。

1)解決1~100的和:定義一個循環來依次求累計求解各個數字的和

2)解決1-100和的同時也能解決1-200的和:在1)的基礎上或許我們會定義一個函數(Java里面稱為方法)設置不同的參數來解決這樣問題。

3)解決1~100和的同時還能解決100!:此時可能就需要設置兩個不同的函數(Java里面叫做方法)來求解問題。

總結:其實我們不難發現,C語言的求解問題,有點類似於那種你需要什么,我就給你解決什么的,你不需要的我就不管,即沒有讓事情本身沒有太多的聯系。

三、面向對象:

以面向過程的Java語言為例。當我們面對和C語言一樣的問題時候,我們更加的側重於誰來幫我們解決,而不是我自己去怎么解決的思路。(我最開始理解這句話的時候,是知其然不知其所以然的)我后來的理解就是強調了內在事物的本身聯系。同樣以上面的三個題目為例。

1)解決1-100的和:不可否認,我們還是需要利用循環來求解問題。但是,這里既然是利用的面向對象的思想特點,那么,在求解問題的時候我們思想就不能夠僅僅停留在循環表面。抽取出問題的本質,這是解決一個數字到另一個數字的求和問題。

2)解決1-100和的同時也能解決1-200的和:在1)問題的基礎上,我們不難看出,抽取出的問題本質也能夠很好的解決這個問題,它只是數字換一下。

3)解決1-100和的同時還能解決100!:確實我們也需要設置兩個方法(C語言里面叫做函數)來解決這個問題,但是我們不能僅僅局限於這里,因為他是面向對象的語言。抽取出問題的本質,這是兩個不同的問題,但是他們操作的卻是同一群數字,只是運算符號不一樣。

總結:在解決問題的時候,不是不關注怎么解決問題了(面向過程的語言的解決方式),而是更加側重於事情內在的聯系,將所要解決的問題進行一個合理的歸類,用線把他們連在一個。

四、總結兩者的聯系:

讀完前面的兩個對不同語言的解讀。我相信你已經能夠明白,面向對象的語言與面向過程的語言並不是相互排斥。只是在思考問題時,不同語言的占位不同。面向過程側重解決問題就完事,面向對象側重抽取事務的本質,來解決更多的類似的問題。筆者認為,在初學編程語言的時候,面向過程的編程語言,更能夠讓我上手編程,因為沒有其他的思維復雜度,看問題的角度就是簡單的解決我眼下的問題,也許他是一個循環、一個遞歸、一個排序。而面向過程的語言,會在此基礎上,再來注入一種新思維的方式,讓你在解決問題的時候,不停留在問題的表面(為了解決一個普通的算法問題),而是着眼於整個軟件程序的設計。

五、面向對象詳解:

回到引言中,我們說過,無論是哪種語言,最終的結果就是設計出一款優秀的軟件(最終結果肯定不止這一種)。東西是那么個東西,但是怎么才能夠做好呢?這里可能就會涉及到很多不同的東西,例如:程序員的級別、編程語言的選擇、開發時間的長短、、、、、、如何在這么多選項中依次選擇出再組合在一起,這便成了優秀軟件的最原始基礎。針對其中的開發時間和編程語言來說,我統稱為開發效率。這里我還是利用C語言和Java來說明,當我們要設計一個程序的時候,我們肯定會依次解決問題。C語言在解決問題的時候,更多的就是一個一個解決,然后組合在一個,然后形成一個程序。但是Java不同,在解決問題的時候,我們將要解決的問題,抽象到一個點上。舉個例子:要去吃飯,要去做作業,又要去打籃球。這里是三個不同的事情,那么主體呢?誰來做這些?你、我還是小明?那么就抽象到一個點上,取名為People,無論是誰都可以代替它,以此來完成各種操作。在做的時候,只需要依靠這個People來調用它的三個方法之一,你要什么我就調用什么。以此來完成這一起的操作。那么問題又來了,編寫這個方法和編寫C最開始的函數不是一樣的,並且還多出這么多的步驟?出於這一點的考慮,Java的開發者在Java中設計了豐富的類庫(編寫在JDK中)。所以我們在解決程序設計問題的時候,就不會把重心放在怎么去解決問題本身,而在於,利用類庫的特性去調用里面的方法,你需要什么你就調用什么。或許你還會去關注怎么讓這些問題更好的排版,能夠讓我的整個程序編寫起來更加的舒服。即軟件工程中所說的:高內聚低耦合(相關事物之間有很強的聯系感,不相關的事物之間很小的影響)。當然這也是為了程序后期的運行維護做准備的。對於開發者沒有的方法,我們則需要去自己定義。為什么它不幫我們把所有的方法全部寫完,那樣我們無論什么都直接調用呢?試想,你的需求多還是它的設計多?舉個例子:A用戶想要打印:我走路,B用戶想要打印:我也走路。你說開發者能幫你寫完嗎?答案是能的,但是這樣設計的意義在哪里?一句簡單的話,自己要用,自己定義就行,沒有必要為了一句話設計一個打印語句在類庫中,讓所有的開發者跟着你一起用你那句話。相反,哪些功能就很有必要呢?一句話:基礎的算法題。比如:排序、累加、累乘、、、、、、以此讓整個程序開發,更加的順暢,為了不同的側重點而考慮問題。

六、總結:

面向過程語言是在面向對象語言的基礎上建立起來的,它將面向過程所需要的工作進行一個抽取,然后將自己工作的重心放在如何協調整個代碼編寫的協調性。我只想說面向對象是面向過程的一個升華,人類的智慧,真的很棒!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM