Andrew
Andrew

Reputation: 734

Access methods with other classes in MATLAB

I am teaching myself how to use object oriented programming with MATLAB and have a question about access.

I have three current classes that need to interact with each other. One class, which I'll call main, is what the user will interface with (or the gui if I build one). Main stores all of the pertinent data that the use may want and has a few methods to perform some preprocessing and to construct the main object. Main also calls the constructors for the two other classes.

Another class, I'll call it instruction, loads information about the steps to process the data (this is a recursive process) and some other information.

The final class, which I'll call core, performs the core operations of the process.

Heres what my question is. Within main I have some "helper" methods that are used in the preprocessing. I want the access to these helper methods to be private so that the user cannot see or use them. Some of these helper functions also need to be used by the processes in core. My question is how do I grant access to the helper functions in main so that only main and core can access them? I have tried to understand the information provided here: http://www.mathworks.com/help/matlab/matlab_oop/selective-access-to-class-methods.html, but when I try something like:

classdef main < handle
%this is the main class
    properties
        core  %the core object
        instruction  %the instruction object
    end  %properties
    methods (Access = {?core,?main})
        ... %some code
    end  %methods
end  %class

Matlab gives me this error:

Illegal value for attribute 'Access'.
Parameter must be a string.

Any help would be greatly appreciated!

Andrew

Btw, I realize that having three different classes is unnecessary here but as I stated I am just learning object oriented programming and when I started this project I thought it would be a good idea to have multiple classes because the total project will be over 5000 lines of code.

Upvotes: 3

Views: 1338

Answers (2)

Andrey Rubshtein
Andrey Rubshtein

Reputation: 20915

Selective access is needed quite rarely. The main reason for not using it, is that it breaks the encapsulation principle of OOP. I would consider changing your design, before implementing it.

For more information, check out the friend keyword in C++. Most likely you will find a lot of information on it, and why not to use it.

Upvotes: 1

Sam Roberts
Sam Roberts

Reputation: 24117

Is it possible you're using a relatively old version of MATLAB?

The ability to give access to class methods to specific classes was implemented in release 2012a.

If you're using a version of MATLAB older than that, you can only set method access attributes to public, protected or private.

Note that the documentation page you link to always refers to the current version of MATLAB (2014a at the moment). You can access old versions of the documentation via the website as well by logging into your MathWorks account.

If you have methods of main that need to be accessed by core, that could be a sign that you've designed your class relationships poorly. If core is a property of main, then perhaps it could be a method of core, and main could call it via core.

Upvotes: 1

Related Questions