• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    沒有Rails Java程序員如何使用Ruby(1)

    發布: 2007-6-11 15:32 | 作者: seanhe | 來源: | 查看: 28次 | 進入軟件測試論壇討論

    領測軟件測試網

    一、引言

    Ruby on Rails僅是使Ruby成為偉大的一個因素,這就象EJB僅是Java企業平臺的一個組成部分一樣。本文將帶你一同討論,作為一名Java開發者,僅利用Ruby自身所能夠實現的功能。

    首先讓我先澄清一些問題。第一,這不是一篇關于Ruby on Rails的文章。如果你想了解Rails,那么每周都出版新的文章和博客來頌揚這種令人激動的框架及其各種特征。第二,本文并非在預告,在目前出現一些更好的語言、工具和框架(如Ruby on Rails)時,Java平臺即將崩潰。因此,本文與最近有關Ruby的主題并無多大關系。

    別誤會我-在我看來,Rails還是相當絕妙的!它是如此驚人地有力以致明顯地影響了Web開發的許多方面。我的唯一看法是,有更多的關于Ruby而不是Rails的東西,特別是當從一個Java開發者的角度來看問題時。Rails的特長是網站開發;然而,我發現自己在構建網站時并沒有經常使用這種技術。我所構建的大多數網站主要使用了Struts,Tapestry或其它一些技術。當我利用Ruby時,我僅把它作為開發實踐的一部分來使用。因此,在本文中我將討論,如果你主要是一位Java開發者,那么如何用Ruby來進行開發。

    二、初步感覺

    Ruby的語法與Java語言存在明顯區別。首先,Ruby沒有括號或分號,并且它的類型完全是可選的。一些人可能說Ruby的語法相當精煉,并且它的目的之一就是用短命令編寫簡明的代碼。

    通過比較實現一個功能相對完善的類你就可以體會到這一點,在本文中我們先用Java語言定義它,然后再用Ruby來實現。本文中我先使用兩個類:Word和Definition。在圖1的簡單類圖中,你可以看到兩個類共享一些關系:

    ◆一個Word擁有一個同義詞(也稱作Word實例)集合。

    ◆一個Word還可以擁有一個Definition集合。

    ◆一個Definition有一個到Word的聚合關聯(aggregation association)。

    沒有Rails Java<STRONG><A href=程序員如何使用Ruby" src="http://www.kjueaiud.com/attachments/2007/06/8_200706111508311.gif" border=0>

    圖1:一本含有單詞及其定義的簡單字典的類圖

    三、在Java語言中的類定義

    在列表1中,我用Java語言定義了Word類。請注意,我必須實現我的集合中Definition和同義詞的關系確認。這是必要的,因為在這個示例中,Definition的創建不需要用一個Word關系來初始化,而Word也可以在不使用Definition初始化的情況下定義。

    列表1.用Java語言實現的一個類Word

    package com.vanward.dictionary;

    import java.util.ArrayList;

    import java.util.Collection;

    import java.util.Iterator;

    public class Word {

     private String spelling;

     private String partOfSpeech;

     private Collection definitions;

     private Collection synonyms;

     public Word(String spelling, String partOfSpeech) {

    this.spelling = spelling;

    this.partOfSpeech = partOfSpeech;

    this.definitions = new ArrayList();

    this.synonyms = new ArrayList();

     }

     public Word(String spelling, String partOfSpeech, Collection definitions) {

    this(spelling, partOfSpeech);

    if(definitions != null){

     for(Iterator iter = definitions.iterator(); iter.hasNext();){

    this.validateRelationship((Definition)iter.next());

     }

     this.definitions = definitions;

    }

     }

     public Word(String spelling, String partOfSpeech, Collection definitions, Collection

    synonyms) {

    this(spelling, partOfSpeech, definitions);

    if(synonyms != null){

     this.synonyms = synonyms;

    }

     }

     private void validateRelationship(Definition def){

    if(def.getWord() == null || def.getWord() != this){

     def.setWord(this);

    }

     }

     public Collection getDefinitions() {

    return definitions;

     }

     public void addDefinition(Definition definition) {

    this.validateRelationship(definition);

    this.definitions.add(definition);

     }

     public String getPartOfSpeech() {

    return partOfSpeech;

     }

     public void setPartOfSpeech(String partOfSpeech) {

    this.partOfSpeech = partOfSpeech;

     }

     public String getSpelling() {

    return spelling;

     }

     public void setSpelling(String spelling) {

    this.spelling = spelling;

     }

     public Collection getSynonyms() {

    return synonyms;

     }

     public void addSynonym(Word synonym) {

    this.synonyms.add(synonym);

     }

    }

    列表1中的Word類相當簡單-它是一個JavaBean,它有一個構造器鏈允許用戶用各種屬性集來創建Word。還要注意,它的synonyms和definitions屬性都被設置為只讀的(也就是說,它們沒有相應的setter方法)。你只能為一個同義詞添加一個Definition或另一個Word實例。

    在列表2中,你將看到相關的Definition類,它類似于Word類-它的exampleSentences屬性也沒有一個相應的set()方法:

    列表2.用Java語言實現的一個Definition類

    package com.vanward.dictionary;

    import java.util.Collection;

    public class Definition {

     private Word word;

     private String definition;

     private Collection exampleSentences;

     public Definition(String definition){

    this.definition = definition;

    this.exampleSentences = new ArrayList();

     }

     public Definition(String definition, Word word) {

    this(definition);

    this.word = word;

     }

     public Definition(String definition, Word word,Collection exampleSentences) {

    this(definition, word);

    if(exampleSentences != null){

     this.exampleSentences = exampleSentences;

    }

     }

     public String getDefinition() {

    return definition;

     }

     public void setDefinition(String definition) {

    this.definition = definition;

     }

     public Collection getExampleSentences() {

    return exampleSentences;

     }

     public void addExampleSentence(String exampleSentence) {

    this.exampleSentences.add(exampleSentence);

     }

     public Word getWord() {

    return word;

     }

     public void setWord(Word word) {

    this.word = word;

     }

    }

    四、在Ruby中定義類

    在列表3中,你可以看見以Ruby定義的兩個相同的類;然而,列表3看上去與上面相當不同,對不對?

    列表3.用Ruby定義的兩個與前面功能相同的類

    module Dictionary

    class Word

     attr_reader :spelling, :part_of_speech, :definitions, :synonyms

     attr_writer :spelling, :part_of_speech

     def initialize(spelling, part_of_speech, definitions = [], synonyms = [])

     @spelling = spelling

     @part_of_speech = part_of_speech

     definitions.each{ |idef| idef.word = self}

     @definitions = definitions

     @synonyms = synonyms

    end

    def add_definition(definition)

     definition.word = self if definition.word != self

     @definitions << definition

    end

    def add_synonym(synonym)

     @synonyms << synonym

    end

    end

    class Definition

     attr_reader :definition, :word, :example_sentences

     attr_writer :definition, :word

     def initialize(definition, word = nil, example_sentences = [])

     @definition = definition

     @word = word

     @example_sentences = example_sentences

    end

    end

    end


    共5頁: 1 [2] [3] [4] [5] 下一頁

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>