2014-07-23 26 views
3

我继承了一个完整的工具箱,最后在2006年进行了修订,我必须将它更新到最新版本的Matlab。这个工具箱定义了一些类并为内置的类定义了方法。更具体地说,它为控制系统工具箱类lti,ss,zpk和tf的对象创建了一些额外的方法。扩展matlab类:内置类的新方法

第一部分,重建新类已经完成。我对现有类的新方法有麻烦。由于代码是用旧版本的Matlab编写的,因此它使用类文件夹(如@lti,@ss和@zpk)来定义新的方法。现在我需要保持功能,但使用新的OOP模型,其中并非所有的@ -folders都可见。

有人知道该怎么做吗?

+0

这可能会有所帮助http://stackoverflow.com/questions/9781866/folder-and-folder – Alfabravo

+0

@Alfabravo非常感谢。我之前看到了答案。它解释了我理解的包和文件夹的层次结构。但它没有阐明(因为Matlab文档都没有)如何为现有类引入新方法。我想子类化是一种选择,但我将不得不使用不同的名称,这将需要大量的重新编码。 – Rudy

回答

1

由于我没有找到解决方法,所以我不得不自己找到一个解决方案。这是我想出的方法。

该工具箱有三个新的zpk类的方法。我创建了一个名为sdzpk的新类,并将其声明为内置zpk类的子类。然后,无论使用哪种新方法,我都会先将对象转换为新类,然后再将其传递给方法。

下面的代码可以ilustrate更好:

类定义文件:

classdef sdzpk < zpk & sdlti 

     methods (Access = public) 

      function obj = sdzpk(varargin) 

       % Constructor method. Long code here to perform data validation 
       % and pass information to the zpk constructor 

       obj = [email protected](args{:}); 
      end 

      % Existing methods 
      % This are the old files I inherited. No need to edit them. 

      tsys = ctranspose(sys); 
      sys = delay2z(sys); 
      sysr = minreal(sys,tol); 
      F = minreals(F,tol); 
      FP = setpoles(F,p); 
      F = symmetr(F,type,tol); 
      F = z2zeta(F,tol); 
     end  
    end 

在工具箱内的几个地点,功能minreals被调用。所有这些呼叫被替换为:

minreals(sdzpk(obj)) 

以这种方式,我确定使用了新类并且应用了正确的方法。

我希望这有助于某人。