Main Content

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

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

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

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

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

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

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

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

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

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

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

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

classdef MyClass
   ...
   methods
      function objPkgClass = PkgName.PkgClass(objMyclass)
         ...
      end
   end
end

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

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

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

A(1) = myobj;

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

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

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

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

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

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

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

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

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

関連するトピック