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