将程序MATLAB转换为OOP

时间:2014-09-05 10:03:38

标签: matlab oop

我想将一些程序性MATLAB代码转换为OOP,但有点卡住了。我的非OOP方式如下所示。我已经编写了函数和文件,因此这个演示是自包含的......

AllFileName = {'file1Red.asc','file2Green.asc','file3Blue.asc'}';
noOfFiles = numel(AllFileName);

for ii=1:1:noOfFiles
    FileName = AllFileName{ii,1};
    fileNo(ii) = str2num(FileName(5));
    fileColor(ii,:) = {FileName(6:end-4)};
end

所有这些程序都会创建fileNo变量,并使用[1;2;3]填充它,并使用相应颜色的fileColor变量填充。

我希望OOP版本首先加载文件名,然后根据这些文件名创建对象,例如:

对象:file1Redfile2Greenfile3Blue

然后让它用我写的外部函数获得的属性填充对象。所以在我的例子中:

对象:file1Red

属性:: file1Red.no = 1,:file1Red.color = Red;

非常感谢帮助,谢谢。

修改:更新了我的尝试

我的想法是从仪器中获取.asc文件,我想将每个.asc文件批量加载到一个类中,并使用我选择的信息填充类属性。

我创建了一个类文件,其中包含每个数据集通用的属性:

classdef acfc < handle 
    properties
        Temperature
        Viscosity
        RefractiveIndex
        Wavelength
        Angle               
    end

    methods
        function set.Temperature(this,v)
            this.Temperature = v;            
        end       
    end    
end

然后我使用此代码选择几个数据文件,其名称会自动转换为类文件(这就是我想要的):

[AllFileName,PathName,FilterIndex] = uigetfile({'*.*';'*.txt';'*.asc'},'MultiSelect','on');

if iscellstr({AllFileName}) == 1
    numOfFiles = 1;
    AllFileName = {AllFileName};
else
    numOfFiles = length(AllFileName);
end

for ii=1:1:numOfFiles    
    FileName = AllFileName{1,ii};
    [pathstr,name,ext] = fileparts(FileName);
    assignin('base', name, feval('acfc')); 
end

但这就是我被困住的地方,我有类命名我想要它们,但在循环中我想进入文件并取出相关信息(波长,角度等......)。我可以使用自定义函数执行此操作,但我不知道如何将信息放入同名的类文件信息中。

由于

1 个答案:

答案 0 :(得分:0)

更确切地说,你想拥有类acfs的对象。

您确定对象是否已正确创建,以便您拥有类(workspaceObjectWithFilename)== acfc?我没有在你的班级看到任何构造函数,但是我没有Matlab可以自己检查。

如果您有构造函数,可以尝试assignin('base', name, feval('acfc(Temp,Visc,...)');

如果可能的话,
assignin和feval不是非常漂亮的解决方案。

也许您可以尝试dynamic properties,例如将动态属性放入类myFileObjects的对象中。

P = addprop(H,'PropertyName')