ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ハンドル スーパークラス

ハンドル クラスの構築

handle クラスは抽象クラスです。これは、ユーザーがこのクラスのインスタンスを直接作成できないことを意味します。代わりに、ユーザー独自のクラスを実装する際に、スーパークラスとしてこのクラスを使用します。handle クラスは、すべてのハンドル クラスの基礎になります。ハンドルのサブクラスを定義する際、ハンドル クラスを作成してきました。したがって、ハンドル セマンティクスに従うクラスはすべて、handle クラスのサブクラスです。

ハンドル サブクラス

サブクラスからユーザー クラスを派生する際に、追加の機能を提供する handle クラスのサブクラスが 2 つあります。

  • hgsetget - プロパティ値にアクセスする setget メソッドを提供します。hgsetget のサブクラス化の詳細は、「プロパティの Set/Get インターフェイスの実装」を参照してください。

  • dynamicprops - インスタンスのプロパティを定義する機能を与えます。dynamicprops のサブクラス化の詳細は、「動的プロパティ - インスタンスへのプロパティの追加」を参照してください。

    handle クラスのサブクラスからの派生は、クラスが handle クラスであることを意味します。すべての handle クラス メソッド、およびこれらのサブクラスによって提供されている特別な機能が継承されます。

ハンドル クラスのメソッド

handle クラスはプロパティを定義しませんが、この節で説明するメソッドを定義します。ハンドル クラス (すなわち、handle クラスのサブクラス) の作成時には、常に、これらのメソッドがサブクラスによって継承されます。

関数 methods にクラス名を渡すことによって、クラスのメソッドを一覧表示できます。

>> methods('handle')

Methods for class handle:

addlistener  findobj      gt           lt           
delete       findprop     isvalid      ne           
eq           ge           le           notify  

イベントとリスナー - 構文と手法」では、イベントの使用に関連する、notify および addlistener メソッドを使用する方法の詳細を説明します。

サブクラスの作成 - 構文と手法では、サブクラスの定義について説明します。

比較演算のメソッド

function TF = eq(H1,H2)
function TF = ne(H1,H2)
function TF = lt(H1,H2)
function TF = le(H1,H2)
function TF = gt(H1,H2)
function TF = ge(H1,H2)

等価性テストとハンドルの並べ替えを可能にする実装をすると、ハンドル クラスはこれらの関数をオーバーロードします。入力配列の各ペアに対して、これらの関数は、同じサイズの論理配列を出力します。各要素は、要素ごとの等価性または比較テスト結果です。入力配列どうしは、同じサイズでなければなりません。入力配列の 1 つ (または両方とも) がスカラーになることができます。このメソッドは、必要に応じてスカラー拡張を行います。

ハンドルの有効性の検証

ハンドル オブジェクトが有効かどうかを判別するには、handle isvalid クラス メソッドを使用します。たとえば、次のステートメントでは、

B = isvalid(H)

BH の対応する要素が有効なハンドルである場合に限り、各要素が true となる論理配列です。B は常に H と同じサイズです。

ハンドル クラスまたはグラフィックス オブジェクト ハンドル

ハンドルがクラス handle であるか、Java® または Handle Graphics® のハンドルであるかを調べるには、関数 isa を使用します。たとえば、handle クラスから派生する button クラス の例を以下に示します。

classdef button < handle
   properties
      UiHandle
   end
   methods
      function obj = button(pos)
         if nargin > 0
            if length(pos) == 4
               obj.UiHandle = uicontrol('Position',pos,'Style','pushbutton');
            else
               error('Improper position')
            end 
         end 
      end 
   end
end

以下のように、位置ベクトルを button コンストラクターに渡して button オブジェクトを作成します。

h = button([50 20 50 20]);

グラフィックス オブジェクト ハンドル (UiHandle プロパティに保存) と handle クラス オブジェクト h の違いを調べます。ishandle を使用して、Handle Graphics オブジェクト ハンドルの有効性をテストします。

% h is a handle object
>> isa(h,'handle')
ans =
     1

% The uicontrol object handle is not a handle object
>> isa(h.UiHandle,'handle')
ans =
     0

% The button object is not a graphics object
>> ishandle(h)
ans =
     0

% The uicontrol is a graphics object handle
>> ishandle(h.UiHandle)
ans =
     1

Figure を close すると、関数 ishandle は Handle Graphics ハンドルが無効であると判断します。

>> close
>> ishandle(h.UiHandle)

ans =

     0

h は引き続きクラス handle であり、有効なハンドル オブジェクトです。

>> isa(h,'handle')

ans =

     1
>> isvalid(h)

ans =

     1

hbutton クラスでもあります。

>> isa(h,'button')

ans =

     1

MATLAB がオブジェクトを破棄する場合

MATLAB® は、関数が以下の操作を実行する場合に、関数のワークスペース内のオブジェクトを破棄します。

  • オブジェクト変数を新しい値に再び割り当てる

  • 関数の残りの部分でオブジェクト変数を使用しない

  • 関数の実行を終了する

MATLAB がオブジェクトを破棄するときには、オブジェクトのプロパティに保存された値も破棄され、オブジェクトに関連付けられたコンピューターのメモリが MATLAB またはオペレーティング システムに返されます。

ハンドル クラスでメモリを解放する必要はありません。ただし、オブジェクトを破棄するときに実行する別の操作がある場合もあります。たとえば、ファイルを閉じたり、オブジェクト コンストラクターが起動した外部プログラムを終了したりする操作です。このような目的で、ハンドル サブクラスの delete メソッドを定義します。

詳細は、「ハンドル クラスのデストラクター」を参照してください。

この情報は役に立ちましたか?