<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ruby程序設(shè)計(jì)語言快速入門(六)------之多繼承

    ?一些程序語言(如C++和CLOS)提供了多重繼承機(jī)制:一個類可以繼承自多個超類。例如,一個House可能繼承自一個Building類(連同Office和Hospital類一起)和Residence類(連同Apartment類一起)。盡管多重繼承可能成為一種語言強(qiáng)有力的特征,但是由于它會增加該語言的復(fù)雜性和歧義,因此許多面向?qū)ο笳Z言都沒有加入它。

      Ruby支持單繼承。然而,它還提供了mixin-它提供了多繼承的許多特征。一個mixin是一種"模塊"類型。為此,你必須首先理解在Ruby中模塊的含義。

      在Ruby中,模塊是一種把方法和常數(shù)分組的方式。它與類相似,但是一個模塊沒有實(shí)例并且也沒有子類。也許解釋模塊的最好方法是舉一個例子。假定你正在開發(fā)一個制造業(yè)應(yīng)用程序。該程序需要存取大量的科學(xué)公式和常數(shù),那么你可以或者是創(chuàng)建一個通用類來把這些放在其中或者是創(chuàng)建一個模塊。模塊的優(yōu)點(diǎn)在于,在存取其中的公式時,根本沒有任何實(shí)例擾亂所帶來的煩惱。

    module?Formulas
    ACCELERATION?=?9.8
    LIGHTSPEED?=?299792458
    def?energy?(mass)
    mass*(LIGHTSPEED**2)
    end
    def?force?(mass)
    mass*ACCELERATION
    end
    end
    ?

      現(xiàn)在,這些公式方法和常數(shù)可以被任何數(shù)目的其它類或其自身所使用:

    irb(main):046:0>?Formulas.force(10)
    =>?98.0
    irb(main):047:0&Gt;?Formulas::ACCELERATION
    =&Gt;?9.8?


      注意,為了調(diào)用一個模塊方法或使用一個模塊常數(shù),你必須使用類似于調(diào)用一個類方法的標(biāo)志。為了調(diào)用一個模塊方法,你需要使用模塊類名,后面跟著一個點(diǎn),再跟著模塊方法名。為了引用模塊常數(shù),你可以使用模塊名,后面跟著兩個冒號,再跟著常數(shù)名。

      除了作為方法和常數(shù)的"公共"應(yīng)用以外,模塊還可以幫助定義多重繼承。一個mixin是一個簡單的"包括"有一個類定義的模塊。當(dāng)一個類包括一個模塊時,所有的模塊中的方法和常數(shù)都成為類的實(shí)例方法和常數(shù)。例如,假定上面定義的Formula模塊作為一個mixin被添加到Rectangle類。為此,你要使用"include"關(guān)鍵字:

    class?Rectangle
    include?Formulas
    end
    ?

      現(xiàn)在,Rectangle的實(shí)例具有了它們可以使用的force和energy方法,并且Rectangle類能夠訪問常數(shù)ACCELERATION和LIGHTSPEED:

    irb(main):044:0>?class?Rectangle
    irb(main):045:1>?include?Formulas
    irb(main):046:1>?end
    =>?Rectangle
    irb(main):047:0>?Rectangle.new(4,5).force(10)
    =>?98.0
    irb(main):048:0>?Rectangle::LIGHTSPEED
    =>?299792458?

      這意味著,mixin給Ruby中的類帶來了許多多重繼承的優(yōu)點(diǎn),卻避開了多重繼承中存在的問題。

      十一、 控制流

      象所有的程序語言一樣,Ruby提供了一組控制流命令,這包括條件語句(if/else結(jié)構(gòu)),case語句和循環(huán)語句(do,while和for),還提供了象Ada和Java等語言中的異常處理能力。下面是Ruby中的一些控制流語句的示例:

    ifarea?>?100
    "big"
    else
    "small"
    end
    case?height
    |?when?1
    |?print?"stubby\n"
    |?when?2..10?#高度范圍為2~10
    |?print?"short\n"
    |?when?10..20?#高度范圍為2~10
    |?print?"tall\n"
    |?end
    aRect?=?Rectangle.new(4,6)
    while?aRect.area?<?100?and?aRect.height?<?10
    aRect.doubleSize()
    end
    for?element?in?[2,?9.8,?"some?string",?Math::PI]?#遍歷對象集合
    print?"The?type?is:?"?+?element.type.to_s?+?"\n&"
    end?


      控制語句通常非常直接,但是如前面的case語句和for循環(huán)語句所顯示的,Ruby借鑒了其它一些語言特征和普通的面向?qū)ο蟮奶匦浴?br />異常處理類似于Java中的"try...catch...finally"語句。在Ruby中,它們更改為"begin...rescue...ensure"語句:

    begin
    #實(shí)現(xiàn)一些事情
    rescue
    ##處理錯誤
    ensure
    #做一些清理工作,如關(guān)閉一個打開的文件等
    end?

      為了在你的代碼中引發(fā)一個異常,你只需要簡單地調(diào)用raise方法:

    if?area?<?0
    raise
    else?if?area?>?0?and?area?<?10
    raise?"Rectangle?too?small"
    else?if?area?>?100
    raise?TooBigException?"Rectangle?too?big"
    end?

      第一個raise調(diào)用創(chuàng)建一個RuntimeError。第二個raise創(chuàng)建一個顯示一條消息的RuntimeError。最后一個raise調(diào)用一個TooBigException的新實(shí)例(由它創(chuàng)建一個粗略定義的錯誤),并設(shè)置它的適當(dāng)消息。

      一個Ruby小程序

      為了幫助你更好地掌握Ruby的基礎(chǔ)知識,我在本文中提供了一個小程序供你學(xué)習(xí)之用。為了使這個程序工作,你可以下載并把該文件解壓到你的文件系統(tǒng)。之后,它將創(chuàng)建一個examples文件夾,在這個目錄下共有9個Ruby代碼文件(.rb文件)。本文中的代碼就包含在這些文件中。另外,你會找到一個testShapes.rb文件,它是測試Ruby的Rectangle,Square和Circle對象的主文件。只需簡單地打開一個命令提示符并運(yùn)行testShapes.rb文件即可。

      你將注意到,在testShapes.rb和另外一些代碼中,文件以"require"再加上一個文件名開頭(象rectangle.rb)。這是在你的Ruby程序中加入或使用來自于其它文件代碼的Ruby標(biāo)志。

      總結(jié)

      Ruby能否接管Java或C#而成為業(yè)界領(lǐng)先的現(xiàn)代軟件開發(fā)語言?盡管Ruby可能變得十分流行,但我對此仍抱有懷疑態(tài)度。作為一名在業(yè)界摸爬滾打多年的專業(yè)人員,我對其偶然性并不感到驚訝,但我還是比較注重實(shí)效的。例如,我發(fā)現(xiàn)Smalltalk是一種比Java優(yōu)越的高級語言,然而優(yōu)越并不會總會贏。現(xiàn)代語言背后總存在大量的技術(shù)和市場方面的支持。庫,開發(fā)工具包,框架,架構(gòu),連接器,適配器,支持平臺,服務(wù),知識庫,能干的開發(fā)團(tuán)隊(duì),等等,都會被配置到位以支持象Java這樣的程序語言。并且,無論你喜歡與否,Sun和Microsoft主宰下的市場在未來一段時間內(nèi)肯定還是開發(fā)環(huán)境的勝者。

      那么,為什么還要探討Ruby呢?作為一種Perl或Python腳本語言的代替(這正是它的最初目的)或快速原型開發(fā)工具,Ruby可能特別有用。一些人也已經(jīng)看到了Ruby的威力,并且開始把Ruby作為一種偉大的方法進(jìn)行編程教學(xué)。根據(jù)我的本地Ruby用戶組的成員提供的信息,有一些人正在把它應(yīng)用于測試生產(chǎn)系統(tǒng)。不僅如此,我將邀請你,就象Bruce Tate和Dave Thomas邀請我一樣來探討一下這種語言的力量和美麗之處。即使Ruby不會得到廣泛使用,但是隨著人們對它的逐漸認(rèn)識和試用,它一定會找到適應(yīng)自己的編程環(huán)境。



    posted on 2006-06-19 12:04 nbt 閱讀(333) 評論(0)  編輯  收藏 所屬分類: Ruby On Railse技術(shù)

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java技術(shù)網(wǎng)站

    友情鏈接

    國內(nèi)一些開源網(wǎng)站

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人精品久久亚洲| 亚洲性日韩精品一区二区三区| 黑人大战亚洲人精品一区 | 午夜dj在线观看免费视频| 在线观看亚洲AV日韩A∨| 成人性生交大片免费看午夜a | 亚洲国产另类久久久精品黑人| 黄色短视频免费看| 亚洲人成在线观看| 在线观看免费高清视频| 免费在线观看亚洲| 亚洲国产无套无码av电影| 99在线观看视频免费| 亚洲精品视频在线| 在线观看永久免费| 亚洲视频在线观看不卡| 成人av免费电影| 国产精品午夜免费观看网站| 亚洲av无码乱码国产精品fc2| 曰曰鲁夜夜免费播放视频 | 亚洲人成色77777在线观看| 在线观看免费高清视频| 国产精品小视频免费无限app| 日韩亚洲Av人人夜夜澡人人爽 | 国产精品免费看久久久香蕉 | 国产自产拍精品视频免费看| 99久久免费国产精品特黄| 免费国产在线观看老王影院| 一级毛片正片免费视频手机看| 亚洲精品免费在线观看| 免费a级毛片无码av| 久久w5ww成w人免费| 亚洲一级片免费看| 亚洲成aⅴ人片久青草影院按摩| 亚洲s色大片在线观看| 吃奶摸下高潮60分钟免费视频| 91网站免费观看| 无码专区AAAAAA免费视频| 免费精品国产自产拍在线观看| 亚洲人成电影在线观看青青| 国产V亚洲V天堂A无码|