Main Content

クラスのコンポーネント

クラスの基本構成

MATLAB® はクラス定義コードを、キーワードによって区切られたモジュール ブロックに整理します。すべてのキーワードには対応する end ステートメントがあります。

  • classdef...end — すべてのクラス コンポーネントの定義

  • properties...end — プロパティ名の宣言、プロパティ属性の指定、既定値の代入

  • methods...end — メソッド シグネチャ、メソッド属性、関数コードの宣言

  • events...end — イベント名と属性の宣言

  • enumeration...end — 列挙クラスの列挙メンバーと列挙値の宣言

propertiesmethodsevents、および enumerationclassdef ブロック内でのみ使用するキーワードであることに注意してください。

クラス定義ブロック

classdef ブロックにはファイル内にクラス定義があり、これは classdef キーワードで始まり end キーワードで終わります。

classdef (ClassAttributes) ClassName < SuperClass
   ...
end

たとえば、次の classdefhandle クラスのサブクラスとなる 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

たとえば、次に示すクラスでは、ListenAccessprotected に設定された StateChange というイベントを定義しています。

classdef EventSource
   events (ListenAccess = protected)
      StateChanged
   end
   ...
end

詳細については、イベントを参照してください。

属性の指定

属性の構文

属性は、クラスとクラス コンポーネント (プロパティ、メソッド、イベント) の動作を変更します。属性を指定すると、複雑なコードを記述しなくても、有効な動作を定義できます。たとえば、SetAccess 属性をプライベートに設定し、GetAccess 属性をパブリックのままにしておくことで、読み取り専用のプロパティを作成できます。

properties (SetAccess = private)
   ScreenSize = getScreenSize
end

すべてのクラス定義ブロック (classdefpropertiesmethodsevents) は、特定の属性をサポートしています。すべての属性に既定値があります。既定値から変更する場合にのみ、属性値を指定します。

メモ

任意の 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

詳細については、列挙クラスの定義を参照してください。

関連情報

単純なクラスの作成

クラス定義を含むフォルダー