1.前言


          其實(shí)一直對(duì)面向過程和面向?qū)ο蟮母拍詈蛥^(qū)別沒有很深入的理解,在自己不斷想完善自己的知識(shí)體系中,今天借這個(gè)時(shí)間,寫一篇博客。來深入的了解面向過程與面向?qū)ο?!好記性不如爛筆頭!!??

          2.面向?qū)ο笈c面向過程的區(qū)別


          面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了;面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。

          舉一個(gè)下五子棋通俗例子吧 哈哈哈 我感覺這兒例子很容易讓人理解

          面向過程的設(shè)計(jì)思路就是首先分析問題的步驟:

          1、開始游戲,

          2、黑子先走,

          3、繪制畫面,

          4、判斷輸贏,

          5、輪到白子,

          6、繪制畫面,

          7、判斷輸贏,

          8、返回步驟2,

          9、輸出最后結(jié)果。

          把上面每個(gè)步驟用分別的函數(shù)來實(shí)現(xiàn),問題就解決了。

          而面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思路來解決問題。整個(gè)五子棋可以分為

          1、黑白雙方,這兩方的行為是一模一樣的,

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

          3、規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第一類對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入,并告知第二類對(duì)象(棋盤對(duì)象)棋子布局的變化,

          棋盤對(duì)象接收到了棋子的i變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第三類對(duì)象(規(guī)則系統(tǒng))來對(duì)棋局進(jìn)行判定。

          可以明顯地看出,面向?qū)ο笫且怨δ軄韯澐謫栴}
          ,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設(shè)計(jì)中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本,因?yàn)橥ǔTO(shè)計(jì)人員會(huì)考慮到實(shí)際情況進(jìn)行各種各樣的簡(jiǎn)化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對(duì)象中出現(xiàn),從而保證了繪圖的統(tǒng)一。


          功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如要加入悔棋的功能,如果要改動(dòng)面向過程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟都要改動(dòng),甚至步驟之間的循序都要進(jìn)行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑?,只用改?dòng)棋盤對(duì)象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜,簡(jiǎn)單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對(duì)對(duì)象功能的調(diào)用順序都沒有變化,改動(dòng)只是局部的。


          再比如我要把這個(gè)五子棋游戲改為圍棋游戲,如果你是面向過程設(shè)計(jì),那么五子棋的規(guī)則就分布在了你的程序的每一個(gè)角落,要改動(dòng)還不如重寫。但是如果你當(dāng)初就是面向?qū)ο蟮脑O(shè)計(jì),那么你只用改動(dòng)規(guī)則對(duì)象就可以了,五子棋和圍棋的區(qū)別不就是規(guī)則嗎?(當(dāng)然棋盤大小好像也不一樣,但是你會(huì)覺得這是一個(gè)難題嗎?直接在棋盤對(duì)象中進(jìn)行一番小改動(dòng)就可以了。)而下棋的大致步驟從面向?qū)ο蟮慕嵌葋砜礇]有任何變化。


          當(dāng)然,要達(dá)到改動(dòng)只是局部的需要設(shè)計(jì)的人有足夠的經(jīng)驗(yàn),使用對(duì)象不能保證你的程序就是面向?qū)ο?,初學(xué)者或者很蹩腳的程序員很可能以面向?qū)ο笾摱忻嫦蜻^程之實(shí),這樣設(shè)計(jì)出來的所謂面向?qū)ο蟮某绦蚝茈y有良好的可移植性和可擴(kuò)展性

          三、面向過程與面向?qū)ο蟮膬?yōu)缺點(diǎn)
          很多資料上全都是一群很難理解的理論知識(shí),整的我頭都大了,后來發(fā)現(xiàn)了一個(gè)比較好的文章,寫的真是太棒了,通俗易懂,想要不明白都難!


          用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向?qū)ο髮懗鰜淼某绦蚴且环萆w澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什么菜,你就澆上什么菜。我覺得這個(gè)比喻還是比較貼切的。


          蛋炒飯制作是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。


          蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那么唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點(diǎn)是入味不均,可能沒有蛋炒飯那么香。


          到底是蛋炒飯好還是蓋澆飯好呢?其實(shí)這類問題都很難回答,非要比個(gè)上下高低的話,就必須設(shè)定一個(gè)場(chǎng)景,否則只能說是各有所長(zhǎng)。如果大家都不是美食家,沒那么多講究,那么從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優(yōu)勢(shì),他可以組合出來任意多的組合,而且不會(huì)浪費(fèi)。

          蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業(yè)術(shù)語就是”可維護(hù)性“比較好,”飯”
          和”菜”的耦合度比較低。蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至于”可維護(hù)性”比較差。軟件工程追求的目標(biāo)之一就是可維護(hù)性,可維護(hù)性主要表現(xiàn)在3個(gè)方面:可理解性、可測(cè)試性和可修改性。面向?qū)ο蟮暮锰幹痪褪秋@著的改善了軟件系統(tǒng)的可維護(hù)性。
          看了這篇文章,簡(jiǎn)單的總結(jié)一下!

          面向過程

          優(yōu)點(diǎn):性能比面向?qū)ο蟾?,因?yàn)轭愓{(diào)用時(shí)需要實(shí)例化,開銷比較大,比較消耗資源;比如嵌入式開發(fā)、 Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。
          缺點(diǎn):沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展
          面向?qū)ο?br>
          優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng) 更加靈活、更加易于維護(hù)

          缺點(diǎn):性能比面向過程低

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                www.yeyecaoav | 黃色三级三级三级三级 | 久久亚洲视频 | 菲律宾毛片 | 97热精品|