面向對象程式設計是軟體開發中一個很龐大很複雜的話題,它并不是僅僅學會類、繼承、封裝、多态這些面向對象程式設計文法元素就表示掌握的,這些文法元素隻是實作面向對象程式的工具, 就像磚塊、水泥能搭建小屋,也能造高樓大廈,然而在這裡重要的不是磚塊水泥,而是其它因素。是以,利用面向對象技術寫程式,文法元素不是關鍵,關鍵在于組織這些文法元素的方法和技巧。
這些方法和技巧,比如說那威名遠播的23個面向對象設計模式,各種面向對象設計原則,如面向接口程式設計、封裝變化、高内聚、低耦合等等,都有很多相關書籍介紹。
衆所周知,使用面向對象技術的目的是為了寫好代碼,使代碼易讀、易維護、足夠靈活。
然而,使用Java、C#之類的血統純正的面向對象程式設計語言卻非常難以實踐面向對象的方法與技巧, 即使代碼中随處可見類、封裝、繼承、多态,代碼品質還是非常差,有面向對象之形,無面向對象之實。
這之中的原因在于,通常使用Java、C#語言寫的代碼邏輯非常簡單,這兩門語言在web領域使用居多,而web領域的程式多數邏輯隻是對資料庫的增删查改,這些邏輯根本沒有面向對象技巧大顯身手的餘地,俗話說,實踐出真知,既然沒有辦法實踐,自然也沒有辦法很好的掌握, 試問一下,有誰做個網站能用到複雜的設計模式的,如果真有,大多數情況下也是強行使用。 是以,如果想通過寫普通的Java網站,學好面向對象技術,很難, 事倍功半。
然而, 在網站的另一端,面向對象技術卻能大顯神通,那就前端JavaScript領域。理論上講,JavaScript都不能算面向對象程式設計語言,它沒有真正的類,也沒有繼承,要實作這些特性必須通過另類的模拟。不過這并沒有問題,事實上面向對象的精髓并不是class、extends這些關鍵字,而是使用這些關鍵字的方法,隻要功力深厚,一草一木皆為武器;隻要掌握方法,即使沒有這些關鍵字,通過模拟這些關鍵字也能寫出像樣的面向對象程式。
為什麼面向對象設計應用,在純正的面向對象設計語言中,還不如山寨的JavaScript? 這是因為前端JavaScript程式的邏輯足夠複雜,當然,我說的JavaScript程式不是在網頁上彈出一個對話框、讓網頁中某張圖檔在隐藏和顯示之間切換,我說的JavaScript程式是指那些複雜的特效,一個獨立的特效代碼都在千行以上的那種,比如說功能完善的月曆控件,支援拖拽節點以及動态加載資料的導航樹形菜單、富文本編輯器、各種具有可玩性的JS小遊戲等等, 這類特效都有大量的代碼,且邏輯複雜, 寫這些程式時,如果隻是簡單粗暴的代碼堆砌, 那極有可能無法最終完成任務,即使完成也毫無維護性可言,這種情況下就強烈需要面向對象這樣的技術來簡化代碼的複雜性,這也是為什麼面向對象程式設計技巧與方法在前端JavaScript能很好實踐的原因。
總而言之,如果你是一個後端程式員,想提高自己編寫高品質代碼, 然而卻苦于沒辦法實踐書上所學的面向對象技術,那麼不妨去寫寫JavaScript, 當你面對的不是資料庫的增删查改,而是合理的組織巨量DOM元素,使之達到你想要的效果, 那麼,面向對象不可或缺, 你不用不行,而不是你想用卻沒有場景可以使用。使用JavaScript,會讓你更有寫程式的感覺,因為你不再是資料的搬運工。
知乎:https://www.zhihu.com/people/aspwebchh
github:https://github.com/aspwebchh
email: [email protected]