一、面向對象與面向過程的區(qū)別
面向過程就是分析出解決問題所需要的步驟憔涉,然后用函數把這些步驟一步一步實現遥椿,使用的時候一個一個依次調用就可以了楣责;面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟坯台,而是為了描敘某個事物在整個解決問題的步驟中的行為炬丸。
可以拿生活中的實例來理解面向過程與面向對象,例如五子棋蜒蕾,面向過程的設計思路就是首先分析問題的步驟:1稠炬、開始游戲,2咪啡、黑子先走酸纲,3、繪制畫面瑟匆,4闽坡、判斷輸贏栽惶,5、輪到白子疾嗅,6外厂、繪制畫面,7代承、判斷輸贏汁蝶,8、返回步驟2论悴,9掖棉、輸出最后結果。把上面每個步驟用不同的方法來實現膀估。
如果是面向對象的設計思想來解決問題幔亥。面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為1察纯、黑白雙方帕棉,這兩方的行為是一模一樣的,2饼记、棋盤系統(tǒng)香伴,負責繪制畫面,3具则、規(guī)則系統(tǒng)即纲,負責判定諸如犯規(guī)、輸贏等博肋。第一類對象(玩家對象)負責接受用戶輸入崇裁,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化束昵,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定拔稳。
可以明顯地看出,面向對象是以功能來劃分問題锹雏,而不是步驟巴比。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了多個步驟中礁遵,很可能出現不同的繪制版本轻绞,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中佣耐,繪圖只可能在棋盤對象中出現政勃,從而保證了繪圖的統(tǒng)一。
上述的內容是從網上查到的兼砖,覺得這個例子非常的生動形象奸远,我就寫了下來既棺,現在就應該理解了他倆的區(qū)別了吧,其實就是兩句話懒叛,面向對象就是高度實物抽象化丸冕、面向過程就是自頂向下的編程!
二薛窥、面向對象的特點
在了解其特點之前胖烛,咱們先談談對象,對象就是現實世界存在的任何事務都可以稱之為對象诅迷,有著自己獨特的個性
屬性用來描述具體某個對象的特征佩番。比如小志身高180M,體重70KG罢杉,這里身高趟畏、體重都是屬性。
面向對象的思想就是把一切都看成對象屑那,而對象一般都由屬性+方法組成!
屬性屬于對象靜態(tài)的一面艘款,用來形容對象的一些特性持际,方法屬于對象動態(tài)的一面,咱們舉一個例子哗咆,小明會跑蜘欲,會說話,跑晌柬、說話這些行為就是對象的方法姥份!所以為動態(tài)的一面, 我們把屬性和方法稱為這個對象的成員年碘!
類:具有同種屬性的對象稱為類澈歉,是個抽象的概念。比如“人”就是一類屿衅,期中有一些人名埃难,比如小明、小紅涤久、小玲等等這些都是對象涡尘,類就相當于一個模具,他定義了它所包含的全體對象的公共特征和功能响迂,對象就是類的一個實例化考抄,小明就是人的一個實例化!我們在做程序的時候蔗彤,經常要將一個變量實例化川梅,就是這個原理疯兼!我們一般在做程序的時候一般都不用類名的,比如我們在叫小明的時候挑势,不會喊“人镇防,你干嘛呢!”而是說的是“小明潮饱,你在干嘛呢来氧!”
面向對象有三大特性,分別是封裝性香拉、繼承性和多態(tài)性啦扬,這里小編不給予太多的解釋,因為在后邊的博客會專門總結的凫碌!
三扑毡、面向過程與面向對象的優(yōu)缺點
很多資料上全都是一群很難理解的理論知識,整的小編頭都大了盛险,后來發(fā)現了一個比較好的文章瞄摊,寫的真是太棒了,通俗易懂苦掘,想要不明白都難!
用面向過程的方法寫出來的程序是一份蛋炒飯换帜,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯鹤啡,北京叫蓋飯惯驼,東北叫燴飯,廣東叫碟頭飯递瑰,就是在一碗白米飯上面澆上一份蓋菜祟牲,你喜歡什么菜,你就澆上什么菜抖部。我覺得這個比喻還是比較貼切的说贝。
蛋炒飯制作的細節(jié),我不太清楚慎颗,因為我沒當過廚師狂丝,也不會做飯,但最后的一道工序肯定是把米飯和雞蛋混在一起炒勻哗总。蓋澆飯呢几颜,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢讯屈,就給你澆一份紅燒肉蛋哭;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲涮母。
蛋炒飯的好處就是入味均勻谆趾,吃起來香躁愿。如果恰巧你不愛吃雞蛋,只愛吃青菜的話沪蓬,那么唯一的辦法就是全部倒掉彤钟,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩跷叉,你只需要把上面的蓋菜撥掉逸雹,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均云挟,可能沒有蛋炒飯那么香梆砸。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答园欣,非要比個上下高低的話帖世,就必須設定一個場景,否則只能說是各有所長沸枯。如果大家都不是美食家日矫,沒那么多講究,那么從飯館角度來講的話绑榴,做蓋澆飯顯然比蛋炒飯更有優(yōu)勢哪轿,他可以組合出來任意多的組合,而且不會浪費彭沼。
蓋澆飯的好處就是”菜”“飯”分離缔逛,從而提高了制作蓋澆飯的靈活性备埃。飯不滿意就換飯姓惑,菜不滿意換菜。用軟件工程的專業(yè)術語就是”可維護性“比較好按脚,”飯” 和”菜”的耦合度比較低于毙。蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難辅搬,耦合度很高唯沮,以至于”可維護性”比較差。軟件工程追求的目標之一就是可維護性堪遂,可維護性主要表現在3個方面:可理解性介蛉、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統(tǒng)的可維護性溶褪。
面向過程
優(yōu)點:性能比面向對象高币旧,因為類調用時需要實例化,開銷比較大猿妈,比較消耗資源;比如單片機吹菱、嵌入式開發(fā)巍虫、 Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素鳍刷。
缺點:沒有面向對象易維護占遥、易復用、易擴展
面向對象
優(yōu)點:易維護输瓜、易復用瓦胎、易擴展,由于面向對象有封裝前痘、繼承凛捏、多態(tài)性的特性,可以設計出低耦合的系統(tǒng)芹缔,使系統(tǒng) 更加靈活坯癣、更加易于維護
缺點:性能比面向過程低