|
之前寫過一篇如果你也是.NET程序員,收到不少留言,各種意見都有,之前的說話方式不夠友好,特此向因看過而心生郁悶的人道歉。
問題在于我為什么不停的提面向對象呢。說來我并不是面向對象圣徒,我真正想說的是“結構化”的編程思想和代碼組織方式的培養和習慣,我說的結構化是“有結構的“,這樣的結構包括但并不限于面向過程和面向對象。
這樣就有個問題,比如“我自己獨特的結構”不也是”結構化”嗎。Martin Fowler的重構的里有說“任何一個傻瓜都能寫成計算機能理解的代碼。唯有寫成人類容易理解的代碼,才是優秀的程序員”,代碼如果僅僅給計算機讀那怎么寫都無所謂,只要是正確的代碼總能執行,但是我們的代碼是需要維護的,一般的代碼更多還是要讓人能輕松的讀懂,所以“自己獨特的結構”只能自己看。所以話說回來,大家都知道的,比較流行的“結構”包括但并不限于面向過程和面向對象這兩種方式。 然而就算是面向過程與面向對象這兩種, 就算是其中之一,你堅持了嗎?比如我的代碼到底是面向過程還是面向對象,還是很混亂 就算無所謂,我的代碼能讓人輕松讀懂嗎?
面向過程或者面向對象的代碼就一定方便閱讀嗎?不管出于什么樣的原因業界流行這樣兩種。先是以C語言為代表的編程語言,以及面向過程的編碼方式,接著后來以Java語言為代表,面向對象的編碼方式(我僅僅說的是代表,說的兩個方面), 我們在學校的學習以這些為基礎,工作中必然也是也這些為基礎交流。如果我們堅持面向過程,或者面向對象,就為我們的程序方便閱讀提供了前提。怎樣才能體現面向對象和面向過程這兩種其中之一呢。如果你一直以C語言編程,堅持面向過程編程中的一些原則,那么今后受過良好面向過程訓練的人就比較容易閱讀你的代碼了不是嗎。如果你以Java或者C#編程, 堅持面向對象設計與編碼的一些原則,不是為一個受過良好面向對象訓練的人讀懂你的代碼提供了方便嗎?
我為什么說面向對象呢?我更要時候的是堅持“結構化”,如果你能寫出優秀的面向過程的設計也很好啊。如果你堅持用C#來做面向過程的開發也行啊,希望下個接替你位置的人也是用C#寫面向過程代碼的人吧。不過更多的是一個用C#寫代碼的人接受的是面向對象方面的訓練。用C也可以寫出面向對象的設計啊,不知道有人看過ooc這本書呢,(這本書里介紹用C語言寫面向對象的代碼,弄的很復雜),應該有很多人不知道用static可以讓一個.c文件的變量,結構和函數變成私有的吧。只是這樣,一個只進行了面向過程訓練的人能輕松看懂用C做的面向對象開發代碼嗎。 所以一個.NET小項目就不要面向對象了嗎,說不定哪天因為功能擴展變成大項目了呢,更說不好將來維護的人根本就沒接觸過面向過程,就算一個小項目對他來說面向過程的一些做法也讓他看不到懂呢?
所以我為什么堅持要讓設計和代碼面向對象呢?因為用.NET本是是面向對象的開發庫,而用C#做開發的人很多都是面向對象的程序員,所以為了方便交流我們不是應該盡量用面向對象的思路來做開發嗎?而且面向對象的思路也不僅僅是寫出容易閱讀的代碼,面向對象的各種好處也不需要我說了吧. 從最開始寫機器碼,到匯編,高級語言,再到高級語言中出現面向對象語言。面向對象應該是能解決很多問題才出現的吧。
在這里弱弱反對一下“完全貫徹實用就好,能解決問題就行,給錢就行”的觀點,軟件工程師總需要有點信仰,有些堅持的吧,如果軟件不僅僅只是你混飯吃的工具的話,而且就算是工具,你也不能讓你的工具隨便讓人動不是嗎。 小小程序員的一點感慨,貽笑大方了。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。