我正在教自己如何使用MATLAB进行面向对象编程,并对访问有疑问。
我有三个当前需要互相交互的类。我称之为main的一个类是用户将与之交互的类(或者如果我构建一个类,则为gui)。 Main存储了使用可能需要的所有相关数据,并且具有一些方法来执行一些预处理和构造主对象。 Main还调用另外两个类的构造函数。
另一个类,我将其称为指令,加载有关处理数据的步骤的信息(这是一个递归过程)和一些其他信息。
最后一堂课,我称之为核心课程,执行该流程的核心操作。
这是我的问题所在。在主要内部,我有一些帮助"预处理中使用的方法。我希望对这些帮助程序方法的访问是私有的,以便用户无法查看或使用它们。其中一些辅助函数也需要由核心中的进程使用。我的问题是如何授予main中辅助函数的访问权限,以便只有主和核可以访问它们?我试图理解这里提供的信息:http://www.mathworks.com/help/matlab/matlab_oop/selective-access-to-class-methods.html,但当我尝试以下内容时:
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给了我这个错误:
Illegal value for attribute 'Access'.
Parameter must be a string.
非常感谢任何帮助!
安德鲁
顺便说一句,我知道这里有三个不同的类是不必要的,但正如我所说,我只是学习面向对象的编程,当我开始这个项目时,我认为拥有多个类是个好主意,因为整个项目将是超过5000行代码。答案 0 :(得分:1)
您是否可以使用相对较旧版本的MATLAB?
在2012a版本中实现了对特定类访问类方法的能力。
如果您使用的是旧版本的MATLAB,则只能将方法访问属性设置为public
,protected
或private
。
请注意,您链接到的文档页面始终引用当前版本的MATLAB(目前为2014a)。您也可以通过网站访问旧版本的文档,也可以登录您的MathWorks帐户。
如果main
需要访问core
的方法,则可能表明您的课堂关系设计不佳。如果core
属于main
的属性,那么它可能是core
的方法,main
可以通过core
调用它。
答案 1 :(得分:1)
很少需要选择性访问。不使用它的主要原因是它破坏了OOP的封装原则。在实施之前,我会考虑改变你的设计。
有关更多信息,请查看C ++中的friend
关键字。很可能你会发现很多关于它的信息,以及为什么不使用它。