みなさん、こんにちは。
今回の記事では、オブジェクト指向の根幹に迫っていこうともいます。概念的なことなので退屈かもしれませんが、しっかり押さえておくことでオブジェクト指向プログラミング言語への理解が進むと思います。
オブジェクト指向にはいくつかの特徴があるのですが、今回取り上げる用語としては「ポリモーフィズム」「ダックタイピング」です。
これらの用語は一般的には使われない用語なので、初学者の方は知らない方も多いかもしれませんが、大切な用語なのでここで理解しておきましょう。
また、世の中にはオブジェクト指向のプログラミング言語が多数あります。それらに共通する特徴を押さえることができるので、少し難しいかもしれませんが踏ん張っていきましょう!
ポリモーフィズムとは?
ポリモーフィズムという言葉の意味は、多態性、多様性などです。多態性より多様性の方が一般的な言葉なので、イメージしやすいかもしれません。
「たくさんの種類がある」のようなイメージでしょうか。
ITの世界でポリモーフィズムを簡単に言うと、「同じメソッド名が異なる複数のオブジェクトに属す」ということです。
同じメソッド名でも、それぞれのオブジェクトによって結果が変化します。
やはり言葉だけでは限界があるので、下のコードを見てみてください。
このコードでは、「sliceメソッド」を呼び出しています。それぞれ、String・Arrayクラスのオブジェクトなのですが、同名のメソッドを実行できています。
引数に指定した文字列・配列の要素をそれぞれ参照するメソッドです。
この時私たちは、「Stringクラスのオブジェクトがsliceメソッドを呼び出している」とか「Arrayクラスのオブジェクトがsliceメソッドを呼び出しているな」などと意識して使っているわけではありませんよね。
しかし、呼び出し先に応じて適切なメソッドを実行しています。
これを「ポリモーフィズム」と呼びます。
ダックタイピングとは?
次は、ダックタイピングですね。
ダックタイピングはある格言から、「アヒルのように歩きアヒルのように鳴くものはアヒルに違いない」ということです。
これをオプジェクト指向の考えに当てはめて考えると、
アヒルのように歩き・アヒルのように鳴くもの=オブジェクトがどのようなメソッドを持つか
で
アヒルに違いない=そのオブジェクトがどのような特徴があるか
が決定するということです。
どのクラスに属しているオブジェクトなのかということは意識しません。
例えば、hashクラスと配列クラスと異なるクラスのオブジェクトを処理するときを考える。以下のコードを見てください。
このコードはなんてことないコードですが、それぞれ配列とhashクラスのオブジェクトですが、同じメソッドを実行できます。
これは、メソッド側からすると配列でもハッシュでも変わらない処理になりますよね。
このようなことをダックタイピングと言います。
Rubyはデータ型がなく、全てをオブジェクトとして捉えるためこのようなことができるのです。
そのため、実行するまでは呼び出されるメソッドの正誤がわからないです。
実際に実行することで初めて、呼び出されたメソッドが実行可能か不能かが判明するため、バグを見つけにくいというデメリットもあります。
しかしそれを差し置いても、データとロジックを分割できるメリットは大きいと思います。
まとめ
冒頭でも述べましたが、今回のダックタイピングやポリモーフィズムはRubyだけでなく、オブジェクト指向言語に共通する概念なので、早いうちに理解しておくことが良いと思います。
最初は、何が何やらわからないという方も多いかもしれませんが、長い時間をかけて試行錯誤「ポリモーフィズムってこういうことかな?」と考えを巡らすことで、次第にわかってくると思います。
また概念だけを理解したからといって、実際のプログラムに実装できるかは、また別問題だと思うのでそこは練習が必要になるでしょう。
先が長いと思う方も、ここは踏ん張っていきましょう!今回も読んでいただきありがとうございました。
コメントを残す