面向對象與面向過程區別與聯繫深入淺出解析

      作爲一個在電商行業混跡多年的產品經理,很多時候以爲自己知道什麼是面向對象,真正要跟別人解釋的時候,又覺得理解上很模糊,網上其他介紹的例子感覺不是很貼切,比如蛋炒飯和蓋澆飯,或者五子棋等例子,經過這幾天的整理思考,把對面向對象與面向過程的思考給大家分享下: 


      首先,我們要認識什麼是面向對象,先要了解面向對象怎麼來的,編程技術一開始是沒有面向對象的概念的,最早都是面向過程,後來經過一定時間段的發展,逐漸抽象出面向對象的概念,這裏用人類社會本身的發展舉一個例子:


      最早在農耕時代甚至更早之前,人類都是自給自足,自己種糧食,自己製衣,自己建房子,自己養牛羊豬,經過人類的漫長髮展,發現這種方式效率太低,要求每個人什麼都會,一旦有什麼新的需求,都要自己去學去做,成本太大,另外一方面一單涉及到一些複雜的事情,面向過程就很難解決(比如造皇宮,長城)。所以慢慢的就出現了社會分工,到工業社會以致現代社會以後,逐漸分離出農牧民,建築工,紡織工,水電工,廚師,工程師,律師,程序猿等工種。這個時候人類有什麼需要就可以比較方便快速的滿足,比如計算機技術的出行,只需要一小批人會,就可以滿足很多人的需求,其他人不需要懂計算機怎麼工作的,只需要知道計算機有什麼功能,提供什麼服務就可以了,再比如大家不想喫米飯,想喫漢堡,只需要廚師學會做漢堡就可以做給大家吃了。


      上面人類自給自足,日出而作日入而息就可以理解爲面向過程,後來隨着社會的發展,衍生出各類工種,可以理解爲面向對象,每個人在社會中承擔的角色工種不一樣,一方面作爲服務的提供方,一方面這位需求的滿足方,各種角色沒有必然的關係,正常情況下是老死不相往來的,除非有需求觸發的時候。面向對象的好處是 高內聚、低耦合、可擴展、可複用,能夠用來解決更復雜的問題(比如造汽車)

【高內聚、低耦合】:每個人或者每個角色只需要知道自己提供什麼服務就可以,每個人或者角色之間沒有太大關係,除了有需求時產生的服務和被服務的關係

【可複用】:每個角色可以服務其它所有人或者角色,比如廚師開餐館,就能滿足其讓人喫飯的需求

【可擴展】:如果需求發生變化,還是上面的例子,大家不想喫米飯,想喫漢堡,只需要廚師學會做漢堡就可以做給大家吃了,不用大家都去學

【解決複雜問題】:把複雜問題進行分解分工,每個角色各司其職,最終解決問題或者做出一個複雜的產品,比如汽車和飛機,都是全球各個國家和工廠上下游聯合一起製造生產的

       當然不能絕對的說面向過程好還是面向對象好,單個對象的解決問題的方式其實還是面向過程的。面向過程也有其優勢,如果自己就會修電腦,電腦壞了不用拿去修理店,自己直接搞定,這樣的好處是效率高(效率高的前提是自己會修電腦),速度快,壞了就能修好馬上用,所以面向過程編程的好處是性能好,執行速度快,在某些領域追求速度性能或者是相對穩定不怎麼擴展的領域用的都是面向過程,比如單片機、嵌入式開發、 Linux/Unix等

       這樣理解下來,我們就來接到面向過程和麪向對象的區別了,也會發現面向對象(社會工種)的一些特點,比如封裝、繼承、多態:

【封裝】:外部只需要對象提供什麼服務即可,對象本身決定自己對外暴露或者提供什麼,外部不需要了解對象內部結構和處理方式,保護對象內的安全,

【繼承】:師傅帶徒弟,徒弟繼承了師傅的技能

【多態】:比如老師講課,語文老師講的是文章,數學老師講的是公式,同樣是廚師可以做米飯,可以做麪條,也可以做米飯等等。
 

總結一下:宏觀上,用面向對象來把握事物間複雜的關係,分析系統。微觀上,仍然使用面向過程。面向過程的思維方式是分析綜合,面向對象的思維方式是構造。面向對象是面向過程發展後的產物,包括人類社會也是這麼發展的。希望通過這個案例能讓大家理解面向對象和麪向過程的區別,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章