最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
MATLAB® は、以下の場合にクラス定義を読み込みます。
インスタンスの作成、定数プロパティへのアクセス、クラスの静的メソッドの呼び出しなど、クラスが最初に参照されたとき。
読み込まれたクラスの定義が変更され、MATLAB がコマンド プロンプトに戻ったとき。
MATLAB パスを変更したために、使用するクラスの定義が変わってしまったとき。変更は、MATLAB がコマンド プロンプトに戻った後に有効になる。
クラスのメタデータにアクセスするときに常時。
MATLAB では、1 つのクラスにつき一度に 1 つの定義しか使用できません。このため、MATLAB は、そのクラスのすべての既存オブジェクトが新しいクラス定義に自動的に準拠するよう更新を試みます。既存のオブジェクトの定義クラスを変更するとき、clear classes
を呼び出してそれらのオブジェクトを削除する必要はありません。
メモ
MATLAB エディター以外のエディターまたは MATLAB Online™ を使用すると、自動更新が遅れる可能性があります。
MATLAB は、既存のオブジェクトを更新するとき基本的な一連のルールに従います。自動更新により生じる結果には以下があります。
既存のオブジェクトが新しいクラス定義に更新されます。
MATLAB がオブジェクトを新しいクラス定義に変換できないか、クラス定義自体にエラーがある場合、エラーになります。
次の例は、具象クラスのインスタンスを作成した後、そのクラスの定義を編集して抽象クラスにすると何が起こるかを示しています。
a = MyClass;
% Edit MyClass to make it Abstract
a
Error using MyClass/display
Cannot update object because the class 'MyClass' is now abstract.
メモ
MATLAB は、クラス定義が変更されてもメタクラス インスタンスを更新しません。クラス定義の更新後に新しいメタクラス データを取得しなければなりません。
MATLAB は、以下の状況を含むクラス定義の変更時に、既存オブジェクトの更新を行います。
ハンドルする値の変更 — 既存のオブジェクトは、異なるオブジェクトを参照する独立ハンドルになります。
列挙型メンバーの追加 — 既存のオブジェクトは、列挙型メンバーの基となる値が変化しても、以前の列挙型メンバーを保持します。
列挙型メンバーの削除 — 削除されたメンバーを使用しない既存のオブジェクトは、以前と同じ列挙型メンバーをもちます。削除されたメンバーを使用する既存のオブジェクトは、削除されたメンバーを列挙型の既定のメンバーで置き換えます。
列挙型ブロックの削除 — 列挙型メンバーは使用されなくなります。
スーパークラス定義の変更 — 変更はそのスーパークラスの階層内のすべてのサブクラスに適用されます。
スーパークラスの追加または削除 — スーパークラスの変更がすべての既存のオブジェクトに適用されます。
以下の操作は既存のオブジェクトを更新しません。
オブジェクトは、オブジェクト表示の呼び出しやプロパティへの割り当てなど、変更が明らかになる方法で参照されない限り更新されません。
更新はインクリメント形式では行われません。更新はクラスの最新バージョンに準拠します。
クラス定義ファイルを削除しても、そのクラスのインスタンスは無効になりません。ただし、そのクラスの既存のオブジェクトでメソッドを呼び出すことはできません。
クラスの更新によりクラス定義が無効になることがあります。そのような場合、エラーが解決されるまでオブジェクトは更新されません。
スーパークラスを追加すると、プロパティまたはメソッドが 2 度定義されることがあります。
サブクラスの 1 つにオブジェクトが存在する場合にそのスーパークラスを Sealed
に変更すると、サブクラス定義が無効になることがあります。
クラスの更新によっては、MATLAB が既存のオブジェクトを、変更されたクラス定義に準拠するように更新できない、という状況が発生します。次のような場合、オブジェクトを削除するまでエラーの原因となります。
enumeration ブロックを非列挙型クラスに追加
クラスを抽象クラスとして再定義
異種混合階層からクラスを削除 (その結果、異種混合配列内の既存のオブジェクトに置き換わる既定のオブジェクトが存在しない)
配列インデックス付けのオーバーロードや連結など、配列の形成動作を制限するためにクラスを更新
subsref
、subsasgn
、cat
、vertcat
または horzcat
メソッドを継承
ハンドル クラスを値クラスとして再定義
更新の後、既存のオブジェクトが新しいクラス定義と互換性がなくなる場合があります。たとえば、新たに追加されたプロパティを有効にするには、コンストラクターの実行が必要な場合があります。
プロパティを削除したり名前を変更すると、そのプロパティのもつデータが失われる場合があります。たとえば、他のオブジェクトへの唯一の参照があるプロパティをクラスから削除すると、そのオブジェクトへの参照がなくなるので MATLAB はそのオブジェクトを削除します。
異種混合クラス階層からクラスを削除すると、異種混合配列要素が無効になる場合があります。この場合、それらの配列要素はその異種混合階層の既定のオブジェクトで置き換えられます。
クラス属性の変更により、既存オブジェクトの動作が変化したり、オブジェクトが無効になったりする場合があります。無効なオブジェクトにアクセスすると、MATLAB はエラーを返します。
変更 | 結果 |
---|---|
| 既存オブジェクトにアクセスすると、エラーが返されます。 |
| 新しく作成されるオブジェクトが既存オブジェクトからではなく、別のスーパークラスから継承される場合があります。 |
| クラスの読み込みは |
| 新しく作成されるオブジェクトが既存オブジェクトとは異なるクラス階層をもつ場合があります。 |
| スーパークラスのリスト内でのクラスの外観と関数 |
| 既存オブジェクトのメソッド ディスパッチングが変更される場合があります。 |
| 既存のサブクラス オブジェクトにアクセスするとエラーが返されます。 |
クラス プロパティの定義を変更すると、MATLAB はその変更をクラス内の既存のオブジェクトに適用します。
変更 | 結果 |
---|---|
プロパティの追加 | クラスの既存のオブジェクトに新しいプロパティが追加されます。プロパティ値が既定値に設定されます (クラス定義に既定値が指定されていない場合は |
プロパティの削除 | クラスの既定のオブジェクトからプロパティが削除されます。削除されたプロパティにアクセスする試みが失敗します。 |
プロパティの既定値の変更 | クラスの既存のオブジェクトには新しい既定値は適用されません。 |
サブクラスとスーパークラス間でのプロパティの移動 | プロパティの定義がスーパークラスとサブクラスの間で動かされても、異なる既定値は適用されません。 |
プロパティの属性値の変更 | クラスの既存のオブジェクトに変更が適用されます。 以下の中間手順が必要な場合があります。
|
クラス メソッドの定義を変更すると、MATLAB は既存のオブジェクト内で影響を受けるクラス メンバーを次のように変更します。
変更 | 結果 |
---|---|
メソッドの追加 | このクラスの既存のオブジェクトで新しいメソッドが呼び出せます。 |
メソッドの変更 | 変更内容が既存のオブジェクトで利用可能になります。 |
メソッドの削除 | 削除されたメソッドを既存のオブジェクトで呼び出せなくなります。 |
メソッド属性値の変更 | クラスの既存のオブジェクトに変更が適用されます。 以下の中間手順が必要な場合があります。
|
変更 | 結果 |
---|---|
イベントの追加 | クラスの既存オブジェクトは新しいイベントをサポートします。 |
イベント名の変更 | 新しいイベント名はクラスの既存のオブジェクトに認識されます。MATLAB は、
|
イベントの削除 | 既存のオブジェクトは削除されたイベントをサポートしなくなります。 |
イベント属性値の変更 | クラスの既存のオブジェクトに変更が適用されます。 以下の中間手順が必要な場合があります。
|