Vol.4 ~クラス~

○ インスタンス変数

ひとつのオブジェクトに複数の情報/データを持つための入れ物

例)
オブジェクト 「本」
インスタンス変数 「タイトル」、「著者名」、「ISBN(管理コード)」

○ インスタンス変数の定義

インスタンス変数の定義はインスタンスの領域に行う。

クラスに変数と同名のインスタンスを定義して、その中に 「@」 をつけて定義する。
これは外部からデータを取得するメソッドで、一般に getter と呼ばれる

続いて、データ設定用のメソッド (setter) を定義する。
メソッド名はインスタンス変数名に等号「=」をつける

例) Book クラスを定義して、各情報のインスタンス変数を定義する

class Book
  # getter
  def author # 著者
    @author
  end
 
  def title #タイトル
    @title
  end
 
  def isbn # ISBN
    @isbn
  end
 
  # setter
  def author=(author)
    @author = author
  end
 
  def title=(title)
    @title = title
  end
 
  def isbn=(isbn)
    @isbn = isbn
  end
end

○ attr_accessor

インスタンス変数の操作には、変数の数だけの getter / setter が必要だが、atter_accessor を使用すれば、1行で済ませることが可能。

class BOOK
  atter_accessor :author, :title, :isbn
end

「:」以降の部分を「シンボル」といい、Symbol クラスのインスタンスである。

>> :author.class
=> Symbol

例)外部ファイル book.rb を読み込み、インスタンス変数に値を設定する。

>> require 'book' # 外部ファイルの読み込み(拡張子不要)
=> true
>> book = Book.new # インスタンス生成
=> #<Book:0x34c5588>
>> book.author = "Hal Edwin Fulton" # 値の設定
=> "Hal Edwin Fulton"
>> book.title = "The Ruby Way" # 値の設定
=> "The Ruby Way"
>> book.author # 値の取得
=> "Hal Edwin Fulton"
>> book.title # 値の取得
=> "The Ruby Way"

○ インスタンスの初期化 ~initialize~

初期化用メソッド 「initialize」 を使えば、インスタンス生成時点にあらかじめデータを設定することが可能。

class Book
  attr_accessor :author, :title, :isbn
 
  def initialize(author, title)
    @author = author
    @title = title
  end
end

メソッド 「initialize」 はインスタンスを生成するためのメソッド「new」の引数を使用して間接的に呼び出される

>> load 'book.rb' # 外部ファイルの再読み込み(拡張子が必要)
=> true
>> book = Book.new("Hal Edwin Fulton","The Ruby Way")
=> #<Book:0x2e79990 @title="The Ruby Way", @author="Hal Edwin Fulton">

○ 名前空間とモジュール

パッケージ :
Java などで利用される手法のひとつ。以下のような利点がある
●同じ役割のクラス・インターフェースを1つのパッケージのまとめることでそのクラス・インターフェースの持つ意味がわかりやすくなる
●同じ名前のクラス・インターフェースが複数ある場合、名前の衝突を避けることができる
●パッケージをしようすることで、クラス・メンバ変数・メソッドコンストラクタにアクセス制限をつけることができる

Ruby ではパッケージという概念が無いので、モジュールやクラスを入れ子に配置して名前空間を形成する。

例) Foo という名前空間にある Bar をいうクラスは、Foo モジュールの中に定義する

module Foo
  class Bar
  end
end

定義した Bar クラスを参照するには、 Foo::Bar のように、名前空間を 「::」 で区切ってあらわす。

クラス 「Foo::Bar」 のソースコードは、「foo」 フォルダ内に 「bar.rb」 という名前で配置/存在する。
ファイル名やディレクトリ名は全て小文字で表記する。

Ruby では、あるクラスが複数のクラスを継承(多重継承)することはできないが、複数のモジュールなら同時に利用可能(Mix-in)。

class クラス名
  include モジュール名
end


自宅サーバーWebRing << 前 |ID=231 |次 >> 乱移動前後5表示サイト一覧