使用するクラスの種類
値クラスとハンドル クラスの例
ハンドル クラスと値クラスが有効となる状況は異なります。たとえば、値クラスを使用すると MATLAB® 数値クラスと同じ動作をもつ配列クラスを作成できます。
クラスによる多項式の表現とクラスによる構造化データの表現に値クラスの例があります。
ハンドルクラスを使用すると、2 つ以上の関数またはオブジェクトが共有できるオブジェクトを作成できます。ハンドル オブジェクトにより、オブジェクトが互いに参照可能になるので、オブジェクト間のより複雑なやり取りが可能になります。
クラスによる連結リストの実装と連携するクラスの開発にハンドル クラスの例があります。
値クラスを使用する場合
値クラスのオブジェクトは、通常の MATLAB 変数のように動作します。一般に、値クラスはデータ構造体を定義するために使用します。たとえば、多項式を表すクラスを定義するとします。このクラスは、プロパティを定義して、多項式の係数のリストを含められます。このクラスでは、多項式オブジェクト上でのさまざまな処理の実行を有効にするメソッドを実装できます。たとえば、オブジェクトを別のクラスに変換せずに加算と乗算を実装できます。
値クラスは、多項式オブジェクトをコピーでき、同じ多項式の同一表現である 2 つのオブジェクトをもつことができるので適切です。値クラスの例については、MATLAB 組み込み型のサブクラスを参照してください。
MATLAB の値受け渡しのセマンティクスの詳細については、データの不要なコピーの回避を参照してください。
ハンドル クラスを使用する場合
オブジェクトが数や行列などの数学的オブジェクトではなく、グラフや外部デバイスなどの物理的オブジェクトを表す特殊な状況において、ハンドル オブジェクトが便利です。ハンドル オブジェクトは、イベントやリスナー、デストラクター メソッド、動的プロパティのサポートなどの機能を提供するハンドル クラスの派生オブジェクトです。
ハンドル クラスは、以下の場合に使用します。
クラスのインスタンスが別のインスタンスと同一の状態になれないため、正確なコピーの作成ができない場合。以下に例を示します。
グラフィックス オブジェクト (ラインなど) のコピーは、子の親のリストとコピー元のオブジェクトとは異なる位置にあります。したがって、これらの 2 つのオブジェクトは同一ではありません。
リストまたはツリー内のノードは他のノードに対して固有の接続をもつため、2 つのノードが同じ接続もつことはできません。
クラスがシリアル ポートやプリンターなどの物理的で一意のオブジェクトを表す場合。
クラスがグラフィックス コンポーネントなどの可視的オブジェクトを表す場合。
クラスはイベントを定義し、イベントが起こる時間をリスナーに知らせる (
notify
はハンドル クラス メソッド)。クラスが、
handle
クラスのaddlistener
メソッドを呼び出すことによってリスナーを作成する。クラスが
dynamicprops
クラス (handle
のサブクラス) にサブクラス化され、インスタンスが動的プロパティとして定義できる場合。クラスが
matlab.mixin.SetGet
クラス (handle
のサブクラス) にサブクラス化され、グラフィックス オブジェクト スタイルの set/get インターフェイスを実装してプロパティ値にアクセスできる場合。シングルトン クラス、またはコンストラクター内からインスタンス数を追跡するクラスを作成する場合。