-
1 # 愛科技愛程式設計愛生活
-
2 # 亜牛
作為一個老碼農,不請自來,用一句話表明二者的區別,面相過程是變數與方法的分離,面相物件是變數與方法的結合。例如,一個廚師炒菜,油鹽醬醋,時間,食材,火候之類的都是變數,煎炸炒蒸之類的烹飪都是方法。那我們分別用二者來描述廚師做到的過程。首先是面相過程,它十分詳細地描述一個廚師怎樣食材變成菜的過程,比如先切菜,這樣呼叫了切菜函式,有引數切菜數量,切菜大小,形狀等,然後煎,又有各種引數,比如時間,火候,以後炸,放調料,一個完整的做菜過程,十分符合思維邏輯,但是問題了來了,每道菜的過程都不一樣,那麼每道菜都對應了這樣的過程,每個廚師的手法和愛好不一樣,那麼每個廚師每道菜都有這樣一個過程,瞬間多了好多程式碼是不是,然後可能顧客口味不一樣,菜品風格變了,比如有些人不吃油炸的,那麼每道菜的過程又要改變了,一旦廚師多了,菜的種類多了,顧客要求多了,寫程式碼就變成了一件非常麻煩的事情,這個時候,出現了面相物件。我們不妨這麼想,我們把每個廚師看成一個獨立的物件,那麼我們把這個廚師數字化,用一堆資料,也就是變數是描述他,身高,體重,年齡等等,把油鹽醬醋之類的變數也和這個人繫結。然後我們把廚師做的事情都寫成方法,吃飯睡覺,包括他做飯的方法,這樣一來方法也和這人綁定了,所以此時我們做到了變數與方法的結合。我們知道,每個廚師都可以用類似方法描述,這樣一來我們可以把廚師這一類人都用相同的變數和方法進行描述,這些被我們抽象出來的變數與方法的集合就叫做一個類,當我們初始化一個類之後,比如,定義了身高體重,興趣愛好,油鹽醬醋用量,加上一堆生活和做飯的方法,這個過程就叫做例項化。例項化一個廚師類之後我們就擁有了一個廚師例項,然後就可以開始呼叫這個廚師的方法了,比如青椒肉絲,切菜,炒菜,放調料,出鍋,都只需要呼叫類中的方法,只是根據菜品不同調用的方法和引數不一樣,而且菜譜變了我換一下方法就行,拿到任何地方都可以用,而且可以隨時例項化一個新廚師應對不同的顧客。現在我總結一下,面相物件只是一個將變數和方法抽象到一起,形成統一描述的類的方法,具體過程還是面相過程的,不過它可以提高程式碼的可重用性,例如,中餐菜譜換到西方就不行了,就要都改進,也就是改程式碼,很麻煩,但是面相物件很簡單,換個廚師就行,也就是怎麼還的問題你都不需要考慮,設計這個類的人都幫你想好了,這就是面相物件的一大特徵,封裝。然後這個廚師退休了,年輕廚師學會他的所有技術,還自創了很多技術,這樣一來,不需要年輕廚師重新研究之前的做菜技術,直接拿老廚師的來用就可以了,這叫做繼承,也是面向物件三大特徵之一。最後,對同一道菜,有不同的做法,年輕廚師雖然繼承了老廚師,但是某些菜他有自己的做法,於是他看客人的喜好,客人喜歡哪種他用哪種,這叫多型,也是面向物件三大特徵之一。
好了,作為一個老碼農加吃貨,用做菜類比,打架了看明白了嗎。
-
3 # 貧僧法號無敵
面向過程就是放養,面向物件就是圈養。在大規模的開發。面向物件的特點才能體現出來。面向物件的代表語言java,c#.面向物件是相對的。java在jsp開發中拋棄了面向物件。在微控制器開發嵌入式開發c語言是無可替代的。c++在windows環境下,無可替代。不要拿什麼phyon,PSP,js這種指令碼語言來說事。功能太單一。說這些語言好的說只能說你的知識面太窄了。
-
4 # PingXhook
利用面向過程的語言的結構體和指標完全可以模擬面向物件的過程。而面向物件的語言就是把這部分程式碼抽象化了,提供了程式碼的利用率。我個人覺得面向過程能解決的簡單單次問題就面向過程解決。如果要反覆用,引數會有變化的程式碼,那就模組化,用面向物件。
-
5 # 玩著學程式設計
面向過程:更多的強調方法和過程;面向物件:一切皆物件,透過建立物件去呼叫方法
效率:面向過程執行效率更高,面向物件開發效率更高;
以前學習程式設計的時候是在“如鵬網”上面學習的,有問題隨時提問,老師實時答疑
有一些文章和影片講程式設計技巧和程式語言的選擇的,分析的挺到位的,講的不錯
再多的可以到如鵬網官網上去了解一下。
-
6 # 夏曹俊
面向物件更適合大工程,模組關聯性比較大的專案,面向過程適合處理獨立模組的專案,其實總體感覺面向物件在做了封裝後,對普通開發人員的要求是降低了,但架構師的要求還是比較高。
-
7 # 蒙面侍衛
通俗地說,就是以 事 為中心,還是以 物 為中心。
面向過程
面向過程的程式設計思想,聚集於解決問題的方法,也就是幹了什麼事(即上面所說的事)。
採用這種思想進行程式設計時,重點是構建一個個函式。
舉例
比如說,你要在視窗上繪製鮮花。
面向過程的思路多半是這樣的,書寫一個繪製鮮花函式(比如取名為 DrawFlower ),帶兩個引數,一個引數用於指定鮮花的顏色,另一個引數用於指定鮮花的大小。
函式寫好後,每當需要畫花時,就呼叫一次 DrawFlower 函式。
現在,我們要在視窗繪製一朵紅花,一朵黃花,那就分別呼叫 DrawFlower 函式兩次,一次畫紅花,一次畫黃花。那麼,如果要畫 1 億朵五顏六色的花呢,那就呼叫 1 億次函式,並分別傳入五花八門的顏色和大小。
面向物件
而面向物件的方法,則聚焦於實施動作的物件,也就是這事兒是誰幹的(即上面所說的物)。
採用這種思想進行程式設計時,重點是抽象提煉出一個個物物件,再根據需要構建一個個類。
舉例
同樣的,我們還是要在視窗上繪製鮮花。 採用面向物件的方法,我們可以先構造一個 Flower 鮮花類,併為這個鮮花類新增兩個屬性:
顏色大小然後實現一個方法:
繪製當我們要繪製鮮花時,需要首先例項化一個 Flower 鮮花物件(在建立鮮花物件時,我們為它指定顏色和大小)。然後,當需要在視窗上繪製時,我們再呼叫這個鮮花物件的繪製方法。
區別
當我們使用面向過程的思想時,由於需要編寫處理事情的函式,所以我們要明確解決問題的過程和要素。
當我們使用面向物件的思想時,由於首先需要構建類,所以我們要提取出來這個物類的共性。例如,鮮花都有顏色,也都有一定的大小。而且,我們構建該物類的最終目的是為了繪製鮮花,所以還必須建立一個繪製方法。
總結
面向過程的主要優點是效能好,省資源(因為無需構建物件),缺點是不直觀,與日常生活中的觀念相差較大,不易於理解,也不利於複用,工程複雜時管理起來難度頗大。
面向物件的主要優點是易於理解和維護、擴充套件方便(因為面向物件有繼承、多型等),複用率高,可根據需要隱藏內部實現,僅暴露必要的介面,缺點是總的來說比面向過程佔用略大,效能略低。
-
8 # 九章演算法
面向物件和麵向過程是兩種程式設計的思維方式。
我們可以通俗易懂的以洗衣服舉例:
任務: 給一堆髒衣服,讓你洗乾淨
面向過程:
將衣服扔進盆裡→放入洗滌劑→放水→洗衣服→清洗衣服→擰乾衣服→曬衣服
現在你將這個洗衣服的部分流程動作(放水,洗衣服,清洗衣服,擰乾衣服)賦予給了洗衣機,這時候物件誕生了,就是洗衣機!
面向物件:
將衣服放進洗衣機→放入洗滌→(洗衣機.放水()→洗衣機.洗衣服()→洗衣機.清洗衣服()→洗衣機.擰乾衣服())→曬衣服
在建立了洗衣機這個物件後,你需要做的只是括號外的事情,相當於你把任務發給了外包公司,至於怎麼洗,那是洗衣機制造商的問題了,反正我買來洗衣機就要負責把衣服洗乾淨!
當然你也可以做一部分洗衣機的動作,然後再扔給洗衣機,比如在清洗好衣服後,使用 洗衣機.擰乾衣服() 。
可以看出:
面向過程是為了解決問題而做一些動作
面向物件是將解決問題的一些動作封裝起來,賦予給一個物件,這個物件具有解決問題的方法以及一定的工作流程
-
9 # IT人劉俊明
首先,面向物件程式語言和麵向過程程式語言都是操作計算機的方式,從本質上來說也都是操作計算機執行任務的工具,只是方式上的不同而已。
面向過程程式語言故名思議,以業務流程為考慮問題的出發點,從上到下按照解決問題的流程來組織程式碼結構,把功能封裝成函式,然後依次呼叫就可以了。所以,面向過程的程式設計方式往往具有更為清晰的程式碼流程。面向過程的程式設計在早期業務邏輯比較單一的時期是非常適合的,而且面向過程的程式語言往往有更高的執行效率,典型的代表就是C語言。當前,C語言在嵌入式開發、作業系統開發領域依然具有廣泛的應用。
隨著軟體開發的複雜化,軟體程式設計需要解決的邏輯問題越發複雜,此時面向物件程式語言就出現了,面嚮物件語言的主要特點是“抽象”,形成了類、物件、封裝、繼承、多型等一系列面向物件的概念,這些概念的使用使得開發大型的業務邏輯系統更加方便和可行了。Java是典型的面向物件程式語言,目前也是IT行業內應用最為廣泛的程式語言之一,在Web開發、大資料開發、後端開發和Android開發領域都有大量的應用。
簡單的說,面向過程以解決問題的單一思路為出發點,而面對物件則以多角度解決問題為出發點,所以面向物件的程式設計要更加複雜一些。從學習的角度出發,學習面向過程的程式語言要稍微容易一些,畢竟函數語言程式設計更容易理解。在學習面向物件程式語言的時候,在學習的初期會具有一定的困難,困難在於要理解一系列抽象概念,所以不少人都說,學習面向物件程式設計就是學習“抽象”。
-
10 # 我有三棵樹
面向過程的代表是c語言
面向物件的代表是python
舉個例子,你現在要做飯。使用c語言,你需要構造菜刀,電飯鍋,碗筷等。這些過程是需要自己設計的。
使用python,請問你是用電飯鍋還是點外賣呢?
-
11 # 深入淺出VBA
面向物件是按照物理世界的思維來處理問題,比如在遊戲中可以把一輛汽車定義為一個物件,透過屬性定義它的外觀和狀態,透過方法執行它的功能。面向物件的主要思想是封裝和繼承,具有整體性和統一性。面向過程是程式內部定義的一些執行過程,組織比較鬆散,不擅長被重複利用。
回覆列表
論砍一個樹,
C語言,拿起斧子,砍 ,砍倒了嗎,沒有,哎呦 我擦,再砍
Java語言,構造人,構造斧子,構造樹。。。
C++,建構函式,解構函式
Python,人生苦短,讓我歇歇
PHP,坐在沙灘上,慢悠悠的喝著飲料,只是因為PHP是世界上最好的語言。。。
幾分鐘後。。。
C語言,哎呦,我去
Java語言,還在get and set,樹皮,樹根,樹你大爺
C++語言,哎呦,野指標
Python,我擦庫呢
PHP,背後已有百米海水居高捲起,但PHP老兄還是做著沙灘迎著太陽,喝著酒醉醺醺的說著P - H - P - 是 -- 世 - 界上 - 最好 - 的 - 語 - 言。額,嗝
又幾分鐘過後,專案經理來了,說,我們不要砍樹了,我們要。。。。
C語言:printf("弄死專案經理.。。。\n");
Java語言:System.out.println("弄死專案經理.。。。");
C++語言:cout << “弄死專案經理.。。。” << endl;
Python:print("弄死專案經理.。。")
PHP:echo "弄死專案經理.。。"
然後世界終於清淨了,程式設計師們終於可以來一場說走就走的旅行,Hello World ;-)