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