ドキュメンテーション

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

プロパティの Set/Get インターフェイスの実装

標準の Set/Get インターフェイス

グラフィックス オブジェクトなど一部の MATLAB® オブジェクトは、関数 set および関数 get に基づいたインターフェイスを実装します。これらの関数を使うと、1 回の関数呼び出しでオブジェクトの配列の複数のプロパティにアクセスできます。

次のいずれかのクラスから派生させることにより、setget の機能をクラスに追加することができます。

  • matlab.mixin.SetGet — 大文字と小文字を区別しない、プロパティ名の部分一致をサポートする場合に使用します。matlab.mixin.SetGet からの派生は、ドット表記によるプロパティへの参照の使用に必要とされる正確なプロパティ名には影響しません。

  • matlab.mixin.SetGetExactNames — 大文字と小文字を区別する、プロパティ名の完全一致のみをサポートする場合に使用します。

メモ

この節で説明する set メソッドおよび get メソッドは、プロパティの set アクセス メソッドおよびプロパティの get アクセス メソッドとは異なります。プロパティのアクセス メソッドの詳細は、プロパティ アクセス メソッドを参照してください。

サブクラスの構文

抽象クラス matlab.mixin.SetGet または matlab.mixin.SetGetExactNames をスーパークラスとして使用します。

classdef MyClass < matlab.mixin.SetGet
   ...
end

matlab.mixin.SetGetmatlab.mixin.SetGetExactNameshandle クラスから派生しているため、サブクラスも同様に handle クラスとなります。

Get メソッドの構文

get メソッドは、オブジェクト ハンドルおよびプロパティ名を使用してオブジェクト プロパティの値を返します。たとえば、H がオブジェクトのハンドルとします。

v = get(H,'PropertyName');

単一プロパティ名でハンドル配列を指定すると、get は各オブジェクトのプロパティ値を値の cell 配列として返します。

CV = get(H,'PropertyName');

配列 CV は、H の形状にかかわらず常に列ベクトルです。

char ベクトル プロパティ名の cell 配列とハンドル配列を指定すると、get はプロパティ値の cell 配列を返します。セルの各行はハンドル配列のオブジェクトに対応します。セルの各列はプロパティ名に対応します。

props = {'PropertyName1','PropertyName2'};
CV = get(H,props);

get は m 行 n 列の cell 配列を返します。ここで、 m = length(H) および n = length(props) です。

ハンドル配列を指定してプロパティ名を指定しない場合は、getstruct 型の配列を返します。ここでは、配列の各構造体は H のオブジェクトに対応します。各構造体のフィールドはそれぞれ、H のクラスによって定義されるプロパティに対応します。各フィールドの値は、対応するプロパティの値です。

SV = get(H);

出力変数を割り当てない場合は、H はスカラーでなければなりません。

例については、ハンドル配列と get の使用を参照してください。

Set メソッドの構文

set メソッドは、ハンドル H をもつオブジェクトの指定のプロパティに指定値を割り当てます。H がハンドルの配列の場合は、MATLAB は値を、配列 H の各オブジェクトのプロパティに割り当てます。

set(H,'PropertyName',PropertyValue)

プロパティ名の cell 配列とプロパティ値の cell 配列を set に渡すことができます。

props = {'PropertyName1','PropertyName2'};
vals = {Property1Value,Property2Value};
set(H,props,vals)

length(H) が 1 より大きい場合は、プロパティ値の cell 配列 (vals) は各オブジェクトの各プロパティに対して値をもつことができます。たとえば、length(H) が 2 (2 つのオブジェクト ハンドル) であると仮定します。各オブジェクトに 2 つのプロパティ値を割り当てるとします。

props = {'PropertyName1','PropertyName2'};
vals = {Property11Value,Property12Value;Property21Value,Property22Value};
set(H,props,vals))

上記のステートメントは次の 2 つのステートメントと同等です。

set(H(1),'PropertyName1',Property11Value,'PropertyName2',Property12Value)
set(H(2),'PropertyName1',Property21Value,'PropertyName2',Property22Value)

スカラー ハンドルを指定してプロパティ名を指定しない場合、setH のクラスの各プロパティに対し、1 つのフィールドをもつ struct を返します。各フィールドには空の cell 配列が 1 つ含まれています。

SV = set(h);

matlab.mixin.SetGet から導出されたクラス

このサンプル クラスでは set/get インターフェイスを定義し、継承されたメソッドの動作について説明します。

classdef LineType < matlab.mixin.SetGet
   properties
      Style = '-'
      Marker = 'o'
   end
   properties (SetAccess = protected)
      Units = 'points'
   end
   methods
      function obj = LineType(s,m)
         if nargin > 0
            obj.Style = s;
            obj.Marker = m;
         end
      end
      function obj = set.Style(obj,val)
         if ~(strcmpi(val,'-') ||...
               strcmpi(val,'--') ||...
               strcmpi(val,'..'))
            error('Invalid line style ')
         end
         obj.Style = val;
      end
      function obj = set.Marker(obj,val)
         if ~isstrprop(val,'graphic')
            error('Marker must be a visible character')
         end
         obj.Marker = val;
      end
   end
end

クラスのインスタンスを作成し、そのハンドルを保存します。

h = LineType('--','*');

継承された get メソッドを使用して、任意のオブジェクト プロパティの値をクエリします。

get(h,'Marker')
ans =

*

継承された set メソッドを使用して、任意のプロパティの値をクエリします。

set(h,'Marker','Q')

set および get を使用したプロパティ アクセス メソッドの呼び出し

set メソッドおよび get メソッドが使用される場合、MATLAB はプロパティ アクセス メソッド (LineType クラスの set.Style または set.Marker) を呼び出します。

set(h,'Style','-.-')
Error using LineType>LineType.set.Style
Invalid line style

プロパティ アクセス メソッドについての詳細は、プロパティ アクセス メソッドを参照してください。

すべてのプロパティの一覧表示

get を使用して、オブジェクト プロパティとそれらの現在値を含む struct を返します。

h = LineType('--','*');
SV = get(h)
SV =

     Style: '--'
    Marker: '*'
     Units: 'points'

set を使用して、publicSetAccess をもつプロパティを含む struct を返します。

S = set(h)
S =

     Style: {}
    Marker: {}

LineType クラスは Units プロパティを SetAccess = protected により定義します。したがって、S = set(h)SUnits のフィールドを作成しません。

set は、パブリックでない set アクセスをもつプロパティの可能な値を返すことができません。

ハンドル配列と get の使用

LineType オブジェクトの配列を作成するとします。

H = [LineType('..','z'),LineType('--','q')]
H = 

  1x2 LineType with properties:

    Style
    Marker
    Units

H がハンドル配列の場合は、get ではプロパティ値の 1 つの (length(H) 行 1 列) cell 配列が返されます。

CV = get(H,'Style')
CV = 

    '..'
    '--'

H がハンドル配列であり、プロパティ名を指定しない場合は、get はプロパティ名に対応する名前をもつフィールドを含む struct 配列を返します。H がスカラーでない場合は、get の出力を変数に割り当てます。

SV = get(H)
SV = 

2x1 struct array with fields:
    Style
    Marker
    Units

Marker プロパティの値を構造体の配列 SV の 2 番目の配列要素から取得します。

SV(2).Marker
ans =

q

ハンドル、名前および値の配列

ハンドル配列、プロパティ名の cell 配列、プロパティ値の cell 配列を set に渡すことができます。プロパティ値の cell 配列には H の各オブジェクトに対してプロパティ値の行が 1 行なければなりません。各行にはプロパティ名配列の各プロパティに対して値が含まれていなければなりません。

H = [LineType('..','z'),LineType('--','q')];
set(H,{'Style','Marker'},{'..','o';'--','x'})

set に対するこの呼び出しの結果は次のとおりです。

H(1)
ans = 

  LineType with properties:

     Style: '..'
    Marker: 'o'
     Units: 'points
H(2)
ans = 

  LineType with properties:

     Style: '--'
    Marker: 'x'
     Units: 'points'

プロパティ リストのカスタマイズ

ユーザーのサブクラスに次のメソッドを再定義することによって、プロパティ リストの表示方法をカスタマイズできます。

  • setdisp — 出力引数を指定せずに 1 つの single スカラーのハンドル入力を指定して set を呼び出した場合、setsetdisp を呼び出してプロパティ リストの表示方法を決めます。

  • getdisp — 出力引数を指定せずに 1 つの single スカラーのハンドル入力を指定して get を呼び出した場合、getgetdisp を呼び出してプロパティ リストの表示方法を決めます。

参考

|

関連するトピック