a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > Ruby > 正文

ruby 面向?qū)ο笏季S 概念

2020-10-29 19:47:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
面向?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)題在于程序是由程序員寫的,而他們僅僅能在工作中記下為數(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ō)法:

  • 我們不再讓數(shù)據(jù)像一個(gè)開(kāi)口的盒子一樣讓我們隨意地伸手進(jìn)去并取出東西. 
  • 我們將其看作一個(gè)封口的并帶有開(kāi)關(guān)和刻度盤的機(jī)器. 

上面所說(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)始.你的汽車有個(gè)計(jì)程器.它的工作就是記錄從上次復(fù)位以來(lái)的行車路
程.我們將如何用編程語(yǔ)言建模?在C里面,這個(gè)計(jì)程器也許就是個(gè)數(shù)值變量,大概是float類型的.這個(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ì)是"什么是最類似它的數(shù)據(jù)類型?"而是"究竟這玩意兒是干什么的?"這不同之處引出了一個(gè)稍帶難度的東西.我們需要花點(diǎn)兒時(shí)間確定到底計(jì)程器是用來(lái)干什么的,外部世界希望怎樣操縱它.然后我們決定構(gòu)造一個(gè)允許我們?cè)黾?復(fù)位,讀值的小機(jī)器,再就沒(méi)別的了.

我們并未提供一種用于向計(jì)程器賦任意值的方法:為什么?因?yàn)槲覀兌贾烙?jì)程器不是那樣工作的.你只能向計(jì)程器做那定義好的幾件事,而且是那些允許我們?nèi)プ龅氖?因此,如果程序里的別的什么東西錯(cuò)誤地向其賦值(比如,車的溫度控制器),這立刻意味著錯(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è)類,每一個(gè)由它生成的單獨(dú)的計(jì)程器(或由工廠造出)對(duì)應(yīng)于一個(gè)對(duì)象.許多面向?qū)ο蟮恼Z(yǔ)言要求我們?cè)趽碛幸粋€(gè)新的對(duì)象之前定義它的類,但Ruby不是如此.

當(dāng)然運(yùn)用面對(duì)對(duì)象語(yǔ)言并不意味著就會(huì)有好的面對(duì)對(duì)象設(shè)計(jì).實(shí)際上,用任何語(yǔ)言都有寫出模糊,粗心,多蟲(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ì)象方法),然后我們將討論到"工廠"(類).你還會(huì)跟我們來(lái)嗎?
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩三级中文字幕 | 国产精品毛片一区视频播 | 日韩精品一区二区在线观看 | 国产精品国产三级国产普通话蜜臀 | 国产在线二区 | 成人精品鲁一区一区二区 | 国产精品无码永久免费888 | 国产一区二区三区四区视频 | 青青草免费在线观看 | 在线观看污片 | 欧美亚洲一区 | 免费精品 | wwwjizz日本| 久久99欧美 | www国产精品| 成人精品在线视频 | 久久夜视频| 成人免费视频观看 | av在线播放免费 | 精品免费视频 | 日韩欧美一区二区三区久久婷婷 | 国产韩国精品一区二区三区 | 国产精品乱码久久久久久 | 最近免费中文字幕在线视频2 | 国产精品亲子伦av一区二区三区 | 岛国av在线 | 日韩综合网| 欧美乱淫 | 久久e久久| 久久99国产精品久久99大师 | 男人天堂a | 国产一区二区精品在线 | 狠狠色 综合色区 | 久久亚洲欧美日韩精品专区 | 欧洲亚洲视频 | 国产精品一区二区三区四区 | 91小视频| 黄色毛片观看 | 中文字幕免费在线 | 一级黄色短片 | 中文字幕一区二区三区日韩精品 |