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種類のやり方でオブジェクトを扱えることを意識して、プログラミングするとオブジェクト指向のことが分かってきます。
この記事が気に入ったらサポートをしてみませんか?