【#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だとこうは呼ばないのか??)を意識した書き方ができて、今日は満足