鉄は熱いうちに打てともいうので早速記事を書いてみます。
第一回目のテーマは 【多様性(ポリモルフィズム)】です。
おそらくJavaプログラミングを始めたばかりの人の最初の難関であり、ずっと続く難関です。
僕も完璧には使えません。今の僕はこう理解していますよー!と感じですが書いていきます!
1.多様性とは
Javaにおいて多様性とは「呼び出し側の処理を実態に影響されず、概念だけで構築すること」になります。
「人が電話を用いて通話する」処理を例に説明いたします。
みなさんは電話を用いて通話する際に何を使いますか?
スマホ、ガラケー、固定電話…たくさんの方法があるとおもいます。
ですがどの方法でも大体通話する手順は同じで以下の手順だと思います。
1.電話番号入力画面を表示する
2.電話番号を入力する
3.電話を発信する
4.電話を終了する
※不足部分はあると思いますが、例なので多めに見てください
まさにこのレベルでコーディングすることが多様性です。
呼び出し側(自分)の処理を実態(スマホ、ガラケー)に影響されず、概念(通話する手順)だけで構築することです。
電話をかける際の内部処理は私たちにはわかりません。スマホと固定電話では違う処理で動いているかもしれません。
しかし私たちはその違いを意識することなく通話をすることができます。
これは機械によっての違いは機械側で吸収し、呼び出し部分を共通化しているからです!
2.多様性のメリットとは
メリットはたくさんありますが、私が感じる一番のメリットは「実態を追加しやすい」ことです。
引き続き「人が電話を用いて通話する」処理を例に説明いたします。
みなさんは生まれてから今まで「通話をかける機械」(実態)は何種類使ってきましたか?
私は固定電話 -> ガラケー -> スマホと3種類のものを使ってきました。
これらは私が生まれた直後に全て叩き込まれたわけではなく、時代と共に使う機械(実態)が増えてきました。
しかしそれぞれの機械で通話するという機能を使う際には手順(概念)が同じだったため、
特に違和感なく使う機械(実態)を増やすことができました。
これは「人が電話を用いて通話する」という処理が「通話をかける機械」(実態)に影響されない作りであるからです。
なので新しい「通話をかける機械」を使う際は今までの処理の実態(通話をかける機械)だけ変更するだけで対応できるということです。
3.生活に潜む多様性
ここまでの説明はわかりやすく説明(本人比)するための例ですが、
実際どういう場で使われているかについて説明していきます。
「大乱闘スマッシュブラザーズ」や「ストリートファイター」といったゲームはご存知でしょうか。
最新作も大ヒットを重ねて追加DLCキャラもあり、まだ熱のあるゲームです。
まさにこの追加DLCが多様性のおかげで実現できているシステムなんです。
「DLCキャラを操作する」という処理で考えてみます。今までの例を参考にするなら以下のようになります。
呼び出し側: キャラクター操作管理処理 :コントローラーからボタン情報を受け取りゲームに反映する部分
実態 : キャラクター :マリオ、リンクなどのファイター
概念 : 操作 :上方向キーやAボタンなどのコントローラーでの操作
呼び出し側(キャラクター操作管理処理)の処理を実態(キャラクター)に影響されず、概念(操作)だけで構築すること
呼び出し側(キャラクター操作管理処理)は概念(操作)だけで構築します。
Bボタンが押されたことを実態に伝えることで実態側で処理を実施する…というイメージです。
実態がマリオならファイアーボール、リンクなら弓矢が実行されます。
追加DLCなどでキャラを追加する際も実態(キャラクター)に処理を記載することで
既存のシステム部分をいじる必要がなく追加できるってことです!
4.まとめ
最後にまとめになります。
・多様性とは「呼び出し側の処理を実態に影響されず、概念だけで構築すること」
・メリットは「実態を追加しやすい」
です!
5.おまけ
ちなみに実際の私がコーディングした多様性を意識したコーディングは
「APIを実行」、「複数種類のDBを扱えるシステムのDB実行部分」などですね!
最近はフレームワーク側でよしなにやってくれて自分で作りこむ必要がないのがありがたいですね…
僕は勉強不足で1からコーディングしちゃったのでUT,ITで死ぬ思いしました。
もしまた記事を更新することがあれば次は多様性を意識したJavaコーディングの記事でも掛ければとおもいます。
以上多様性についてでした!