2016-01-06 136 views
0

我仍然試圖圍繞着OOP Ruby的頭部。假設我正在嘗試創建一個簡單的Hangman遊戲,並且我想從文本文件中選擇一個隨機單詞。到目前爲止,我在代碼塊中有2個例子。第一個示例顯示了Word和Game類,其中Word類生成隨機單詞,Game類在initialize方法中調用Word類。第二個例子只有一個Game類,Game類自己生成隨機單詞。我的問題是,遊戲類負責生成隨機詞還是使用Word類?紅寶石OOP類職責

# First Example 
module Hangman 

    class Word 
    def self.words 
     File.readlines("../words.txt") 
    end 

    def self.random 
     words.select { |word| word.length > 4 && word.length < 13 }.sample 
    end 
    end 

    class Game 
    attr_reader :random_word 

    def initialize 
     @random_word = Hangman::Word.random 
    end 
    end 

end 

# Second Example 
module Hangman 

    class Game 
    attr_reader :words, :random_word 

    def initialize 
     @words = File.readlines("../words.txt") 
     @random_word = @words.select { |word| word.length > 4 && word.length < 13 }.sample 
    end 
    end 

end 

回答

0

一般情況取決於。

對於這個特定的情況,我認爲大多數人會同意在Word和遊戲之間拆分結構是一個好主意。

Word是一個不錯的小可測試片,所以它確實值得擁有它自己的類。

它也可以在需要隨機單詞的遊戲中重複使用。

我認爲如果你重寫單詞使其具有初始化方法,這會變得更清晰。然後遊戲簡單地調用Word.new(...)來獲得一個新的隨機單詞。

想象一下,如果有一個叫做「單詞」的寶石已經做到了這一切。你會很高興添加寶石,並說完成交易。那麼這是一個簡單的方法來告訴你分工很好,即使沒有這樣的寶石存在。

順便說一下,一旦你認爲這應該是一個單獨的類,你可能想檢查,看看有人已經爲你做了。在這種情況下,有一個寶石隨機詞。

這些參數對於單詞初始化會是什麼?好了的話,技能水平,等等等等

class Word 
    def self.words 
    @words ||= File.readlines("../words.txt") 
    end 

    def initialize(min_length, max_length) 
    Word.words.select do |word| 
     word.length > length && word.length < max_length 
    end.sample 
    end 
end 
+0

一個很好的文章https://atomicobject.com/resources/oo-programming/oo-quality –

+0

太好了,謝謝您的答覆的長度。我會繼續前進,並保留Word課程。更有意義。 – mmcdevi1