Main Content

オブジェクト コンバーター

コンバーターを実装する理由

あるクラスのオブジェクトを他のクラスのオブジェクトに変換することができます。コンバーター メソッドは、charまたはdoubleなど、変換先のクラスと同じ名前をもちます。コンバーター メソッドを、他のクラスのオーバーロードされたコンストラクター メソッドとして考えます。コンバーターは、それ自体のクラスのインスタンスを受け取り、異なるクラスのオブジェクトを返します。

変換により、次のことが可能になります。

  • 他クラスの定義メソッドの使用

  • 複数のクラス タイプが混在するオブジェクトを含む式の適切な実行の確保

  • 他コンテキストにおけるインスタンス解釈のコントロール

polynomialクラスを定義するとします。polynomialクラスに対してdoubleメソッドを作成すると、double型の入力が必要となる他の関数の呼び出しに使用できます。

p = polynomial(...);dp = double(p); roots(dp)

pは多項式オブジェクトであり、doublepolynomialクラスのメソッドです。rootsは、入力引数が多項式の係数である、標準の MATLAB®関数です。

パッケージ クラスのコンバーター

パッケージで定義されたクラスには、ドット区切りの名前リストで名前を指定できます。後ろの名前がクラスで、前の名前がパッケージです。メソッド名にパッケージ修飾子を使用して変換メソッドに名前を付けます。たとえば、MyClassのオブジェクトをPkgName.PkgClassクラスのオブジェクトに変換する変換メソッドでは、次のメソッド名を使用します。

classdefMyClass...methodsfunctionobjPkgClass = PkgName.PkgClass(objMyclass)...endendend

名前にドットを使用するコンバーター メソッドを別のファイルで定義することはできません。パッケージクラス コンバーターはclassdefファイルで定義してください。

コンバーターと添字を使った代入

次のような、添字を使った代入ステートメントを作成するとします。

A(1) = myobj;

MATLAB は右辺の変数のクラスを左辺の変数のクラスと比較します。クラスが異なる場合、MATLAB は右辺の変数を左辺の変数のクラスに変換するように試みます。この変換を行うために、MATLAB はまず、左辺のクラスと同じ名前をもつ右辺のクラスのメソッドを探します。そういったメソッドはコンバーター メソッドであり、これは他言語で言う型変換操作に似たものです。

右辺のクラスで、右辺のクラスから左辺のクラスへ変換するメソッドが定義されていない場合、MATLAB は左辺のクラス コンストラクターを呼び出して右辺の変数に渡します。

たとえば、以下の割り当てをするものとします。

A(1) = objA;% Object of class ClassAA(2) = objB;% Object of class ClassB

MATLAB はClassAという名前のClassBのメソッドを呼び出そうとします。そのようなコンバーター メソッドが存在しない場合、MATLAB はClassAコンストラクターを呼び出し、objBを引数として渡します。ClassAコンストラクターがobjBを引数として受け取ることができない場合、MATLAB はエラーを返します。

異なるクラスのオブジェクトを保存するには、配列cellを使用します。

異種混合配列のコンバーター

異種混合階層の一部ではないオブジェクトを使用した異種混合配列の形成をサポートするには、ルート スーパークラスにconvertObjectメソッドを実装してください。convertObjectメソッドは、非メンバーのオブジェクトを異種混合階層の有効なメンバーに変換しなければなりません。

convertObjectメソッドの実装の詳細については、matlab.mixin.Heterogeneousを参照してください。

関連するトピック