• 締切済み

【プログラム】オブジェクト指向ポリモーフィズムとは

一つの同じプログラム(モジュール)をあらゆる場所で呼び出して使いまわすメリットは そのプログラムを何かしら変更する時、何回も何回もいろいろな場所を変更しなくても 一つ変更すればそのプログラムを呼び出している部分 全てに反映されるというところですよね? 逆に、一つの同じプログラムを使いまわすデメリットは、 あらゆる場所で呼び出してる故に、少しでも変更があれば そのプログラムを呼び出している部分すべてに影響を与えてしまい イレギュラーな処理を入れにくいというところですよね? このデメリットをうまくなくしたのが ポリモーフィズムということでいいんですか? 処理を細分化して、プログラムを使いまわすことは使いまわすけども Aの処理 → B-1の処理 → Cの処理 Aの処理 → B-2の処理 → Cの処理 のようにして、差し替え可能な状態にしておき イレギュラーが発生しても ある程度まるごと とっかえなくてもいいようにしておく。 こういうことがポリモーフィズムでということでいいんでしょうか?

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

考え方の出発点が違う。「処理」を中心に考えてるうちは、手続き型となにも変わらない。関数ごとにファイル分けするだけでも、プログラムの使い回しもすげ替えもいくらでも出来るが、ポリモーフィズムではない。 オブジェクト指向は、最初に「オブジェクト:情報操作における実体はつまりデータ」ありきで、構築していく。 オブジェクト指向のポリモーフィズムは、スーパークラス(またはインターフェース型)のメソッド呼び出しで、その変数の中身(オブジェクトの実体であるサブクラスのデータ)によって、処理が変わることをいう。 物品管理を例に考えると  スーパークラス「物品情報」 > サブクラスとして、「種類A」「種類B」 上位となる「物品情報」クラスには、物品一般に対して行う処理名としてのabstractメソッド(たとえば「収納」)があり、サブクラスで、その種別ごとに、実際にどう操作するか(どこへ格納するかとか、格納前処理があったりとか)を記述。 「物品情報」型変数に、サブクラス型でインスタンスを代入すると、その「物品情報」型で共通のメソッド「収納」呼び出しが可能であり、実際に呼び出すと、実際に格納されていたインスタンスの型によって、処理の実際が異なっている(異なった場所へ収納)。 呼び出し側では、このインスタンスの実際のサブクラス型を考慮せずに、スーパークラス型として扱うだけでよいので、本体記述側が楽になる。 なので、イレギュラー処理というのとは別物。

関連するQ&A