面向過(guò)程
面向過(guò)程是一種以事件為中心的編程思想,編程的時(shí)候把解決問(wèn)題的步驟分析出來(lái),然后用函數(shù)把這些步驟實(shí)現(xiàn)换团,在一步一步的具體步驟中再按順序調(diào)用函數(shù)凡怎。
舉個(gè)例子校焦,一個(gè)下五子棋的程序:
下五子棋{
開始游戲()赊抖;
while{
黑子先走()统倒;
繪制畫面();
判斷輸贏()氛雪;
輪到白子()房匆;
繪制畫面();
if 判斷輸贏(){
break
}
}报亩;
輸出最后結(jié)果浴鸿;
}
可見,面向過(guò)程始終關(guān)注的是怎么一步一步地判斷棋局輸贏的弦追,通過(guò)控制代碼岳链,從而實(shí)現(xiàn)函數(shù)的順序執(zhí)行。
面向?qū)ο?/h2>
在工作中劲件,簡(jiǎn)單的問(wèn)題用面向過(guò)程的思路來(lái)解決直接有效掸哑。但是當(dāng)問(wèn)題規(guī)模變大時(shí),用面向過(guò)程的思想是遠(yuǎn)遠(yuǎn)不夠的零远。所以就出現(xiàn)了面向?qū)ο蟮木幊趟枷搿?/p>
世界上有很多人和事物苗分,每一個(gè)都可以看做一個(gè)對(duì)象,而每個(gè)對(duì)象都有自己的屬性和行為牵辣,對(duì)象與對(duì)象之間通過(guò)方法來(lái)交互摔癣。面向?qū)ο笫且环N以“對(duì)象”為中心的編程思想,把要解決的問(wèn)題分解成各個(gè)對(duì)象纬向,建立對(duì)象的目的不是為了完成一個(gè)步驟择浊,而是為了描敘某個(gè)對(duì)象在整個(gè)解決問(wèn)題的步驟中的屬性和行為。
類是一個(gè)抽象的概念逾条,而對(duì)象是一個(gè)具體的事物近她。對(duì)象是基于類這個(gè)抽象的模板而建立的實(shí)例。
在下五子棋的例子中膳帕,用面向?qū)ο蟮姆椒▉?lái)解決的話粘捎,首先將整個(gè)五子棋游戲分為三個(gè)類:
棋子類,定義棋子危彩,顏色攒磨,位置坐標(biāo),監(jiān)聽下棋動(dòng)作汤徽。
棋盤類娩缰,定義棋盤樣式,棋譜谒府,位置狀態(tài)(是否有棋子)拼坎,增加棋子動(dòng)作浮毯,
規(guī)則類,定義規(guī)則泰鸡、判斷是否犯規(guī)债蓝、輸贏等。
然后基于上述類創(chuàng)建對(duì)象盛龄,并賦予每個(gè)對(duì)象一些屬性和行為:
第一類的對(duì)象為黑棋和白棋饰迹,負(fù)責(zé)接受用戶輸入,并告知第二類對(duì)象(棋盤系統(tǒng))棋子布局的變化余舶,棋盤系統(tǒng)對(duì)象接收到了棋子的變化啊鸭,并負(fù)責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第三類對(duì)象(規(guī)則系統(tǒng))來(lái)對(duì)棋局進(jìn)行判定匿值。
可以看出赠制,面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題,而不是以步驟解決挟憔。比如繪制畫面這個(gè)行為钟些,在面向過(guò)程中是分散在了多個(gè)步驟中的,可能會(huì)出現(xiàn)不同的繪制版本曲楚。
比如要加入悔棋的功能厘唾,如果要改動(dòng)面向過(guò)程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟和順序都要改動(dòng)龙誊。如果是面向?qū)ο蟮脑捀Ю挥酶膭?dòng)棋盤對(duì)象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜趟大,回溯就可以了鹤树,而顯示和規(guī)則判斷則不用 顧及,同時(shí)整個(gè)對(duì)對(duì)象功能的調(diào)用順序都沒有變化逊朽,改動(dòng)只是局部的罕伯。
類,與類的特性
類是同一類事物的統(tǒng)稱叽讳。如個(gè)人證件作為一類都有id追他,姓名,年齡岛蚤,照片的屬性邑狸,都具有驗(yàn)證本人身份的功能
1. 封裝
將對(duì)象的屬性和行為封裝起來(lái),只通過(guò)對(duì)象訪問(wèn)屬性或者方法涤妒。還可以設(shè)置訪問(wèn)權(quán)限单雾。
2. 繼承
假如想建立駕照類時(shí),我們想到可以將個(gè)人證件類拿來(lái)復(fù)用,保留個(gè)人證件具有的屬性和方法硅堆,但是不具有駕駛信息的屬性和合法開車的功能屿储。
3. 多態(tài)
一個(gè)類可以繼承多種接口,一個(gè)父類也可以被多種子類所繼承渐逃。父類的方法也可以被子類重寫够掠。這些都是多態(tài)的特征,即一個(gè)父類有多種子類的形態(tài)朴乖,一個(gè)方法也有多種實(shí)現(xiàn)方法祖屏。