全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

怎樣理解Python中的面向?qū)ο螅?/h1>

更新時(shí)間:2021-01-28 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

面向?qū)ο螅∣bject Oriented)是程序開(kāi)發(fā)領(lǐng)域中的重要思想,這種思想模擬了人類(lèi)認(rèn)識(shí)客觀世界的邏輯,是當(dāng)前計(jì)算機(jī)軟件工程學(xué)的主流方法;類(lèi)是面向?qū)ο蟮膶?shí)現(xiàn)手段。Python在設(shè)計(jì)之初就已經(jīng)是一門(mén)面向?qū)ο笳Z(yǔ)言,了解面向?qū)ο缶幊趟枷雽?duì)于學(xué)習(xí)Python開(kāi)發(fā)至關(guān)重要。

提到面向?qū)ο螅匀粫?huì)想到面向過(guò)程。面向過(guò)程編程的基本思想是:分析解決問(wèn)題的步驟,使用函數(shù)實(shí)現(xiàn)步驟相應(yīng)的功能,按照步驟的先后順序依次調(diào)用函數(shù)。前面章節(jié)中所展示的程序都以面向過(guò)程的方式實(shí)現(xiàn),面向過(guò)程只考慮如何解決當(dāng)前問(wèn)題,它著眼于問(wèn)題本身。

面向?qū)ο缶幊痰闹壑幵谟诮巧约敖巧g的聯(lián)系。使用面向?qū)ο缶幊趟枷虢鉀Q問(wèn)題時(shí),開(kāi)發(fā)人員首先會(huì)從問(wèn)題之中提煉出問(wèn)題涉及的角色,將不同角色各自的特征和關(guān)系進(jìn)行封裝,以角色為主體,通過(guò)描述角色的行為去描述解決問(wèn)題的過(guò)程。

下面以五子棋游戲?yàn)槔f(shuō)明面向過(guò)程和面向?qū)ο缶幊痰膮^(qū)別。

1.基于面向過(guò)程編程的問(wèn)題分析

基于面向過(guò)程思想分析五子棋游戲,游戲開(kāi)始后黑子一方先落棋,棋子落在棋盤(pán)后棋盤(pán)產(chǎn)生變化,棋盤(pán)更新并判斷輸贏:若本輪落棋的一方勝利則輸出結(jié)果并結(jié)束游戲,否則白子一方落棋、棋盤(pán)更新、判斷輸贏,如此往復(fù),直至分出勝負(fù)。結(jié)合以上分析,五子棋游戲的流程如圖1所示。

正則表達(dá)式

圖1 五子棋游戲流程

2.基于面向?qū)ο缶幊痰膯?wèn)題模擬

基于面向?qū)ο缶幊趟枷肟紤]問(wèn)題時(shí)需首先分析問(wèn)題中存在的角色。五子棋游戲中的角色分為兩個(gè):玩家和棋盤(pán)。不同的角色負(fù)責(zé)不同的功能,例如:

(1) 玩家角色負(fù)責(zé)控制棋子落下的位置;

(2) 棋盤(pán)角色負(fù)責(zé)保存棋盤(pán)狀況、繪制畫(huà)面、判斷輸贏。

角色之間互相獨(dú)立,但相互協(xié)作,游戲的流程不再由單一的功能函數(shù)實(shí)現(xiàn),而是通過(guò)調(diào)用與角色相關(guān)的方法來(lái)完成。

面向?qū)ο蟊WC了功能的統(tǒng)一性,基于面向?qū)ο髮?shí)現(xiàn)的代碼更容易維護(hù),比如,現(xiàn)在要加入悔棋的功能,如果使用面向過(guò)程開(kāi)發(fā),改動(dòng)會(huì)涉及到游戲的整個(gè)流程,輸入、判斷、顯示這一系列步驟都需要修改,這顯然非常麻煩;但若使用面向?qū)ο箝_(kāi)發(fā),由于棋盤(pán)狀況由棋盤(pán)角色保存,只需要為棋盤(pán)角色添加回溯功能即可。相較而言,在面向?qū)ο蟪绦蛑泄δ軘U(kuò)充時(shí)改動(dòng)波及的范圍更小。



猜你喜歡:

JavaScript中Math對(duì)象常用屬性和方法詳細(xì)介紹

Python常見(jiàn)語(yǔ)法問(wèn)題和異常概述

如何理解python的面向?qū)ο笈c面向過(guò)程?

黑馬程序員Python數(shù)據(jù)分析培訓(xùn)

分享到:

在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!