Main Content

保存と読み込みのプロセスの変更

保存と読み込みのプロセスを変更する場合

保存と読み込みのプロセスを変更する主な理由は、クラスの下位互換性と上位互換性のサポートです。以下の場合に、保存と読み込みのプロセス変更を考慮します。

  • クラスの名前の変更

  • プロパティの削除

  • 初期化の順序が重要な場合にハンドル オブジェクトの循環参照を定義する

  • コンストラクターを引数と共に呼び出さなければならないため ConstructOnLoad が使用できない

保存と読み込みのプロセスの変更方法

保存および読み込みのプロセスを変更する最も汎用性の高い手法は、クラスの loadobj メソッドを実装することです。必要に応じて saveobj メソッドも実装します。MATLAB® は、クラスのオブジェクトで save または load が呼び出される際にこれらのメソッドを実行します。

関数 save は、保存操作を実行する前にユーザー クラスの saveobj メソッドを呼び出します。すると、関数 save は、saveobj メソッドが返す値を保存します。saveobj を使用して、変更されたオブジェクトを、またはプロパティ値を含む struct を返すことができます。

load は、オブジェクトの読み込み後にユーザー クラスの loadobj メソッドを呼び出します。関数 load は、loadobj メソッドが返す値をワークスペースに読み込みます。loadobj メソッドは読み込まれるオブジェクトを変更したり、クラスの saveobj メソッドによって保存されたデータからオブジェクトを再構成できます。

saveobj メソッドと loadobj メソッドの実装

保存されるオブジェクトを変更する saveobj メソッドを実装し、続いて loadobj メソッドを実装して、オブジェクトを読み込むときにそのオブジェクトを適切な状態に戻します。

MATLAB ではクラスのオブジェクトの代わりに struct を使用して loadobj メソッドを呼び出すことができるので、loadobj メソッドを Static メソッドとして実装します。

saveobj メソッドは通常のメソッドとして実装します (つまり、このメソッドの呼び出しにはクラスのインスタンスが必要です)。

saveobj メソッドが構造体内のオブジェクト データのみを保存する場合に備え、load がどの loadobj メソッドを呼び出すか判断できるように、MATLAB はオブジェクトのクラス名を保存します。したがって、オブジェクトの読み込みに際してクラスは MATLAB からアクセスできなければなりません。

次のような場合に loadobj メソッドを使用します。

  • オブジェクトが保存されてからクラス定義が変更され、読み込む前にこのオブジェクトを変更する必要がある場合。

  • saveobj メソッドが保存操作時にオブジェクトを変更し、struct にデータを保存した可能性がある場合。loadobj メソッドを実装して、saveobj の出力からオブジェクトを再構成します。

その他の考慮事項

既定の save と load のプロセスを変更するときには、以下の点を忘れないでください。

  • MAT ファイルから任意のプロパティ値を読み込む際にエラーが発生する場合、loadstructloadobj に渡します。struct のフィールド名は、ファイルから抽出されたプロパティ名に対応します。

  • loadobj は、saveobj がない場合や saveobjstruct を返さない場合でも、常に入力として struct を受け入れ、オブジェクトを返さなければなりません。

  • saveobjstruct を返す場合、load は常にその structloadobj に渡します。

  • サブクラスのオブジェクトは、スーパークラスの loadobj メソッドと saveobj メソッドを継承します。したがって、loadobj メソッドまたは saveobj メソッドをサブクラスで定義しないと、MATLAB は継承されたメソッドのみを呼び出します。

    スーパークラスで loadobj メソッドまたは saveobj メソッドを実装する場合は、スーパークラスのメソッドを呼び出す loadobj メソッドまたは saveobj メソッドをサブクラスに実装できます。詳細は、クラス階層からのオブジェクトの保存と読み込みを参照してください。

  • 関数 load は、既定ではコンストラクターを呼び出しません。詳細は、読み込み時のオブジェクトの初期化を参照してください。

  • enum クラスでは、loadobj および saveobj のカスタマイズはサポートされていません。

関連するトピック