Takunojiのプログラミング・プレイグラウンド(遊び場)

プログラミングのススメとか記載します、今までにやったのは、環境構築、実装方法の説明など、Java, UnrealEngine, Unity, BlenderPython, Discord, OpenCV, TensorFlow(Python), ラズパイ(RPi)などやりました。まだ中途半端ですが。。。

Java Basic オブジェクト指向〜ポリモーフィズム〜

イントロダクション

前回までに作成した、プロパティファイルを参照して…の部分についてちょっと細かく記載します。

つまりは、前回までの補足になります。

http://zenryokuservice.com/wp/2018/06/30/java-basic-gui作成〜まとめ〜/

 

 今回の味噌

プロパティファイルとプログラムの関係です。タイトルの通り、オブジェクト指向の基本的な使い方です。ポリモーフィズムなんて呼ばれています。

この部分を語りたいと思います。

 

ポリモーフィズムとは

はっきり言って「インターフェースの使い方」です。応用範囲が広く最近ではアノテーション「@」なんてのもあります。アノテーションもインターフェースです。後々に記載しようと思います。

まずは基本です。

インターフェース=ポリモーフィズムと言いましたが、まずポリモーフィズムってなによ?と思うでしょう。

ポリモーフィズムは「作成したプログラムを変更しなくても拡張できる仕組み」の事です。

 

インターフェースとの繋がりは?

インターフェースは、カテゴリ別にまとめるためのクラスです。java .utij.Listが分かりやすいと思います。リストインターフェースを実装したクラスはArrayList、LinkedListなどがあります。

これらのクラスは必ずadd、getなどのメソッドを持っています。なぜならばインターフェースを実装すると必ず抽象メソッドをオーバーライドしなくてはいけないからです。この仕組みを使ってプログラムを変更しなくても拡張出来るように作ります。詳細はこちらを…

http://zenryokuservice.com/wp/2018/06/01/java-basic-インターフェース・抽象クラスの作り方/

 

どうやるの? 

今回作成した、処理をサンプルに記載します。

java で作った、画面にはテキストエリアが表示されています。そこに入力があった時に動く処理、イベントハンドラを実装しています。

そして、入力をコマンドとして受け取ります。ここからがポイントです。

  1. コマンドをプロパティファイルのキーと同じものにします。
  2. プロパティのキーから完全クラス名を取得します。
  3. 完全クラス名からインスタンスを生成します。
  4. そのインスタンスからメソッドを起動します。

※詳細はこちら

http://zenryokuservice.com/wp/2018/06/30/java-basic-gui作成〜今までのまとめ〜/

メソッド名が違ったら?

それはありません、なぜならここでインターフェースを使うからです。ちなみに名前が違うとオーバーライドではなくなるので、ビルドエラーが出ます。

 

仕組みは以下になります

上のリンクに詳細を記載しましたが

概要として…インターフェースクラス

  1. CommndIFには抽象メソッドexecuteを定義してます。なのでこれを実装する追加クラスは必ずexecuteメソッドを持っている事になります。
  2. コマンドの実行はcommandIf.execute();で呼び出す様に作っているので、次の手順で追加クラスをいくらでも作れます。(メモリとハードディスクに依存)
  3. CommandIFを実装(implements)したクラスを作成、クラス名は任意。
  4. プロパティファイルに「コマンド名=完全クラス名」を記述詳細はこちらです。http://zenryokuservice.com/wp/2018/06/30/java-network-〜プロパティファイルを読む〜/

 

まとめ

これはポリモーフィズムの触りの部分になります。この技術は比較的古いやり方になりますが、基本です。

今や常識となりつつあるDependency Injectionとか、Javaのリモート呼び出し、違う端末で動いているJavaクラスを呼び出す、などはこの技術の延長にあります。リフレクションも似た様な感じだと思う…確証なし…のですが今回はここまで。

でわでわ。。。