來人人都是産品經理【起點學院】,BAT實戰派産品總監手把手系統帶你學産品、學運營。
昨天講了MVC,有同學表示還想了解一些軟件開發架構方面的姿勢。我琢磨了半天,列了不少技術名詞,本來想挑一個出來講一講,寫了一半發現有很多前置知識之前沒涉及,于是決定把坑填一填,先從基礎的「面向對象」講起。
話說起來,面向對象的産生還有各位産品經理的功勞。為什麼這樣說呢?因為一開始的時候,并沒有面向對象,隻有面向過程的概念。面向過程很好理解,指的是程序員接到需求,會把它拆成一個一個的命令,然後串起來交給計算機去執行。舉個例子,産品經理說要把大象裝進冰箱裡。程序員列了幾個步驟:
上面每一個步驟,程序員都會用一個「函數」來實現。「函數」是一些代碼的集合體,每個函數可以實現一個功能。比如我要定義一個打開冰箱門的函數:
所有函數定義好了之後,依次調用就可以了:
- openTheDoor;
- pushElephant;
- closeTheDoor;
需求完成,順利交工。但是你以為這樣就結束了?Naive。産品經理說才剛剛開始呢。
- 「我要把大象裝微波爐裡」
- 「我要把獅子也裝冰箱裡」
- 「我要把大象裝冰箱,但是門别關,敞着就行」
- 。。。
如果還是用面向過程的方法來應付,每次需求的變更,程序員就要把整個系統通讀一遍,找出可用的函數(如果沒有就再定義一個),最後依次調用它們。最後系統越來越雜亂無章難以管理,程序員不堪重負,紛紛操起刀走上了犯罪的道路。
面向對象從另一個角度來解決這個問題。它抛棄了函數,把「對象」作為程序的基本單元。那麼對象到底是個什麼東西呢?對象就是對事物的一種抽象描述。人們發現,現實世界中的事物,都可以用「數據」和「能力」來描述。比如我要描述一個人,「數據」就是他的年齡、性别、身高體重,「能力」就是他能做什麼工作,承擔什麼樣的責任。描述一台電視,「數據」就是它的屏幕尺寸、亮度,「能力」就是播放《葫蘆娃》。
面向對象的世界裡,到處都是對象。對象不光有「數據」和「能力」,還可以接受命令。例如你可以讓「狗」這個對象「吃狗糧」,就可以把「吃狗糧」的命令發給「狗」讓其執行,然後我們就實現了「狗吃狗糧」的需求。
現在對象有了,如何進行面向對象的編程呢?很簡單,依次向不同的對象發送命令就可以了。回到上面的例子,用面向對象來實現,我們會先定義一個「冰箱」對象,它的「數據」就是當前的冷凍溫度,或者該冰箱已經有了多少頭大象,「能力」就是開門、關門。還有一個「大象」對象,它的「數據」可以是大象的智商、體積,「能力」就是「自己跑到冰箱裡去」。然後我們依次:
- 向冰箱下達「開門」的命令。
- 向大象下達「進冰箱」的命令。
- 向冰箱下達「關門」的命令。
面向對象有很多特性,你可能聽說過繼承、封裝、多态的概念,但我不準備在這裡講這些(可能後面的文章會介紹),我就說下我理解的面向對象,最重要的兩個特性。
自己的事情自己做。
我們創建的對象,應該是剛剛好能做完它能做的事情,不多做,不少做。多做了容易耦合,各種功能雜糅在一個對象裡。比如我有一個對象叫「汽車」,可以「行駛」,可以「載人」,現在的需求是要實現「載人飛行」,就不能重用這個對象,必須新定義一個對象「飛機」來做。如果你給「汽車」插上了翅膀,賦予了它「飛行」的能力,那麼新來的同學面對你的代碼就會莫名其妙,無從下手。
面向接口編程。
現在我們把「數據」和「行為」都封裝到了對象裡,相當于對象成了一個黑匣子,那我們怎麼知道對象具有什麼樣的能力呢?這個問題的關鍵就是接口。關于接口,之前的文章《5分鐘理解什麼是接口》有過介紹。對象把它的能力通過接口的方式公布出來,自己則成為接口的實現者。這樣調用者就不用關心接口背後的對象是什麼東西,如何實現的了。還是上面的例子,産品經理現在說要把大象放洗衣機裡,通過我們的分析,洗衣機也需要有「開門」、「關門」的能力。那麼我們就可以抽象出一個接口來,它就是「開門」和「關門」的能力集合,假設我們稱之為「大象之家」接口。我們的對象冰箱、微波爐、洗衣機都實現「大象之家」的接口,盡管實現方式不一樣,但是在外界看來,它們都是一樣的,都是可以盛放大象的容器。這樣我們編程的時候就可以這樣寫:
- 向大象之家下達「開門」的命令。
- 向大象下達「進冰箱」的命令。
- 向大象之家下達「關門」的命令。
至于大象之家到底是個什麼東西,我們不care。即使哪天變成了馬桶,「開門」和「關門」的具體實現交給負責馬桶對象的同事,我們隻管調用就可以了。
面向對象就先講這些吧,封裝、繼承和多态暫且當做一個坑,以後來填。年紀大了好忘事兒,你們如果想了解的話,記得提醒我哈。
#專欄作家#
給産品經理講技術,微信公衆号(pm_teacher),人人都是産品經理專欄作家。資深程序猿,專注客戶端開發若幹年,對前端、後台技術略懂,熱衷于對新的科技領域的探索。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!