什么是面向?qū)ο?/h2>

面向過程

面向過程是一種以事件為中心的編程思想,編程的時候把解決問題的步驟分析出來,然后用函數(shù)把這些步驟實(shí)現(xiàn),在一步一步的具體步驟中再按順序調(diào)用函數(shù)。


面向過程

舉個例子,一個下五子棋的程序:

下五子棋{

開始游戲();
while{

黑子先走();

繪制畫面();

判斷輸贏();

輪到白子();

繪制畫面();

if 判斷輸贏(){
  break
}
};


輸出最后結(jié)果;

}

可見,面向過程始終關(guān)注的是怎么一步一步地判斷棋局輸贏的,通過控制代碼,從而實(shí)現(xiàn)函數(shù)的順序執(zhí)行。

面向?qū)ο?/h2>

在工作中,簡單的問題用面向過程的思路來解決直接有效。但是當(dāng)問題規(guī)模變大時,用面向過程的思想是遠(yuǎn)遠(yuǎn)不夠的。所以就出現(xiàn)了面向?qū)ο蟮木幊趟枷搿?/p>

世界上有很多人和事物,每一個都可以看做一個對象,而每個對象都有自己的屬性和行為,對象與對象之間通過方法來交互。面向?qū)ο笫且环N以“對象”為中心的編程思想,把要解決的問題分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個對象在整個解決問題的步驟中的屬性和行為。

類是一個抽象的概念,而對象是一個具體的事物。對象是基于類這個抽象的模板而建立的實(shí)例。

在下五子棋的例子中,用面向?qū)ο蟮姆椒▉斫鉀Q的話,首先將整個五子棋游戲分為三個類:

  • 棋子類,定義棋子,顏色,位置坐標(biāo),監(jiān)聽下棋動作。

  • 棋盤類,定義棋盤樣式,棋譜,位置狀態(tài)(是否有棋子),增加棋子動作,

  • 規(guī)則類,定義規(guī)則、判斷是否犯規(guī)、輸贏等。

然后基于上述類創(chuàng)建對象,并賦予每個對象一些屬性和行為:

第一類的對象為黑棋和白棋,負(fù)責(zé)接受用戶輸入,并告知第二類對象(棋盤系統(tǒng))棋子布局的變化,棋盤系統(tǒng)對象接收到了棋子的變化,并負(fù)責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進(jìn)行判定。

可以看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是以步驟解決。比如繪制畫面這個行為,在面向過程中是分散在了多個步驟中的,可能會出現(xiàn)不同的繪制版本。
比如要加入悔棋的功能,如果要改動面向過程的設(shè)計,那么從輸入到判斷到顯示這一連串的步驟和順序都要改動。如果是面向?qū)ο蟮脑?,只用改動棋盤對象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜,回溯就可以了,而顯示和規(guī)則判斷則不用 顧及,同時整個對對象功能的調(diào)用順序都沒有變化,改動只是局部的。

類,與類的特性

類是同一類事物的統(tǒng)稱。如個人證件作為一類都有id,姓名,年齡,照片的屬性,都具有驗(yàn)證本人身份的功能

1. 封裝

將對象的屬性和行為封裝起來,只通過對象訪問屬性或者方法。還可以設(shè)置訪問權(quán)限。

2. 繼承

假如想建立駕照類時,我們想到可以將個人證件類拿來復(fù)用,保留個人證件具有的屬性和方法,但是不具有駕駛信息的屬性和合法開車的功能。

3. 多態(tài)

一個類可以繼承多種接口,一個父類也可以被多種子類所繼承。父類的方法也可以被子類重寫。這些都是多態(tài)的特征,即一個父類有多種子類的形態(tài),一個方法也有多種實(shí)現(xiàn)方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容