面向?qū)ο?/I>是一個挺讓人迷惑的措辭.叫一切東西都是面向?qū)ο髸寗e人覺得你很時髦. Ruby 聲稱自己是面向?qū)ο蟮哪_本語言;但究竟什么才是"面向?qū)ο?? 我們已經(jīng)有了各種各樣的答案,但所有這些恐怕都?xì)w結(jié)于同一件事.與其快速地概括它,不如讓我們先花點兒時間考慮一下傳統(tǒng)的編程模式. 傳統(tǒng)意義上,一個編程問題從出現(xiàn)的各種數(shù)據(jù),以及處理數(shù)據(jù)的過程(procedures)著手.在這一模式下,數(shù)據(jù)是呆板,被動和無用的;它完全的求助于那個體積龐大的,主動的,邏輯性的,全能的過程體. 這一做法的問題在于程序是由程序員寫的,而他們僅僅能在工作中記下為數(shù)不多的細(xì)節(jié).而隨著工程的加大,它的核心也增長到難以記住整個工程是如何工作.細(xì)微的失誤和敲打錯誤變得越來越容易造成難以發(fā)現(xiàn)的臭蟲(bugs).繁雜和意外的干擾開始在核心內(nèi)出現(xiàn),維護(hù)也變得像企圖抓住一只憤怒的烏賊還要不讓它的觸須碰到你臉.當(dāng)然,對于傳統(tǒng)方法,我們也有很多指導(dǎo)你去縮小和檢測這些臭蟲的方法,但更好的解決方法是徹底的改變我們的工作方式. 而面向?qū)ο笏龅木褪亲屛覀儗F(xiàn)實的,重復(fù)性的邏輯工作交給數(shù)據(jù)本身;它將我們對數(shù)據(jù)的概念從被動變?yōu)橹鲃?換種說法:
上面所說的"機(jī)器"的內(nèi)部可能相當(dāng)簡單或者復(fù)雜;我們不能從外面窺視,我們也不能允許自己打開機(jī)器外殼(除非我們確實發(fā)現(xiàn)其中有誤),因此我們只需要通過撥動開關(guān),讀取刻度來操作數(shù)據(jù).機(jī)器一旦建好,我們便不再必須考慮它是如何運轉(zhuǎn). 也許,你會覺得這是在無端的增加自己的工作量,但這一方法可以讓我們有效避免事情向壞的方向發(fā)展. 讓我們從一個簡單的毫無實際價值卻至少能說明部分概念的例子開始.你的汽車有個計程器.它的工作就是記錄從上次復(fù)位以來的行車路 程.我們將如何用編程語言建模?在C里面,這個計程器也許就是個數(shù)值變量,大概是float類型的.這個程序會通過每隔一定的行程增加它的值,在合適的時候也會復(fù)位為零.哪里會出問題呢?程序里的一個臭蟲會無端的向這個變量賦一個偽值,這可以由某些未預(yù)料到的原因而發(fā)生.任何有過C編程經(jīng)驗的人都會知道那會花掉數(shù)小時或數(shù)天來除掉這個當(dāng)找出時簡單得荒唐無比的臭蟲.(找出它的那一刻往往會使勁地拍拍前額) 同樣的問題在使用面向?qū)ο髸r會從一個截然不同的角度著手.當(dāng)設(shè)計它時,程序員會問的頭一件事不會是"什么是最類似它的數(shù)據(jù)類型?"而是"究竟這玩意兒是干什么的?"這不同之處引出了一個稍帶難度的東西.我們需要花點兒時間確定到底計程器是用來干什么的,外部世界希望怎樣操縱它.然后我們決定構(gòu)造一個允許我們增加,復(fù)位,讀值的小機(jī)器,再就沒別的了. 我們并未提供一種用于向計程器賦任意值的方法:為什么?因為我們都知道計程器不是那樣工作的.你只能向計程器做那定義好的幾件事,而且是那些允許我們?nèi)プ龅氖?因此,如果程序里的別的什么東西錯誤地向其賦值(比如,車的溫度控制器),這立刻意味著錯誤的發(fā)生.當(dāng)運行它的時候(或者當(dāng)編譯時,視語言的性質(zhì)而定)我們便會被告之禁止向計程器這個對象賦任意值.給出的消息也許并非如此清楚,但它應(yīng)該接近其真實原因.這并不防止錯誤的發(fā)生,是吧?但它很快給我們直接指出了問題所在.這只是OO編程會為我們節(jié)約很多時間的許多方法中的一個. 一般的,我們會考慮將上面的那玩意兒抽象化,因為建個工廠來造機(jī)器比一個個單獨地造要簡單的多.我們不希望直接的造單獨的計程器; 換句話,我們希望所有的計程器都能由一個模型造出.這個模式(如果你喜歡,叫它計程器工廠)對應(yīng)于我們所稱的一個類,每一個由它生成的單獨的計程器(或由工廠造出)對應(yīng)于一個對象.許多面向?qū)ο蟮恼Z言要求我們在擁有一個新的對象之前定義它的類,但Ruby不是如此. 當(dāng)然運用面對對象語言并不意味著就會有好的面對對象設(shè)計.實際上,用任何語言都有寫出模糊,粗心,多蟲,低造詣及不穩(wěn)定的代碼.Ruby能為你做的(作為反例,特別是C++)是讓OO編程的實踐足夠自然,即使你僅僅在小范圍內(nèi)使用也不會感到必須憑借丑陋的代碼去提高效率.我們將會隨著這本手冊深入地討論Ruby實現(xiàn)這些預(yù)定目標(biāo)的機(jī)制;下一章將是"開關(guān)和刻度表"(對象方法),然后我們將討論到"工廠"(類).你還會跟我們來嗎? |
標(biāo)簽:內(nèi)江 棗莊 克拉瑪依 南昌 大慶 西雙版納 甘孜 河池
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ruby 面向?qū)ο笏季S 概念》,本文關(guān)鍵詞 ruby,面向,對象,思維,概念,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。上一篇:ruby 迭代器使用方法
下一篇:rudy 方法 分析