自學Python-12 面向對象編程(一、概念篇)

在這裏插入圖片描述

如何理解面向對象編程

以下是來自百度百科的介紹:

面向對象程序設計(Object Oriented Programming)作爲一種新方法,其本質是以建立模型體現出來的抽象思維過程和麪向對象的方法。模型是用來反映現實世界中事物特徵的。任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更普遍、更集中、更深刻地描述客體的特徵。通過建立模型而達到的抽象是人們對客體認識的深化。

我們嘗試着來理解下這段晦澀難懂文字。這段文字核心就是“其本質…”這句話,後面的內容都是在介紹模板這個東東。我們把這句話拿出來:
其本質是以建立模型、體現出來的、抽象思維過程、和、面向對象的方法。
還是很難懂,先多讀兩遍。這句話其實就是說:面向對象編程通過建立一個模板,體現出了兩樣東西:抽象思維過程和麪向對象的方法。
“建立模型…抽象思維…面向對象”,這是我對面向對象編程的一個概念上概括性的理解。


舉個例子來通俗的理解一下
案例1:小明晚上想喫排骨米飯,於是他來到超市,先去賣肉那買了排骨,又去賣米那買了大米,最後回家路過菜市場還買了點白菜,晚上回到家又燉了排骨蒸了米飯,最後美美的吃了一頓。

案例2:小明後來找了一個會做飯的女朋友,這一天他又想喫排骨米飯了,這時候他喊女朋友做給他喫,女朋友看了一下冰箱後告訴小明家裏的大米沒了,小明正在打遊戲,直接甩了一句"我不管,你自己看着弄,今晚我必須要喫",於是女朋友只好去買米然後回來做飯。後來小明想吃麪、想喫水餃都只需要吩咐給女朋友做,自己只管喫。

其中案例1是面向過程的,案例2就是面向對象的。我們下面用代碼分別實現下兩個案例,但在那之前,有幾個概念需要介紹一下:

1.類
用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
2.對象
通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
3.實例化
創建一個類的實例,類的具體對象。

類就是我們上面說的模型,簡單來說就是把具有相同特徵的事物歸爲一類,例如老虎獅子大象都是動物,香蕉蘋果梨都是水果,你我他都是人類。類就是一組具有相同屬性和行爲的對象的抽象。類不是一個實例,例如我說有個人偷東西,你知道我說的是誰嗎?我要說小明偷東西,你才知道,小明就是人類的實例,因此我們說對象是類的實例,而創建一個類實例的過程,就叫實例化

案例1實現:

# 以下方法命名很不規範,各位不要這樣寫
def paigu():
    print('買排骨')


def dami():
    print('買大米')


def dunpaigu():
    print('燉排骨')


def zhengmifan():
    print('蒸米飯')


def main():
    paigu()
    dami()
    dunpaigu()
    zhengmifan()


if __name__ == '__main__':
    main()

案例1我們定義了幾個函數,對應着每一個步驟,合起來就是整個做飯的過程。因此案例1中我們面向的是整個過程。

案例2實現:

# 定義類 class關鍵字 + 大駝峯類名
class GirlFriend:
    # 類的構造方法,類實例化時被調用
    def __init__(self):
        pass

    def paigu(self):
        print('買排骨')

    def dami(self):
        print('買大米')

    def dunpaigu(self):
        print('燉排骨')

    def zhengmifan(self):
        print('蒸米飯')

    def zuofan(self):
        self.paigu()
        self.dami()
        self.dunpaigu()
        self.zhengmifan()


def main():
    # 實例化一個女朋友
    girl = GirlFriend()
    # 讓女朋友直接做排骨米飯
    girl.zuofan()


if __name__ == '__main__':
    main()

案例2我們抽象了一個女朋友類,會做飯,然後實例化了一個女朋友對象,直接調用女朋友的做飯方法,就能得到我們想要的,期間的步驟全部交給女朋友去完成,我們只看結果。因此這裏我們面向的是女朋友這個對象,所以這是面向對象的。

看起來案例2使這件事情更加簡潔,但其內部依然是基於面向過程的實現。這並不矛盾,關鍵在於你站在哪個角度去理解這件事情,面向對象更像是一個解決問題的方案,看重的是最終結果,而過程式則是解決不同層次的不同問題。總之,慢慢體會。
回顧下文章開頭概括的“建立模型…抽象思維…面向對象”,看我們在案例2中是否都運用到了。

我們介紹完了對象以及實例化的概念,面向對象還有很重要的三大特性:封裝、繼承、多態,篇幅原因,本篇文章不寫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章