1.面向過程介紹
1.1 面向過程(Procedure Oriented)思維
面向過程編程主要關注的內容是“程序的邏輯流程”,是一種“執行者”思維,主要適合編寫小規模的程序。
采用面向過程思想思考問題時,我們首先思考“怎么按照步驟實現?”,首先將問題解決拆解成若干步驟,并將這些步驟對應成方法,一步一步,最終完成。這個適合簡單的任務,不需要過多協作的情況。
1.2 面向過程示例
拿一個我們生活中很常見的例子,比如:如何開小汽車?我們在腦海中會很快想到如下步驟:
- 發動車
- 掛擋
- 踩油門
- 走你
這樣我們就實現了一次面向過程的思維。
1.3 面向過程的不足
當我們思考比較復雜的問題,比如“如何造車?”,就會發現列出1、2、3、4這樣的步驟,無從下手,步驟是在太多了,有的有先后關系,有的沒有依賴關系,有一種:老虎吃刺猬-無處下嘴的感覺。
問題點: 面向過程的思考方式,遇到復雜問題,很難處理。
2.面向對象是什么?
2.1 面向對象(Object oriented Programming, OOP)思維
面向對象更加關注的是“軟件中對象之間的關系”,是一種“設計者”思維,這種編程思想主要是針對大型軟件設計而來的。面向對象編程使程序的擴展性更強,可讀性更好,能夠讓程序像搭積木一樣簡單。
面向對象編程將數據和操作數據的方法封裝到對象中,組織代碼和數據的方式更加接近人的思維,從而大大提高編程的效率。
面向對象(Object)思想更加契合人的思維模式。我們首先思考的是“怎么設計這個事物?”比如思考造車,我們就會先思考“車怎么設計?”,而不是“怎么按照步驟造車的問題”。這就是思維方式的轉變。
2.2 面向對象示例
拿我們剛才提到造車的問題,當我們采用面向對象方式思考造車的時候, 我們會先思考發現小汽車是由那些大的部分所組成,列舉如下:
- 輪胎
- 發動機
- 車殼
- 座椅
- 擋風玻璃
為了完成整個任務,我們采用協作的方式,部分之間單獨進行處理。我們找輪胎廠完成制造輪胎的過程,發動機廠完整制造發動機的步驟;這樣,發現大家可以同時進行車的制造,最終進行組裝,大大提高了效率。但是,具體到輪胎廠的一個流水線操作,仍然是有步驟的,但是需要面向過程的思路去處理。
我們千萬不要把面向過程和面向對象對立起來。他們是相輔相成的。面向對象對象離不開面向過程。
2.3 面向對象的思考方式
遇到復雜問題,先從問題中找名詞(面向過程更多的是找動詞),然后確定這些名詞那些可以作為類,再根據問題需求確定類的屬性和方法,確定類之間的關系。
3.面向過程和面向對象的聯系和區別
- 都是解決問題的思維方式,都是代碼組織的方式
- 解決簡單問題可以使用面向過程
- 解決復雜問題,宏觀上使用面向對象把握,微觀處理上仍然是面向過程。
- 面向對象可以認為是面向過程的升級
4.從最小單元的角度來看面向過程和對象
面向過程
最小組成單元函數,簡單認為是執行具體功能的代碼塊
面向對象
最小組成單元是對象,對象中包含屬性和方法(對應面向過程的函數)
總結:
從這里就可以看出:面向對象比面向過程的最小單元,包含更多的內容(屬性,也就是數據),所以能做的事情也更多,也就可以認為是面向過程的升級。
5.python中的編程范式
python完全采用面向對象的思想,是真正面向對象的編程語言。完全支持面向對象的基本功能,例如:繼承、多態、封裝等。
python中,一切皆對象。包括常見的數據類型、函數都是對象。而且python支持面向過程、面向對象、函數式編程等多種編程范式
注意:很多說java是面向對象的編程語言,但是請注意,java不是純面向對象的一門語言,為什么這么說?因為java中存在8大基礎數據類型,這些類型都不是對象,就是普通的數值、字符、字符串,所以不完全是面向對象的類和對象。這點請注意。
備注:
更多精彩博客,請訪問:聶發俊的技術博客
對應視頻教程,請訪問:python400
完整markdown筆記,請訪問: python400_learn_github