以前上面向對象這門課的時候,我是沒有特別注意這些。
但現在發現面向對象和面向過程的設計思想是很重要的
1.面向對象和面向過程有什么區別?
面向對象程序設計和面向過程程序設計的區別實際就是解決問題的方式不同。
先解釋面向過程,你得先分析出解決問題的步驟,然后用函數把這些步驟一步一步地實現,解決的時候就是一個一個函數地調用。
面向對象,首先你需要知道對象的概念。
對象,就是類中某個具體的實例,比如人類張三,李四就是類的某個對象,他們有自己獨特的個性。
面向對象,看名字它是注重對象的。當解決一個問題的時候,面向對象會把事物抽象成對象的概念,就是說這個問題里面有哪些對象,然后給對象賦一些屬性和方法,然后讓每個對象去執行自己的方法,問題得到解決。
不懂別急,舉個例子你就明白了,不懂都難^_^
面臨的問題: 洗衣機里面放有臟衣服,怎么洗干凈?
面向過程:
1 執行加洗衣粉方法;
2.執行放洗滌劑方法
3執行加水方法;
5 執行放衣服,洗衣服方法;
6執行清洗方法;
7. 執行烘干方法;
----------解決問題 拆成一個個方法,是沒有對象去調用的。 通過一個個方法的執行解決問題。
面向對象: 我先搞個洗衣機對象和人對象
洗衣機: 加入一些屬性和方法 洗衣服方法 清洗方法 烘干方法 人:加洗衣粉方法 加水方法
然后 人.加洗衣粉 人.加水 洗衣機.洗衣服 洗衣機.清洗 洗衣機.烘干
----------同樣解決問題 先抽象出對象,然后用對象執行方法的方式解決問題。
關於兩者的優缺點,根據你的需要來判斷。並不能一概而論
網上很多關於二者優缺點,我認為最形象的解釋是蛋炒飯和蓋澆飯的比較
蛋炒飯:
蓋澆飯:
蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那么唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那么香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否則只能說是各有所長。如果大家都不是美食家,沒那么多講究,那么從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。
蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是”可維護性“比較好,”飯” 和”菜”的耦合度比較低。蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至於”可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
面向過程:
優點:性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、 Linux/Unix等一般采用面向過程開發,性能是最重要的因素。
缺點:沒有面向對象易維護、易復用、易擴展
面向對象:
優點:易維護、易復用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護
缺點:性能比面向過程低
需要解釋一下耦合度,以我的理解可能不是那么准確
說人話:其實就是事物的相關性
低耦合,就是說事物相關性低,其中某一個的改變,並不會使另外的有很大的改變,獨立性高