rubyオブジェクト指向(2)メソッドを呼び出す

★メソッドの呼び出し方法
クラスを使うということは、つまりそのクラスのメソッドを呼び出すことを意味します。クラスの処理はメソッドとして書かれているので、メソッドを呼び出すことがオブジェクト指向プログラミングの第一歩です。

メソッドの呼び出し方には基本的に3種類しかありません。

(1)クラスのインスタンスメソッドを呼び出す(クラスをインスタンス化して使う)
(2)継承関係にある親のメソッドを子インスタンスが呼び出す
(3)クラスメソッドを呼び出す。(インスタンス化せずスタティックに使う)

順番にみていきます。

(1)クラスのインスタンスメソッドを呼び出す(クラスをインスタンス化して使う)

class Foo
  def hoge()
  end 
end
f = Foo.new 
f.hoge() #・・・こういう形でインスタンス化したオブジェクトのメソッドを呼ぶ

これはいわゆるオブジェクトの普通の使い方です。

(2)継承関係にある親のメソッドを子インスタンスが呼び出す

# 伝票クラス(親クラス)
class Denpyo  
  # 作成メソッド
  def create(title) 
    @title = title 
  end
  # 印刷メソッド
  def print 
    puts "This is Denpyo [TITLE]:" + @title
  end 
end
# 伝票クラスを継承した納品書クラス(子クラス)
class Nohinsho < Denpyo  
  # 子クラス用の印刷メソッド
  def print 
    super # superというキーワードで親のprintメソッドが呼べる
    puts "This is Nohinsho" 
  end
end
# 呼び出し:
# (子クラスをインスタンス化)伝票を納品書として作成
nohin = Nohinsho.new 
nohin.create("納品書") #・・・こういう形で親クラスのインスタンスメソッドを呼ぶ 
nohin.print

#結果
This is Denpyo [TITLE]:納品書 This is Nohinsho

継承とは既存のクラスをもとに新しいクラスを作る仕組みのことです。このとき既存のクラスをスーパークラスといい、新しいクラスをサブクラスといいます。スーパークラスを継承してサブクラスを作ると表現します。サブクラスが作られることを派生といいます。
サブクラスではスーパークラスで定義された変数やメソッドをコーディングすることなく持ち合わせています。継承はオブジェクト指向言語の特徴のひとつで、開発効率(コーディングの手間と可読性、再利用性)を上げることを目的に考えられています。
具体的にはclassの定義のときに<を使います。
上の例ではDenpyoクラスを継承したNohinshoはそれぞれprintという伝票印刷メソッドが用意されています。このときこのサブクラスのprintメソッドはスーパークラスのprintメソッドをオーバーライド(塗り替え)しています。一方createメソッドはオーバーライドされていません。継承によりDenpyoクラスのcreateメソッドを実装しているのと同じことになります。

(3)クラスメソッドを呼び出す。(インスタンス化せずスタティックに使う)

class Hoge 
  def self.aaa
    p "aaa() calling" 
  end
end 
Hoge.aaa #・・・こういう形でクラスメソッドを呼ぶ

いわゆる静的なメソッドの呼び出しです。
上の例のようにnewせずにいきなり「オブジェクト名.メソッド名」という形で呼び出せます。静的(=スタティック)という意味は、クラスに固定的に備わっている領域(最初からメモリ上に配置されている)という意味で、他の言語ではstaticというキーワードで構文になっています。
rubyではこのスタティックメソッドを特異メソッドと呼びます。

以上のような3種類のやり方でオブジェクトを扱えることを意識して、プログラミングするとオブジェクト指向のことが分かってきます。

この記事が気に入ったらサポートをしてみませんか?