面向對象是一個挺讓人迷惑的措辭.叫一切東西都是面向對象會讓別人覺得你很時髦. Ruby 聲稱自己是面向對象的腳本語言;但究竟什么才是"面向對象"? 我們已經有了各種各樣的答案,但所有這些恐怕都歸結于同一件事.與其快速地概括它,不如讓我們先花點兒時間考慮一下傳統的編程模式. 傳統意義上,一個編程問題從出現的各種數據,以及處理數據的過程(procedures)著手.在這一模式下,數據是呆板,被動和無用的;它完全的求助于那個體積龐大的,主動的,邏輯性的,全能的過程體. 這一做法的問題在于程序是由程序員寫的,而他們僅僅能在工作中記下為數不多的細節.而隨著工程的加大,它的核心也增長到難以記住整個工程是如何工作.細微的失誤和敲打錯誤變得越來越容易造成難以發現的臭蟲(bugs).繁雜和意外的干擾開始在核心內出現,維護也變得像企圖抓住一只憤怒的烏賊還要不讓它的觸須碰到你臉.當然,對于傳統方法,我們也有很多指導你去縮小和檢測這些臭蟲的方法,但更好的解決方法是徹底的改變我們的工作方式. 而面向對象所做的就是讓我們將現實的,重復性的邏輯工作交給數據本身;它將我們對數據的概念從被動變為主動.換種說法: 我們不再讓數據像一個開口的盒子一樣讓我們隨意地伸手進去并取出東西. 我們將其看作一個封口的并帶有開關和刻度盤的機器. 上面所說的"機器"的內部可能相當簡單或者復雜;我們不能從外面窺視,我們也不能允許自己打開機器外殼(除非我們確實發現其中有誤),因此我們只需要通過撥動開關,讀取刻度來操作數據.機器一旦建好,我們便不再必須考慮它是如何運轉. 也許,你會覺得這是在無端的增加自己的工作量,但這一方法可以讓我們有效避免事情向壞的方向發展. 讓我們從一個簡單的毫無實際價值卻至少能說明部分概念的例子開始.你的汽車有個計程器.它的工作就是記錄從上次復位以來的行車路 程.我們將如何用編程語言建模?在C里面,這個計程器也許就是個數值變量,大概是float類型的.這個程序會通過每隔一定的行程增加它的值,在合適的時候也會復位為零.哪里會出問題呢?程序里的一個臭蟲會無端的向這個變量賦一個偽值,這可以由某些未預料到的原因而發生.任何有過C編程經驗的人都會知道那會花掉數小時或數天來除掉這個當找出時簡單得荒唐無比的臭蟲.(找出它的那一刻往往會使勁地拍拍前額) 同樣的問題在使用面向對象時會從一個截然不同的角度著手.當設計它時,程序員會問的頭一件事不會是"什么是最類似它的數據類型?"而是"究竟這玩意兒是干什么的?"這不同之處引出了一個稍帶難度的東西.我們需要花點兒時間確定到底計程器是用來干什么的,外部世界希望怎樣操縱它.然后我們決定構造一個允許我們增加,復位,讀值的小機器,再就沒別的了. 學習交流
熱門圖片
猜你喜歡的新聞
新聞熱點 2019-10-23 09:17:05
2019-10-21 09:20:02
2019-10-21 09:00:12
2019-09-26 08:57:12
2019-09-25 08:46:36
2019-09-25 08:15:43
疑難解答 |