メインコンテンツ

別ファイルのメソッド

クラス フォルダー

一部の例外 (classdef ファイルで定義しなければならないメソッドを参照) を除き、クラス定義ファイルとは別のファイルにクラスのメソッドを定義できます。

複数のファイルを使用してクラスを定義するには、@ で始まり、その後にクラス名が続く名前のフォルダーにクラス ファイルを格納します。このフォルダーはクラス フォルダーと呼ばれます。クラス フォルダーの親フォルダーが MATLAB® パスにあることを確認してください。

クラス フォルダーが 1 つ以上の名前空間フォルダーに含まれている場合は、最上位の名前空間フォルダーが含まれているフォルダーが MATLAB パス上になければなりません。

たとえば、@MyClass というフォルダーには、classdef ブロックを含む MyClass.m ファイルがなければなりません。さらにこのフォルダーには、.m 拡張子をもつ他のファイルで定義された、他のメソッドと関数が含まれます。@MyClass フォルダーにはいくつかのファイルを含めることができます。

@MyClass/MyClass.m
@MyClass/subsref.m
@MyClass/subsasgn.m
@MyClass/horzcat.m
@MyClass/vertcat.m
@MyClass/myFunc.m

メソッド ファイルのタイプ

MATLAB はクラス フォルダー内のすべての関数ファイルをクラスのメソッドとして扱います。関数ファイルには MATLAB コード (.m)、ライブ コード ファイル形式 (.mlx)、MEX 関数 (プラットフォーム依存の拡張子)、および P コード ファイル (.p) を使用できます。ファイルのベース名は、有効な MATLAB 関数名でなければなりません。有効な関数名は、アルファベットで始まり、文字、数字またはアンダースコアを含むことができます。

C++ MEX 関数としてメソッドを定義する方法の詳細については、MATLAB クラス メソッドに対する MEX 関数の使用を参照してください。

関数ファイルでのメソッドの定義

メソッドをクラス フォルダー内の別のファイルで定義するには、ファイル内に関数を作成します。そのファイルでは method-end キーワードを使用しないでください。関数の場合と同様に、関数名を使用してそのファイルに名前を付けます。

myFunc.m ファイルに次のメソッドを実装します。

function output = myFunc(obj,arg1,arg2)
   % code here
end

コードを読みやすくするために、classdef ファイルで methods ブロック内に関数シグネチャを宣言することをお勧めします。関数シグネチャを宣言してメソッド属性を設定する必要もあります。classdef ファイルで関数シグネチャを宣言しなかった場合、メソッドのすべての属性が既定値になります。たとえば、classdef でシグネチャが設定されていないメソッドは、Accesspublic に設定され、Sealedfalse に設定されるといったようになります。

新しいメソッドをクラスに追加する際は、classdef ファイルで methods ブロックに関数シグネチャを含めて、MATLAB が現在のセッションで新しいメソッドを確実に認識できるようにします。そうしない場合は、clear classes (または特定のクラス名に対する clear) を呼び出して、MATLAB に新しいメソッドを強制的に認識させます。

classdef ファイルでのメソッド属性の指定

別の関数ファイルで定義したメソッドにメソッド属性を指定する必要がある場合は、classdef ファイルの methods ブロックにメソッドのシグネチャを含めます。この methods ブロックは、メソッドに適用される属性を指定します。

たとえば次のコードは、methods ブロック内で Accessprivate に設定されているメソッドを示しています。メソッドの実装は別のファイルにあります。function または end キーワードは methods ブロックに含めないでください。入力引数および出力引数の表記された関数シグネチャのみを含めます。

classdef MyClass
   methods (Access = private)
      output = myFunc(obj,arg1,arg2)
   end
end

@MyClass フォルダーの myFunc.m というファイルで、次の関数を定義します。

function output = myFunc(obj,arg1,arg2)
   ...
end

別ファイルでの静的メソッド

静的メソッドを作成するには、メソッドの Static 属性を true に設定し、classdef ファイル内の静的メソッドに関数シグネチャをリストします。関数名と共に、入力引数と出力引数を含めます。以下に例を示します。

classdef MyClass
...
   methods (Static)
      output = staticFunc1(arg1,arg2)
      staticFunc2
   end
   ...
end

同じ関数シグネチャを使用して、別のファイルで関数を定義します。たとえば、ファイル @MyClass/staticFunc1.m で次のようにします。

function output = staticFunc1(arg1,arg2)
   ...
end

また、@Myclass/staticFunc2.m で次のようにします。

function staticFunc2
   ...
end

classdef ファイルで定義しなければならないメソッド

次のメソッドは classdef ファイルで定義します。これらのメソッドを別ファイルで定義することはできません。

  • クラス コンストラクター

  • 関数名にドットを使用する関数。以下が含まれます。

    • クラスが名前空間に含まれているため、クラス名の一部に名前空間名を使用する必要があるコンバーター メソッド

    • プロパティの set および get アクセス メソッド

関連情報

参考

トピック