什么是OOP(面向对象编程)?
我們來思考一個簡單的問題:如何使用Python程序表示一只小狗呢?沒錯,表示一只小狗,或者說用Python程序對小狗進行建模,如果你回答不上來,那么請跟著我來看一下如何解決這個問題。下面是一只小狗的照片:
首先,我們嘗試用文字描述這只狗狗。這只小狗的品種是金毛,顏色是淡黃色,年齡估計只有一個月,身高大約20厘米。然后這只小金毛看起挺健康的,會跑,還會叫,高興的時候應該還會搖尾巴,玩累了會呼呼大睡,餓了會吃狗糧。當然關于這只小金毛,我們還有其他的一些方面我們沒有概括到,我們這里只描述了這只小金毛的一些主要特征,沒有非常詳細地描述所有特征,例如血壓,白細胞數量等等。這種提取主要要信息,排除和任務不相關的次要信息的方法,我們稱為抽象。
現在,我們來把上面對小金毛的文字描述列一個表,暫且分為信息名稱和信息對于的具體內容:
| 品種 | 金毛 |
| 顏色 | 淡黃色 |
| 年齡 | 一個月 |
| 身高 | 20厘米 |
| 能力1 | 跑 |
| 能力2 | 叫 |
| 能力3 | 搖尾巴 |
| 能力4 | 呼呼大睡 |
| 能力5 | 吃狗糧 |
通過上表,我們發現,可以把小狗的信息分為兩個部分,一部分為小狗的固有特征:[品種,顏色,年齡,身高],另一部分為小狗能干啥:[能力1,能力2,能力3,能力4,能力5]。因此,我們可以把小狗看作是世間萬物中的一個類(class),把小狗的一些固有特征看作這個類的屬性(property),把小狗的能干什么看作這個類的方法(method)。這就是OOP的思維,我們可以使用OOP對任何事物進行建模,大家可以嘗試對身邊的物體進行建模,例如日光燈具有亮度、額定功率等屬性,具有發光、開、關等方法。
上面的信息表格看起來不太舒服,我們可以換一種方式來表示小狗的這些信息:
上面這種圖,我們稱為類圖,類圖主要用于對類進行描述,屬于UML圖中的一部分。類圖由三個部分組成:類名、屬性、方法。UML是統一建模語言的縮寫,這里就不展開了,大家可以上百度或谷歌搜索相關的知識。大家學習OOP的過程中,應該主動去了解和學習UML,不一定要全部掌握,但是看得懂UML圖,會繪制基本的UML圖是有益無害的。
現在簡單小結一下:
- 抽象:提取關鍵信息,去除不必要信息,建立一個模型
- 屬性:一類事物的特征
- 方法:一類事物的行為
那么回到最開始的問題,如何用Python表示小狗呢?答案就是,我們用變量來表示小狗的一些屬性,用函數來刻畫小狗的一些方法,最后用待會兒要介紹的類來將這些變量和函數“包”起來,這樣我們就能對小狗進行清晰準確的描述了。
但是,這樣對小狗進行抽象之后我們得到的是小狗的屬性和方法,并不是真正的一只有血有肉的小狗。要得到真正的小狗,我們還要把小狗這個類進行實例化。什么是實例化呢?我們可以把“小狗類”當作一個說明書(例如上面的UML類圖),然后根據這張說明書創建各種各樣的小狗,它們有不同的品種、顏色、年齡和身高等,但是它們有共同的行為:奔跑、叫、搖尾巴、睡覺和吃狗糧。根據說明書創建出來的具體的小狗,我們稱為對象。
所以你可以認為類就是一類事物的說明書,對象就是根據說明書創建出來的具體的個體。現在很多編程語言都支持面向對象編程,例如C++, Java, Python等等。
總結
以上是生活随笔為你收集整理的什么是OOP(面向对象编程)?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA 220 Othello
- 下一篇: 人工智能最佳学习实践