クラスのコンポーネント
クラスの基本構成
MATLAB® はクラス定義コードを、キーワードによって区切られたモジュール ブロックに整理します。すべてのキーワードには対応する end ステートメントがあります。
classdef...end— すべてのクラス コンポーネントの定義properties...end— プロパティ名の宣言、プロパティ属性の指定、既定値の代入methods...end— メソッド シグネチャ、メソッド属性、関数コードの宣言events...end— イベント名と属性の宣言enumeration...end— 列挙クラスの列挙メンバーと列挙値の宣言
properties、methods、events、および enumeration は classdef ブロック内でのみ使用するキーワードであることに注意してください。
クラス定義ブロック
classdef ブロックにはファイル内にクラス定義があり、これは classdef キーワードで始まり end キーワードで終わります。
classdef (ClassAttributes) ClassName < SuperClass ... end
たとえば、次の classdef は handle クラスのサブクラスとなる MyClass というクラスを定義します。シールされたクラスとしても定義されているため、このクラスからの継承は使用できません。
classdef (Sealed) MyClass < handle ... end
構文の詳細については、classdef を参照してください。
Properties ブロック
properties ブロックには、オプションの初期値など、プロパティの定義が含まれています。固有の属性指定セットごとに別個のブロックを使用します。各 properties ブロックは、properties キーワードで始まり、end キーワードで終わります。
properties (PropertyAttributes)
PropertyName size class {validators} = DefaultValue
endたとえば、次のクラスは既定値の double 型のプライベート プロパティ Prop1 を定義します。
classdef MyClass properties (SetAccess = private) Prop1 double = 12 end ... end
詳細については、プロパティ値の初期化を参照してください。
methods ブロック
methods ブロックには、クラス メソッドに対する関数定義が含まれています。固有の属性指定セットごとに別個のブロックを使用します。各 methods ブロックは、methods キーワードで始まり、end キーワードで終わります。
methods (MethodAttributes)
function obj = MethodName(arg1,...)
...
endたとえば、次のクラスは保護されたメソッド MyMethod を定義します。
classdef MyClass methods (Access = protected) function obj = myMethod(obj,arg1) ... end end end
詳細については、メソッドの構文を参照してください。
MATLAB は C++ や Java® などの言語とは異なり、クラスのオブジェクトを明示的にメソッドに渡さなければなりません。
MyClass の例で、クラスの obj オブジェクトと関数またはドット構文を使用して MyMethod を呼び出します。
obj = MyClass; r = MyMethod(obj,arg1); r = obj.MyMethod(arg1);
詳細については、メソッドの呼び出しを参照してください。
Events ブロック
events ブロック (固有の属性指定セットそれぞれに 1 つ) には、このクラスで宣言するイベント名が含まれています。events ブロックは、events キーワードで始まり、end キーワードで終わります。
classdef ClassName
events (EventAttributes)
EventName
end
...
endたとえば、次に示すクラスでは、ListenAccess が protected に設定された StateChange というイベントを定義しています。
classdef EventSource events (ListenAccess = protected) StateChanged end ... end
詳細については、イベントを参照してください。
属性の指定
属性の構文
属性は、クラスとクラス コンポーネント (プロパティ、メソッド、イベント) の動作を変更します。属性を指定すると、複雑なコードを記述しなくても、有効な動作を定義できます。たとえば、SetAccess 属性をプライベートに設定し、GetAccess 属性をパブリックのままにしておくことで、読み取り専用のプロパティを作成できます。
properties (SetAccess = private) ScreenSize = getScreenSize end
すべてのクラス定義ブロック (classdef、properties、methods、events) は、特定の属性をサポートしています。すべての属性に既定値があります。既定値から変更する場合にのみ、属性値を指定します。
メモ
任意の component ブロック内で特定の属性値を一度だけ指定します。
属性の説明
サポートされる属性のリストは、以下を参照してください。
属性値
属性値を指定すると、その値は定義ブロック内で定義されているすべてのコンポーネントに影響を及ぼします。属性の設定が異なるプロパティを定義するには、複数の properties ブロックが必要です。コンマ区切りリストで複数の属性を指定します。
properties (SetObservable = true) AccountBalance end properties (SetAccess = private, Hidden = true) SSNumber CreditCardNumber end
値が true/false である属性のための簡単な構文
値が true または false である属性には、より簡単な構文を使用できます。属性名のみの場合は true、属性名に not 演算子 (~) が追加されている場合は false を意味します。たとえば、静的メソッド ブロックを定義する次の 2 つの方法は同等になります。
methods (Static) ... end methods (Static = true) ... end
同様に、非静的メソッド ブロックを定義する次の 3 つの方法は同等になります。論理値を取るすべての属性の既定値は false であるため、既定の動作にする場合は属性を省略できます。
methods ... end methods (~Static) ... end methods (Static = false) ... end
列挙クラス
列挙クラスは単一のデータ型の値を表現する名前の固定セットを定義する特殊化されたクラスです。列挙クラスはクラスで定義された列挙メンバーを含む enumeration ブロックを使用します。
enumeration ブロックは enumeration キーワードで始め、end キーワードで終えます。
classdef ClassName < SuperClass enumeration EnumerationMember end ... end
たとえば、次に示すクラスでは、論理値 false および true を表す 2 つの列挙メンバーを定義しています。
classdef Boolean < logical enumeration No (0) Yes (1) end end
詳細については、列挙クラスの定義を参照してください。