Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

【#100DaysOfCode】Day5「作りながら学ぶRuby入門」 クラス~モジュールの結合度~

引き続き「作りながら学ぶRuby入門」に取り組む。
Ruby楽にかけて楽しい!!
あと早く蔵書管理アプリ作りたい

Day5

・第8章:蔵書データをクラスにしよう

クラスに操作を追加:書式をつけて蔵書データを出力する

# 操作を追加: 書式をつけて蔵書データを出力
# 【モジュールの結合度が違う!!】 
#   ----> ex802.rbでは801に対し、「蔵書データにどんんな項目があるのか」
#        という情報をBookInfoクラスの側だけが持っていれば良い
#        インスタンスを使う側では、その情報はなくていい。

require 'date'

# 蔵書1冊分の蔵書データのクラスを作る
class BookInfo
    # BookInfoクラスのインスタンスを初期化する
    def initialize( title, author, pages, publish_date )
        @title = title
        @author = author
        @pages = pages
        @publish_date = publish_date
    end

    # 最初に検討する属性に対するアクセサを提供する
    attr_accessor :title, :author, :pages, :publish_date

    # BookInfoクラスのインスタンスの文字列表現を返す
    def to_s
        "#@title, #@author, #@pages, #@publish_date"
    end


    # 蔵書データに書式をつけて出力する操作を追加する
    # 項目の区切り文字を引数に指定することができる
    # 引数を省略した場合は、改行を区切り文字にする

    def toFormattedString ( sep = "\n")
        "書籍名: #{@title}#{sep}著者名: #{@author}#{sep}ページ数: #{@pages}ページ#{sep}出版日: #{@publish_date}#{sep}"
    end
end

# BookInfoクラスのインスタンスを作成し、book_infoという名前をつける
book_info = BookInfo.new(
    "実践アジャイル ソフトウェア開発法とプロジェクト管理",
    "山田 正樹",
    248,
    Date.new(2005, 1, 25 )
)

# book_infoのデータの文字列表現を得る
puts book_info.to_s
puts
# book_infoの書式をつけて出力する操作を使ってみる
puts book_info.toFormattedString
puts book_info.toFormattedString("☆☆")


ふざけて☆マークを区切りとして、挿入した \(☆へ☆)/

* モジュールの結合度に注目した

上記のコードは、「属性情報」を持っているモジュールが局所的担っている
== 「蔵書データがどんな項目を持っているか」は、BookInfoクラス側だけが持っている
== 表示モジュールは、 メソッド(.toFormattedString)で呼び出せばいい

C言語で書いていた時の、モジュールが疎結合の状態
修正しやすい

モジュールの結合度(Rubyだとこうは呼ばないのか??)を意識した書き方ができて、今日は満足