多年來述寡,面向過程和面向對象為人所津津樂道,這個可能是程序員當中極其容易勾起的話題。而最容易談起的就是C是面向過程的語言昼钻,C++是面向對象的語言,然而我覺得這個回答有點膚淺,因為C也可面向對象抖锥,C++也可面向過程亿眠。我們所說的面向過程和面向對象應該是一種思想,不應該限制在編程語言當中。
但是相對而言拯勉,C++,Java更容易面向對象,因為他們似乎專門為面向對象而生,解決了軟件結構設計的一些難題枚碗;而C語言更容易面向過程怨规,因為它是一門系統(tǒng)語言級別的語言波丰,需要較高和較快的性能和速度。
其實很多人并沒有意識到自己是在面向對象還是在面向過程舶得,簡單來說纫骑,雖然寫了很多函數(shù)和很多個類,但是依然沒有編程思想九孩,人云亦云先馆。
首先我們來了解一下它們的概念
面向過程:是以過程為中心的編程思想。以我的理解捻撑,事物比較簡單磨隘,可以用線性的思維去解決。有個同事是做mcu固件的顾患,也就是單片機開發(fā)番捂,用的是keil編譯器,他干的就是不斷寫函數(shù)江解,單線程梭到底设预,不會用協(xié)程,多線程通信犁河。
面向對象:是一種對現(xiàn)實世界理解和抽象的方法鳖枕。以我的理解,事物比較復雜桨螺,使用簡單的線性思維也無法解決宾符。所以它有封裝,繼承灭翔,多態(tài)魏烫,抽象特征。項目程序代碼是以類為單位,方法從屬于類哄褒。
共同點:面向過程和面向對象都是解決實際問題的一種思維方式稀蟋,二者相輔相成,并不是對立的呐赡。解決復雜問題退客,通過面向對象方式便于我們從宏觀上把我事物之間復雜的關系、方便我們分析整個系統(tǒng)链嘀;具體到微觀操作萌狂,仍然使用面向過程方式來處理。
面向過程
優(yōu)點:性能比面向對象高管闷,因為類調用時需要實例化粥脚,比較消耗資源;比如Linux/Unix等一般采用面向過程開發(fā)窃肠,性能是最重要的因素;很多驅動包个,單片機mcu開發(fā),涉及到硬件圖形渲染冤留,算法封裝等碧囊,都會采用面向過程。
缺點
1.復用性較低,因為面向過程時逐步進行功能的實現(xiàn);
2.代碼維護更改性低,在面向過程編程中沒有面向對象的封裝方法,如果出問題得全局進行逐步代碼分析;
所以如果是面向過程纤怒,你采用多線程糯而,多進程,協(xié)程泊窘,這些方式通信熄驼,其實還是比較痛苦的,需要你有扎實的編碼水平和經(jīng)驗烘豹,不然一個bug可能會讓你的大廈崩塌瓜贾。
面向對象
優(yōu)點:
1.易維護,代碼可讀性好携悯,而且面向對象就是比較容易讀懂業(yè)務邏輯祭芦;
2.易復用,需要的時候new一個類憔鬼,實例化龟劲,可繼承,可封裝轴或;
3.易擴展昌跌,可多態(tài),可以自己重寫實例化這個方法照雁;
4.由于面向對象有封裝蚕愤、繼承、多態(tài)性的特性,可以設計出低耦合的系統(tǒng)审胸,使系統(tǒng)更加靈活亥宿、更加易于維護;
5.在復用時直接調用封裝好的方法即可,而且安全性相對較高,可以避免不必要的更改引起的錯誤;
6.允許一個對象的多個實例同時存在砂沛,而且彼此之間不會相互干擾烫扼;
7.安全性較高
缺點:其程序處理的效率比較低,代碼容易冗余碍庵,經(jīng)常碰到一個瓶頸后就需要重構一下映企。
而這里面需要提的是類和對象的關系。類是對象的抽象,實例是類的實現(xiàn)静浴。C++中對象和類有何聯(lián)系和區(qū)別:
它的區(qū)別就像
float pi = 3.141592654;
中的float和pi的區(qū)別一樣堰氓。
類是用戶自定義數(shù)據(jù)類型,而對象是這些類定義的具體實例或變量苹享。
什么時候面向過程双絮,什么時候面向對象
以上也簡要表達了面向過程和面向對象的場景。就我覺得得问,如果是做上層應用囤攀,做app應用開發(fā)來看,有面向對象的思想就已經(jīng)是水平相當好的程序員了宫纬。因為設計模式焚挠,很多設計思想的基礎就是類,就是面向對象的疊加漓骚。只有寫過幾十萬行代碼的人才懂面向對象帶來的舒暢蝌衔,如果你僅僅只寫過幾萬行代碼,我想即使你用了面向對象的思想蝌蹂,你也體會不到他的優(yōu)點噩斟。
凡事不可勉強,只要突破你的瓶頸后叉信,在一些必須要用面向對象去解決問題你才能獲取他的精髓亩冬,如果場景中面向對象和面向過程都能解決問題,那么我覺得你是不會體驗到他們區(qū)別的硼身。
對新手而言硅急,可能面向過程是最經(jīng)常的。即使你自豪的封裝的幾個類佳遂,那么也不要以為自己是在面向對象了营袜,其實有可能你還是在面向過程。格局打開丑罪,盡可能閱讀多的代碼荚板,去熟悉一些開源和大工程凤壁,這樣就能感覺到的宇宙的浩瀚和自己的渺小,從而提升自己的水平跪另,不斷打破上限拧抖。
兔云程序
致力于推廣編程教程,服務程序員
22篇原創(chuàng)內容
公眾號