小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

面向過程 VS 面向?qū)ο?/span>

 編玩邊學(xué) 2017-08-10

學(xué)習(xí)編程, 基本功是掌握編程語言,但編程的本質(zhì)是邏輯,所以編程思維的培養(yǎng)也很重要。面向過程和面向?qū)ο笫莾煞N重要的編程思想,下面講述一下這兩者的區(qū)別和優(yōu)缺點(diǎn)比較。

1. 面向過程

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

 微信圖片_20170808182217

舉個(gè)例子,下五子棋,面向過程的設(shè)計(jì)思路是首先分析解決這個(gè)問題的步驟:

(1)開始游戲(2)黑子先走(3)繪制畫面(4)判斷輸贏(5)輪到白子(6)繪制畫面(7)判斷輸贏(8)返回步驟(2) (9)輸出最后結(jié)果。

用函數(shù)實(shí)現(xiàn)上面一個(gè)一個(gè)的步驟,然后在下五子棋的主函數(shù)里依次調(diào)用上面的函數(shù)(不同的編程語言有不同的調(diào)用方法,我這里寫的是直接調(diào)用):

下五子棋{

開始游戲();

黑子先走();

繪制畫面();

判斷輸贏();

輪到白子();

繪制畫面();

判斷輸贏();

返回到 黑子先走();

輸出最后結(jié)果;

}

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

2. 面向?qū)ο?/font>

在日常生活或編程中,簡單的問題可以用面向過程的思路來解決,直接有效,但是當(dāng)問題的規(guī)模變得更大時(shí),用面向過程的思想是遠(yuǎn)遠(yuǎn)不夠的。所以慢慢就出現(xiàn)了面向?qū)ο蟮木幊趟枷?。世界上有很多人和事物,每一個(gè)都可以看做一個(gè)對象,而每個(gè)對象都有自己的屬性行為,對象與對象之間通過方法來交互。面向?qū)ο笫且环N以“對象”為中心的編程思想,把要解決的問題分解成各個(gè)對象,建立對象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)對象在整個(gè)解決問題的步驟中的屬性和行為。

微信圖片_20170808182223

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

(1)黑白雙方,這兩方的行為是一樣的。

(2)棋盤系統(tǒng),負(fù)責(zé)繪制畫面

(3)規(guī)則系統(tǒng),負(fù)責(zé)判定犯規(guī)、輸贏等。

然后賦予每個(gè)對象一些屬性和行為:  

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

可以看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是以步驟解決。比如繪制畫面這個(gè)行為,在面向過程中是分散在了多個(gè)步驟中的,可能會(huì)出現(xiàn)不同的繪制版本,所以要考慮到實(shí)際情況進(jìn)行各種各樣的簡化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤系統(tǒng)這個(gè)對象中出現(xiàn),從而保證了繪圖的統(tǒng)一。

 

3. 優(yōu)缺點(diǎn)比較

面向過程

優(yōu)點(diǎn):

流程化使得編程任務(wù)明確,在開發(fā)之前基本考慮了實(shí)現(xiàn)方式和最終結(jié)果,具體步驟清楚,便于節(jié)點(diǎn)分析。

效率高,面向過程強(qiáng)調(diào)代碼的短小精悍,善于結(jié)合數(shù)據(jù)結(jié)構(gòu)來開發(fā)高效率的程序。

缺點(diǎn):

需要深入的思考,耗費(fèi)精力,代碼重用性低,擴(kuò)展能力差,后期維護(hù)難度比較大。


面向?qū)ο?/font>

優(yōu)點(diǎn):

結(jié)構(gòu)清晰,程序是模塊化和結(jié)構(gòu)化,更加符合人類的思維方式;

易擴(kuò)展,代碼重用率高,可繼承,可覆蓋,可以設(shè)計(jì)出低耦合的系統(tǒng);

易維護(hù),系統(tǒng)低耦合的特點(diǎn)有利于減少程序的后期維護(hù)工作量。

缺點(diǎn):

開銷大,當(dāng)要修改對象內(nèi)部時(shí),對象的屬性不允許外部直接存取,所以要增加許多沒有其他意義、只負(fù)責(zé)讀或?qū)懙男袨椤_@會(huì)為編程工作增加負(fù)擔(dān),增加運(yùn)行開銷,并且使程序顯得臃腫。

性能低,由于面向更高的邏輯抽象層,使得面向?qū)ο笤趯?shí)現(xiàn)的時(shí)候,不得不做出性能上面的犧牲,計(jì)算時(shí)間和空間存儲(chǔ)大小都開銷很大。

201104161909195342 

舉例說明兩者的優(yōu)缺點(diǎn),比如在五子棋游戲中增加悔棋的功能。在面向過程中,從輸入到顯示再到最后判斷的整個(gè)步驟都要改動(dòng),甚至函數(shù)的調(diào)用順序也要改動(dòng),而在面向?qū)ο蟮脑O(shè)計(jì)中,只需在棋盤系統(tǒng)中增加一個(gè)回溯的功能就可以了,黑白雙方和規(guī)則系統(tǒng)的屬性和行為都不需改動(dòng)。這個(gè)例子說明了面向?qū)ο蟪绦蛟O(shè)計(jì)中代碼間的相關(guān)性低(耦合特性),使得代碼很容易被復(fù)用和擴(kuò)展,同時(shí)也說明了面向過程的代碼重用性低、擴(kuò)展能力差。

歡迎來“編玩邊學(xué)”一起編程,www.codepku.com

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多