【用語一言説明コーナー】ポリモーフィズム(多態性)をRubyで説明します

オブジェクト指向の言語で何かと「ポリモーフィズム」と言う考えが大事だと言われるけど、「一体何なの?」と思ったのでまとめておきます。

あなたはポリモーフィズムを一言で説明できますか?

ポリモーフィズムを一言で説明すると、こんな感じです。

ポリモーフィズムとは?

多態性とも言われます。

「同じメソッドや関数でも継承したクラスによって異なる振る舞いを行う」ことを指します。

自分
自分

うん。これだけだと意味わかんないですよね??


ということで実際にRubyのコードを用いて説明していきます。

今回は「Ningen」「Baby」「Adult」という3つのクラスを用意しました。
「Baby」と「Adult」は「Ningen」という親クラスを継承しています。

#Ningenクラス(=親クラス)を定義
class Ningen
  attr_accessor :name

  def hello(voice='')
    "#{self.name}: #{voice}"
  end
end

#Babyクラス(=子クラス)を定義
class Baby < Ningen
  def hello(voice='バブー')
    super
  end
end

#Adultクラス(=子クラス)を定義
class Adult < Ningen 
  def hello (voice='やあ!')
    super
  end
end

#babyインスタンスを生成
baby = Baby.new
baby.name = '赤ちゃん'

#adultインスタンスを生成
adult = Adult.new
adult.name = '大人'

#helloメソッドを実行
baby.hello     実行結果=>赤ちゃん: バブー
adult.hello     実行結果=>大人:やあ!

ここで大事なのが、

3つのクラス全て同じ「hello」というメソッドを持つのに、メソッド実行結果が異なることです。

<実行結果>
baby.hello→赤ちゃん: バブー
adult.hello→大人:やあ!


これがポリモーフィズムです。

Rubyだけでなく、Pythonなどのオブジェクト指向の言語では非常に重要なキーワードなので、プログラマーなら知っておく必要がありますね!

参考文献

RPGゲームのキャラによって、攻撃パターンが違うという例をとって分かり易く説明してくれている記事です。

またポリモーフィズムをいつ使うのか書いているので、参考にしてみてください。

プログラマー1年生がポリモーフィズムについて学んだのでRPGで説明する。 – Qiita

※この記事は2018年01月15日に投稿された記事です。 オブジェクト指向プログラムのポリモーフィズムについて学んだのでまとめてみたいと思います。 以下を参考にしました。 ポリモーフィズムとはオブジェクト指向プログラミングの概念の一つです。 日本語では多態性・多様性などと訳されます。 簡単に言うと同じ名前のメソッドを複数のクラスで使用できるようにし、そのメソッドを通して、暗黙的に複数のインスタンスの動作を切り替えることができるようにします。 例えば、JavaScriptでは以下のようなコードを書くことができます。 3つキャラクタークラスがあるとします。 キャラクター達はそれぞれメソッドを持っています。 上記のクラスのインスタンスを配列に格納し順にattack() メソッドを実行してみます。 これを静的型付け言語(C#)で書いてみるとどうでしょうか。 動きません。まず、コンパイルが通らない。 CS1061: Type ‘object’ does not contain a definition for ‘Attack’ and no extension method ‘Attack’ of type ‘object’ could be found.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です