オブジェクトと属性

外部からオブジェクトとやり取りできるように、オブジェクトの状態を及び操作するためのメソッドを定義する。オブジェクトの外部から見える側面を属性 (attribute) と呼びます。

class Song
def name
  @name
end
def artist
  @artist
end
def duration
  @duration
end
end

この種のアクセサメソッドは頻繁に定義されるため、Rubyでは便利なショットカットを用意しています。

class Song
attr_reader :name, :artist, :duration
end

ここでは、:artist は変数 artist の名前を意味し、コロンなしの artist は変数 artist の値を意味します。この例では、アクセサメソッドに、name, artist, durationという名前を付けました。対応するインスタンス変数@name, @artist, @duration は自動的に生成されます。

属性をオブジェクトの外部から設定する場合、Ruby では、等号で終わる名前を持つメソッドを作成することで、実現しています。

class Song

def duration=(new_duration)


@duration = new_duration

end
end

song = Song.new(”さくら”, “桃太郎”, 120)
song.duration → 120
song.duration = 123 # 属性に更新された値を設定する
song.duration → 123

song.duration = 123 という代入文は、song オブジェクトの duration= メソッドを呼び出し、引数として 123 を渡します。

ここでも、Rubyは、シンプルな属性設定メソッドを作成するためのショットカットを用意しています。

class Song

attr_writer :duration  
end

song = Song.new(”さくら”, “桃太郎”, 120)
song.duration = 123

クラスを設計する際には、その内部状態と、内部状態が外部(つまりクラスの利用者)にどのように見えるかを決定します。内部状態はインスタンス変数として保持されます。外部状態は、属性と呼ばれるメソッドを介して外部に公開します。クラス実行可能なその他のアクション、つまり内部状態を外部に見せるという以外のアクションが通常のメソッドです。

コメント

(必須)

(必須)
(メールアドレスは公開されません)