クラスのコンポーネント
クラスの基本構成
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
詳細については、列挙クラスの定義を参照してください。