1. 程式人生 > 實用技巧 >python學習-第十三週:面向物件程式設計OOP

python學習-第十三週:面向物件程式設計OOP

python學習-第十三週:面向物件程式設計OOP

面向物件程式設計

面向物件程式設計(Object Oriented Programming)簡稱OOP,是一種以物件為中心的程式設計思想。
與之對應的是,面向過程程式設計(Procedure Oriented ProgrammingPOP),即以過程為中心的程式設計思想。

理解面向過程與面向物件思想

對於同一個問題用這兩種不同的思想來解決,看看它們的區別

提出問題:做飯
面向過程:
1.買菜
2.洗菜
3.刷鍋刷碗
4.炒菜
5.端上餐桌
面向物件:
物件:廚師
告訴廚師去做飯
面向物件就是呼叫物件去解決問題,具體的物件如何去解決呢?
廚師這個物件肯定也是一步步去做飯。但是對於我來說,就是呼叫了物件。

面向過程和麵向物件的區別和優缺點?

一,面向過程

面向過程的核心是過程,過程就是指解決問題的步驟。

優缺點:

  • 優點: 將負責的問題流程化,進而實現簡單化
  • 缺點:擴充套件性差(更新,維護,迭代)
    總結:在去完成一些簡單的程式時,可以使用面向過程去解決。但是如果有複雜的程式或任務,而且需要不斷的進行迭代和維護,那麼肯定是優先選擇面向物件的程式設計思想

二,面向物件

面向物件的核心是物件,是一個特徵和功能的綜合體

優缺點:

  • 優點:可擴充套件性高
  • 缺點:程式設計複雜度相對面向過程高一些。

認識OOP中的概念

類:類是物件的一個抽象的概念
物件(例項):物件就是由類的建立的例項
類和物件的關係就是 模具與鑄件、整體和部分的關係

  1. 類是由物件總結而來的,總結的這個過程叫做抽象
  2. 物件是由類具體實施出來的,這個過程叫做例項化
    例如:水果是一個類,蘋果是一個物件
    汽車是一個類,寶馬是一個物件
類 由 屬性和方法 兩個內容組成:
    屬性:(類的特徵)就是一個描述:顏色、品種、大小 。。。
    方法:(類的功能)就是一個能力:拉貨、載人。。。
    屬性在程式設計中就是一個變數 ,方法在程式設計中就是一個函式 
類中屬性一般定義在前面,方法定義在後面

面向物件程式設計的基本實現

第一步:抽象一個類

# 定義一個汽車的類
class Cart():
    pass   
'''
類名的書寫規範,建議使用駝峰命名法
    大駝峰:MyCar XiaoMi
    小駝峰:myCar xiaoMi
'''

第二步:定義類的屬性和方法

# 定義一個汽車的類
class Cart():
    # 屬性 ==> 特徵 ==> 變數
    color = '白色'  # 表示顏色屬性
    brand = '寶馬'  # 表示品牌屬性
    pailiang = 2.4 # 表示排列屬性

    # 方法 ==> 功能 ==> 函式
    def yunhuo(self):
        print('小汽車能運貨')

    def doufeng(self):
        print('小汽車能兜風')

    def didi(self):
        print('小汽車開滴滴')

使用一個類

# 如何去使用這個類?
# 通過類例項化一個物件
baoma =  Cart()

# 呼叫方法
baoma.doufeng()

# 獲取物件的屬性
print(baoma.brand)

對屬性和方法的操作

物件操作

成員屬性:
  訪問:  物件.屬性名
  修改:  物件.屬性名 = 新值。(此時等於給這個物件建立了一個自己的屬性)
  新增:  物件.新屬性名 = 值 (此時是給這個物件自己新建了一個屬性)
  刪除:  del 物件.屬性名 (注意:只能刪除這個物件自己的屬性)
  
成員方法:
  訪問:  物件.方法名()
  修改:  物件.方法名 = func(此時等於給這個物件建立了一個自己的方法)
  新增:  物件.新方法名 = func (此時是給這個物件自己新建了一個方法)
  刪除:  del 物件.方法名 (注意:只能刪除這個物件自己的方法)

類操作(不推薦)

操作屬性:
  訪問:  類名.屬性名
  修改:  類名.屬性名 = 新值。(此時通過這個類建立的物件都具有這個屬性)
  新增:  類名.新屬性名 = 值 (此時通過這個類建立的物件都具有這個屬性)
  刪除:  del 類名.屬性名 (注意:刪除這個類的屬性後,這個類建立的物件也沒有這幾個屬性了)
  
操作方法:
  訪問:  類名.方法名()
  修改:  類名.方法名 = func(此時通過類建立的物件都被修改)
  新增:  類名.新方法名 = func (此時通過類建立的物件都被修改)
  刪除:  del 類名.方法名 (注意:此時通過類建立的物件都被修改)

總結

  • 一個類可以例項化出多個物件,每個物件在記憶體中都獨立存在的
  • 當通過類例項化物件時,並不會把類中的成員複製一份給物件,而去給物件了一個引用
  • 訪問物件成員的時候,如果物件自己沒有這個成員,物件會向例項化它的類去查詢
  • 物件成員的新增和修改,都只會影響當前物件自己,不會影響類和其它物件
  • 刪除物件的成員時,必須是該物件自己具備的成員才可以,不能刪除類中引用的成員
  • 對類的成員操作,會影響通過這個類建立的物件,包括之前建立的。

面向物件程式設計OOP部分歸納完畢,下週總結OOP的特性相關內容,下週見~