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