Methods in Separate Files

Class Folders

You can define class methods in files that are separate from the class definition file, with certain exceptions (see Methods You Must Define in the classdef File).

To use multiple files for class definitions, put the class files in a folder having a name beginning with the @ character followed by the name of the class (this is called a class folder). Ensure that the parent folder of the class folder is on the MATLAB® path.

If the class folder is contained in one or more package folders, then the top-level package folder must be on the MATLAB path.

For example, the folder @MyClass must contain the file MyClass.m (which contains the classdef block) and can contain other methods and function defined in files having a .m extension. The folder @MyClass can contain a number of files:

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

Note

MATLAB treats any.m file in the class folder as a method of the class. The base name of the file must be a valid MATLAB function name. Valid function names begin with an alphabetic character, and can contain letters, numbers, or underscores.

Define Method in Function File

To define a method in a separate file in the class folder, create the function in a file with the .m extension. Do not use the method-end keywords in that file. Name the file with the function name, as with any function.

In the myFunc.m file, implement the method:

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

It is a good practice to declare the function signature in the classdef file in a methods block:

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

Specify Method Attributes in classdef File

If you specify method attributes for a method that you define in a separate function file, include the method signature in a methods block in the classdef file. This methods block specifies the attributes that apply to the method.

For example, the following code shows a method with Access set to private in the methods block. The method implementation resides in a separate file. Do not include the function or end keywords in the methods block. Include only the function signature showing input and output arguments.

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

In a file named myFunc.m, in the @MyClass folder, define the function:

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

Static Methods in Separate Files

To create a static method, set the method Static attribute to true and list the function signature in a static methods block in the classdef file. Include the input and output arguments with the function name. For example:

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

Define the functions in separate files using the same function signature. For example, in the file @MyClass/staticFunc1.m:

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

and in @Myclass/staticFunc2.m:

function staticFunc2
   ...
end

Methods You Must Define in the classdef File

Define the following methods in the classdef file. You cannot define these methods in separate files:

  • Class constructor

  • All functions that use dots in their names, including:

    • Converter methods that must use the package name as part of the class name because the class is contained in packages

    • Property set and get access methods

Related Information

Related Topics