チェリー本 7章 その1

クラス

オブジェクト指向プログラミングでは以下のような用語がよく出てくる。

クラスとは
クラスとは一種のデータ型を示している。
オブジェクトの設計図、オブジェクトのひな形と呼ばれていて
rubyではオブジェクトは必ず何かのクラスに属している。
クラスが同じであれば保持している属性(データー項目)、メソッドは原則として同じになる。

オブジェクト、インスタンス、レシーバーとは

クラスはあくまでも設計図
設計図だけ持ってても仕方ないので車の設計図のように
赤い車、黒い車みたいにオブジェクト指向プログラミングでは
クラスからさまざまなオブジェクトが生成されている。

同じクラスから生成されたオブジェクトは
同じメソッド、同じ属性を持つ(データー項目)が
属性の中で保持されるデータ(名前や数値、色は)
そのオブジェクトによって異なる。

#Alice,Rubyさん, 20さいというユーザーのオブジェクトを作成する。
alice = User.new("Alice", "Ruby", 20)

#Bob,Pythonさん, 30さいというユーザーのオブジェクトを作成する。
bob = User.new("Bob", "Python", 30)

p alice.full_name
=>
"Alice Ruby"
p bob.full_name
=>
"Bob Python"

クラスをもとに作られたデータの塊をオブジェクトという
場合によってはインスタンスとも呼ぶ

以下の文は同じ意味

これはUserクラスのオブジェクト
これはUserクラスのインスタンス

メソッドとの関係性を説明する場合 オブジェクトのことをレシーバーとも呼ぶ

以下のコードがあるとする。

user = User.new("alice", "ruby", 20)
user.first_name

このコードは以下のように説明される。

  1. 二行目でUserオブジェクトのfirst_nameメソッドを呼び出している。
  2. ここでのfirst_nameメソッドのレシーバーはuserになる。
  3. レシーバーを英語で書くとreceverと書く「受け取る人」や「受信者」よ呼ぶ

メソッドとメッセージ

メソッドとはオブジェクトが持つ動作や振る舞いのことをメソッドという
なんらかの処理をひとまとめにして名前をつけて何度も再利用できるようにしたものがメソッド

user = User.new("alice", "ruby", 20)
user.first_name

二行目では「userというレシーバーに対してfirst_nameというメッセージを送っている」というイメージ

状態と属性

状態
オブジェクトが保持する
データのことをオブジェクトの状態もしくはステートと呼ぶ。

属性(アトリビュート,プロパティ)
オブジェクトの状態を外部から取得したりもしくは変更したりできる場合がある。
以下のコードは外部から取得したり、変更したりできる。

class User
#読み書きの許可
  attr_accessor :first_name
  #省略
end
user = User.new("Alice", "Ruby", 20)
user.first_name
=>Alice
user.first_name = "ありす"
user.first_name
=>"ありす”

このようにオブジェクトから取得(またはオブジェクトに設定)できる値のことを属性と呼ぶ
多くの場合は属性の名前は名詞になっている