『無為則無心』Python面向對象 — 45、面向對象編程

1、面向對象編程的概念

  • Python從設計之初就已經是一門面向對象的語言,正因為如此,我們肯定聽過Python中一切皆對象的說法。
  • 面向對象編程(Object-oriented Programming,簡稱 OOP),是一種程式設計思想。
  • 面向對象編程把對象作為程式的基本單元,一個對象包含了數據(屬性)和操作數據的函數。
  • 在面向對象的設計思想中,將程式視為多個對象共同協作的結果。程式被劃分為多個子模組,再由多個對象完成各自模組最終實現程式的功能。
  • 面向對象編程,是一種封裝程式碼的思想。
  • 面向對象編程是在面向過程編程的基礎上發展來的,它比面向過程編程具有更強的靈活性和擴展性。

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

(1)面向過程編程

面向過程的程式設計把函數作為程式的基本單元。程式設計時,編寫一組一組的函數,然後一步一步按照順序的執行各個函數,即一組函數的順序執行。為了簡化程式設計,面向過程把函數繼續切分為子函數,即把大塊函數通過切割成小塊函數來降低系統的複雜度。

面向過程編程,核心是”過程”,關注的是解決問題的步驟,即先做什麼再做什麼。面向過程的編程就像一個流水線,是一種機械式的思維。若程式一開始是要著手解決一個大問題,面向過程的編程思維會把一個大問題分解為很多個小問題,這些小問題還可以繼續分解,直到小問題足夠簡單可以在一個小步驟中解決。

  1. 優點:
    • 極大的降低了寫程式的複雜度,只需要順著執行的步驟,堆疊程式碼即可。
    • 複雜問題流程化,進而簡單化。
  2. 缺點:
    • 一套流水線或者流程就是來解決一個問題,如果其中一個方法修改了,那其他組件也要跟著作相應的修改。
    • 也就是出現問題,牽一髮而動全身。

(2)面向對象編程

而面向對象的程式設計把對象作為程式的基本單元,程式設計時,設計許多的對象(類創建而成),每個對象都有能力解決一些相應的問題。而我們面向對象編程是基於面向過程編程的,類是將功能(小步驟)進行了封裝,只要找到了具體的類,創建出對象,就可以調用其中的具體功能。

面向對象是用來解決問題的一種思維模式,在以後開發中,先找對象,調用對象中的具體功能。如果真的沒有能夠完成需求的對象,這時就自己定義類,並將所需的功能定義到對象中,方便以後使用。

  1. 優點:
    • 面向對象是一種更符合人們思考習慣的思想。
    • 面向過程中更多的體現的是執行者,面向對象中更多的體現是指揮者,指揮對象做事情。
    • 面向對象將複雜的問題簡單化。
    • 由於面向對象有封裝、繼承、多態性的特性,使系統更加靈活、易維護、易復用、易擴展,可以設計出低耦合的系統。
  2. 缺點:
    • 性能比面向過程低。
    • 所謂有得必有失,但在如今硬體瘋狂發展,系統又越來越複雜的情況下,權衡利弊,我們選擇面向對象編程。

3、舉例理解面向對象

面向對象是一種抽象化的編程思想,很多程式語言中都有的一種思想。

1)需求

例如:洗衣服

思考:幾種途徑可以完成洗衣服?

答: 手洗 和 機洗。

2)面向過程洗衣服

手洗就相當於面向過程洗衣服:

  • 找盆
  • 放水
  • 加洗衣粉
  • 浸泡
  • 搓洗
  • 擰乾水
  • 倒水
  • 晾曬
  • 收起疊好

在經歷這麼多步驟後,你終於把衣服完了,但是自己已經精疲力盡。

3)面向對象洗衣服

機洗就相當於面向對象洗衣服。

這個洗衣機就是對象,衣服放進洗衣機中:

  • 開啟洗衣機(類創建創建對象)
  • 洗衣服(調用對象中的方法)
    • 洗衣機–加水
    • 洗衣機–加洗衣粉
    • 洗衣機–浸泡
    • 洗衣機–搓洗
    • 洗衣機–脫水
    • 洗衣機–排水
    • 洗衣機–烘乾
  • 關閉洗衣機(程式執行結束收起衣服)

你坐在窗邊看著夕陽,感嘆生活真是太美好了!

4)總結:

思考:對比兩種洗衣服途徑,哪種方式更簡單?

答:機洗更簡單。

機洗只需要找到一台洗衣機,加入簡單操作就可以完成洗衣服的工作,而不需要關心洗衣機內部發生了什麼事情。

面向對象就是將編程當成是一個事物,對外界來說,事物是直接使用的,不用去管他內部的情況。而編程就是設置事物能夠做什麼事。

4、Python的面向對象編程

面向對象編程是利用對象來創建各種模型,來實現對真實世界的描述。

使用面向對象編程的原因:

  • 一方面是因為它可以使程式的維護和擴展變得更簡單,並且可以大大提高程式開發效率 。
  • 另外,基於面向對象的程式可以使它人更加容易理解你的程式碼邏輯,從而使團隊開發變得更從容。

5、面向對象的幾大核心特性

  1. Class類:一個類指相同事物相同特徵提取,把相同的屬性方法提煉出來定義在類中。
  2. Object對象:一個對象是類的實例,對象是具體的,類是抽象。
  3. 封裝:對外部世界隱藏對象的工作細節。
  4. 繼承:一個子類繼承基類的欄位和方法。
  5. 多態:對不同類的對象使用同樣的操作。