継承およびポリモーフィズム

継承およびポリモーフィズムとは、オブジェクト指向言語の 2 つの定義特性のことです。継承はオブジェクト クラスの機能で、親クラスの操作とプロパティを継承します。ポリモーフィズムは単一名称の操作の機能で、異なるオブジェクト クラスの異なる値を操作します。ここでは、3ds Max および MAXScript におけるこれらの使用方法について説明します。

まず最初に、両方の特性はあらゆる値に対する明確に定義されたタイプあるいはクラスを持つシステムに左右されます。値にクラスを割り当てると、取り扱える値をすべてグループ化し、各グループでは値に対する操作およびプロパティが明確に定義されます。標準の C++ のような言語では、クラスはコンパイル時にしか明確にはなりません。Smalltalk および MAXScript のような言語では、クラスは実際のランタイム エンティティとなり、あらゆる値にそれがどのクラスであるかを示すランタイム クラス タグが与えられます。MAXScript でタイプ自由変数を使用できるのは主にこの理由によります。変数の値のクラスを示すタグを実行時に参照すると、クラスを判定することができます。

いったんオブジェクト クラスにグループ分けすると、グループ自体を階層に整理することが可能です。実世界でも同様です。たとえば、生物学的な階層では、動物、植物、哺乳動物、脊椎動物、人間、大人、子供などに階層的に整理されています。オブジェクト指向言語では、このような階層に値クラスを整理する方法が提供されており、現実の世界での階層と同様に、階層内のクラスではその親クラスのすべての操作およびプロパティを共有しています。オブジェクト指向言語では、この共有を継承と呼び、1 つのクラスに対して定義された操作およびプロパティは、その下のすべてのクラスに自動的に継承されることを意味します。

Box クラスの階層例を次に示します。

Value
  MAXWrapper
    Node
      GeometryClass
        Box

クラスに対して多様な特徴が定義されており、それぞれ下のクラスに継承されます。たとえば、 classOf() メソッドがクラス Value に対して定義されている場合、その継承階層にあるクラス Box はこのメソッドを継承します。したがって、この場合ボックス オブジェクトを classOf() メソッドへのパラメータとして指定することができます。

MAXScript クラス階層では、MAXScript 内のすべてのビルトイン クラスが階層で示されているので、クラスごとにその特徴を継承したクラスがわかるようになっています。階層のいくつかは、内部的にはオブジェクト指向の 3ds Max 自体の中で構成されています。そのオブジェクト、モディファイヤ、コントローラなど、すべて明確に定義された継承階層内で整理されます。

いったんオブジェクトをクラスにグループ分けすると、各クラスのオブジェクト上で実施できる操作に対する記号を簡略化することができます。この代表的な例は、数学計算にあります。記号演算子 '+'、'-'、'*' および '/' は、多くのタイプ (整数、実数、複素数、ベクトル、行列など) 間で共有され、適用されるタイプによって最適な処理を実行します。単一名称の操作が異なるタイプで動作するこの能力は、ポリモーフィズム (多様性) と呼ばれています。オブジェクト指向言語では、異なるクラスでの異なるメソッドや演算子に対して同じ名前を使用することができます。適用される適切なメソッドは、そのメソッドで使用される値のクラスに基づいて自動的に特定されます。

MAXScript では、すべての算術演算子およびメソッドはこの意味でポリモーフィズムであり、標準の数学規約を反映しています。3ds Max の使用についての好例が random() メソッドです。このメソッドは 2 つの引数をとり、その引数間でランダムに値を生成します。したがって、このメソッドに実数を与えた場合、メソッドは実数を返します。3 次元座標を与えた場合には、コーナーを定義するボックス内で座標をランダムに提供します。メソッドに Quaternion を与えると、その Quaternion 間でランダムな回転を返します。

さらに、3ds Max オブジェクトで機能するメソッドは、すべてその階層内ではポリモーフィズムです。したがって、移動、非表示および選択はすべてのタイプのシーン オブジェクトで機能し、時間スケーリングおよび挿入はすべての種類のコントローラで機能します。