麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

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

2020-10-29 19:47:50
字體:
供稿:網(wǎng)友
面向?qū)ο?/I>是一個挺讓人迷惑的措辭.叫一切東西都是面向?qū)ο髸寗e人覺得你很時髦. Ruby 聲稱自己是面向?qū)ο蟮哪_本語言;但究竟什么才是"面向?qū)ο?? 

我們已經(jīng)有了各種各樣的答案,但所有這些恐怕都歸結(jié)于同一件事.與其快速地概括它,不如讓我們先花點兒時間考慮一下傳統(tǒng)的編程模式.

傳統(tǒng)意義上,一個編程問題從出現(xiàn)的各種數(shù)據(jù),以及處理數(shù)據(jù)的過程(procedures)著手.在這一模式下,數(shù)據(jù)是呆板,被動和無用的;它完全的求助于那個體積龐大的,主動的,邏輯性的,全能的過程體.

這一做法的問題在于程序是由程序員寫的,而他們僅僅能在工作中記下為數(shù)不多的細節(jié).而隨著工程的加大,它的核心也增長到難以記住整個工程是如何工作.細微的失誤和敲打錯誤變得越來越容易造成難以發(fā)現(xiàn)的臭蟲(bugs).繁雜和意外的干擾開始在核心內(nèi)出現(xiàn),維護也變得像企圖抓住一只憤怒的烏賊還要不讓它的觸須碰到你臉.當然,對于傳統(tǒng)方法,我們也有很多指導(dǎo)你去縮小和檢測這些臭蟲的方法,但更好的解決方法是徹底的改變我們的工作方式.

而面向?qū)ο笏龅木褪亲屛覀儗F(xiàn)實的,重復(fù)性的邏輯工作交給數(shù)據(jù)本身;它將我們對數(shù)據(jù)的概念從被動變?yōu)橹鲃?換種說法:

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

上面所說的"機器"的內(nèi)部可能相當簡單或者復(fù)雜;我們不能從外面窺視,我們也不能允許自己打開機器外殼(除非我們確實發(fā)現(xiàn)其中有誤),因此我們只需要通過撥動開關(guān),讀取刻度來操作數(shù)據(jù).機器一旦建好,我們便不再必須考慮它是如何運轉(zhuǎn).

也許,你會覺得這是在無端的增加自己的工作量,但這一方法可以讓我們有效避免事情向壞的方向發(fā)展.

讓我們從一個簡單的毫無實際價值卻至少能說明部分概念的例子開始.你的汽車有個計程器.它的工作就是記錄從上次復(fù)位以來的行車路
程.我們將如何用編程語言建模?在C里面,這個計程器也許就是個數(shù)值變量,大概是float類型的.這個程序會通過每隔一定的行程增加它的值,在合適的時候也會復(fù)位為零.哪里會出問題呢?程序里的一個臭蟲會無端的向這個變量賦一個偽值,這可以由某些未預(yù)料到的原因而發(fā)生.任何有過C編程經(jīng)驗的人都會知道那會花掉數(shù)小時或數(shù)天來除掉這個當找出時簡單得荒唐無比的臭蟲.(找出它的那一刻往往會使勁地拍拍前額)

同樣的問題在使用面向?qū)ο髸r會從一個截然不同的角度著手.當設(shè)計它時,程序員會問的頭一件事不會是"什么是最類似它的數(shù)據(jù)類型?"而是"究竟這玩意兒是干什么的?"這不同之處引出了一個稍帶難度的東西.我們需要花點兒時間確定到底計程器是用來干什么的,外部世界希望怎樣操縱它.然后我們決定構(gòu)造一個允許我們增加,復(fù)位,讀值的小機器,再就沒別的了.

我們并未提供一種用于向計程器賦任意值的方法:為什么?因為我們都知道計程器不是那樣工作的.你只能向計程器做那定義好的幾件事,而且是那些允許我們?nèi)プ龅氖?因此,如果程序里的別的什么東西錯誤地向其賦值(比如,車的溫度控制器),這立刻意味著錯誤的發(fā)生.當運行它的時候(或者當編譯時,視語言的性質(zhì)而定)我們便會被告之禁止向計程器這個對象賦任意值.給出的消息也許并非如此清楚,但它應(yīng)該接近其真實原因.這并不防止錯誤的發(fā)生,是吧?但它很快給我們直接指出了問題所在.這只是OO編程會為我們節(jié)約很多時間的許多方法中的一個.

一般的,我們會考慮將上面的那玩意兒抽象化,因為建個工廠來造機器比一個個單獨地造要簡單的多.我們不希望直接的造單獨的計程器;
換句話,我們希望所有的計程器都能由一個模型造出.這個模式(如果你喜歡,叫它計程器工廠)對應(yīng)于我們所稱的一個類,每一個由它生成的單獨的計程器(或由工廠造出)對應(yīng)于一個對象.許多面向?qū)ο蟮恼Z言要求我們在擁有一個新的對象之前定義它的類,但Ruby不是如此.

當然運用面對對象語言并不意味著就會有好的面對對象設(shè)計.實際上,用任何語言都有寫出模糊,粗心,多蟲,低造詣及不穩(wěn)定的代碼.Ruby能為你做的(作為反例,特別是C++)是讓OO編程的實踐足夠自然,即使你僅僅在小范圍內(nèi)使用也不會感到必須憑借丑陋的代碼去提高效率.我們將會隨著這本手冊深入地討論Ruby實現(xiàn)這些預(yù)定目標的機制;下一章將是"開關(guān)和刻度表"(對象方法),然后我們將討論到"工廠"(類).你還會跟我們來嗎?
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲网站在线观看 | 欧美精品久久久久久久久久 | 99欧美精品 | 久久久综合视频 | 午夜天堂在线视频 | 欧美18xxxx| 欧美一级网 | 久久久久久久久久美女 | 一级毛片真人免费播放视频 | 国产午夜电影在线观看 | 久久久久久久久亚洲精品 | 91aa.app| 国产精品视频免费网站 | 99亚洲伊人久久精品影院红桃 | 视频一区二区精品 | 免费国产在线观看 | 美女久久 | 亚洲特黄 | 欧美××××黑人××性爽 | 欧美巨乳在线观看 | 麻豆一二区 | 九草在线 | 毛片免费在线视频 | 国产一区视频在线免费观看 | 国产91九色视频 | 亚洲无限资源 | 久久成人午夜视频 | 精品一区二区电影 | 日韩黄在线观看 | 性生活视频一级 | 永久av在线免费观看 | 天天草夜夜 | 香蕉久久久精品 | 午夜视频观看 | 精品影视一区二区 | 草操视频 | 黄网站色成年大片免费高 | 日韩一级片黄色 | 国产一级大片 | 欧美性受xxxx白人性爽 | 久久综合精品视频 |