架構師之路(1)---面向過程和麪向對象 王澤賓

一、引言
   機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並很少,只是隨着應用領域和方向的不一樣,產生了不少的分支,因此說編程並非一件很困難的事情,一個高中生通過特定的訓練就能夠作獲得。可是,會編程和編好程絕對是兩碼事,一樣的程序員,有的人幾年以後成爲了架構師,有的人卻還在不停地coding,只不過ctrl-c、ctrl-v用得更加純熟了。在中國,編程人員最終的歸途無外乎兩條:一是轉向技術管理,它的終點是CTO;二是繼續深刻,它的終點是首席架構師,成爲CEO的人畢竟是少數。若是你如今仍是個普通的程序員,但願繼續在技術這條路上前進的話,我想你仍是應該先補充一點軟件工程的思想,學習一點有關設計模式的知識,只有具有這些能力,你才能從總體和宏觀層面來考慮問題、分析問題和解決問題。本人Coding了不少年,中間走了很多彎路,雖然最終沒什麼大成就,但總算有一些心得,很願意把本身的一些經驗拿出來跟你們分享,這或許對你的發展有所幫助。
由程序員轉爲架構師,最繞不開的概念就算是面向對象(OO)了。記得在大學的時候,咱們專業開了一門課叫《面向對象的編程》。那個時候,咱們剛剛學了一門C語言,開發環境用的仍是DOS下的Turbo C,半點項目開發的經驗都沒有,純粹的空對空。因此,一學期下來,我始終處於一種懵懂狀態,既沒領會面向過程和麪向對象到底有什麼區別,也沒搞懂面向對象能帶來什麼好處。

二、面向過程(OP)和麪向對象(OO)

2.1 蛋炒飯和蓋澆飯
    有人這麼形容OP和OO的不一樣:用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我以爲這個比喻仍是比較貼切的。
蛋炒飯製做的細節,我不太清楚,由於我沒當過廚師,也不會作飯,但最後的一道工序確定是把米飯和雞蛋混在一塊兒炒勻。蓋澆飯呢,則是把米飯和蓋菜分別作好,你若是要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;若是要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。

    蛋炒飯的好處就是入味均勻,吃起來香。若是恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼惟一的辦法就是所有倒掉,從新作一份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只須要把上面的蓋菜撥掉,更換一份蓋菜就能夠了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。
究竟是蛋炒飯好仍是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,不然只能說是各有所長。若是你們都不是美食家,沒那麼多講究,那麼從飯館角度來說的話,作蓋澆飯顯然比蛋炒飯更有優點,他能夠組合出來任意多的組合,並且不會浪費。
2.2 軟件工程
    蓋澆飯的好處就是「菜」「飯」分離,從而提升了製做蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是「可維護性」比較好,「飯」和「菜」的耦合度比較低。蛋炒飯將「蛋」「飯」攪和在一塊兒,想換「蛋」「飯」中任何一種都很困難,耦合度很高,以致於「可維護性」比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表如今3個方面:可理解性、可測試性和可修改性。面向對象的主要好處就是顯著的改善了軟件的可維護性。

    面向過程(OP)和麪向對象(OO)是否是就是指編碼的兩種方式呢?不是!你拿到了一個用戶需求,好比有人要找你編個軟件,你是否是須要通過需求分析,而後進行整體/詳細設計,最後編碼,才能最終寫出軟件,交付給用戶。這個過程是符合人類基本行爲方式的:先想作什麼,再想如何去作,最後纔是作事情。有的同窗說:「我沒按照你說的步驟作啊,我是直接編碼的」。其實,你必定會經歷了這三個階段,只不過你潛意識裏沒有分得那麼清楚。對於拿到需求就編碼的人,可能編着編着,又得倒回去從新琢磨,仍是免不了這些過程,

    以OO爲例,對應於軟件開發的過程,OO衍生出3個概念:OOA、OOD和OOP。採用面向對象進行分析的方式稱爲OOA,採用面向對象進行設計的方式稱爲OOD,採用面向對象進行編碼的方式稱爲OOP。面向過程(OP)和麪向對象(OO)本質的區別在於分析方式的不一樣,最終致使了編碼方式的不一樣。
2.3 面向過程(OP)和麪向對象(OO)(未完待續)
相關文章
相關標籤/搜索