Расширение классов Matlab: новые методы для встроенных классов

Я унаследовал полный набор инструментов, последний раз исправленный в 2006 году, и я должен обновить его до последней версии Matlab. Этот набор инструментов определяет некоторые классы и определяет методы для встроенных классов. В частности, он создает некоторые дополнительные методы для объектов классов инструментов систем управления lti, ss, zpk и tf.

Первая часть, перестроение новых классов, уже сделана. У меня проблемы с новыми методами для существующих классов.

Поскольку код был написан в более старой версии Matlab, он использует папки классов, такие как @lti, @ss, @zpk, для определения новых методов. Теперь мне нужно сохранить функционал, но используя новую модель ООП, в которой видны не все @-папки.

Кто-нибудь знает, как это сделать?


person Community    schedule 23.07.2014    source источник
comment
Это может быть полезно stackoverflow.com/questions/9781866/folder-and-folder   -  person Alfabravo    schedule 23.07.2014
comment
@Alfabravo Большое спасибо. Я видел этот ответ раньше. Это объясняет иерархию папок для пакетов и классов, которые я понимаю. Но он не разъясняет (как и документация Matlab), как вводить новые методы для существующих классов. Я предполагаю, что подклассы - это вариант, но мне пришлось бы использовать другое имя, и это потребовало бы большого количества перекодирования.   -  person    schedule 25.07.2014


Ответы (1)


Поскольку мне не удалось найти решение, мне пришлось искать его самостоятельно. Это метод, который я придумал.

В наборе инструментов появилось три новых метода для класса zpk. Я создал новый класс, названный sdzpk, и объявил его подклассом встроенного класса zpk. Затем, где бы ни использовался какой-либо из новых методов, я сначала преобразовывал объект в новый класс, прежде чем передавать его методу.

Следующий код может проиллюстрировать это лучше:

Файл определения класса:

    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 = obj@zpk(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))

Таким образом я удостоверяюсь, что используется новый класс и применяется правильный метод.

Я надеюсь, что это поможет кому-то.

person Community    schedule 29.07.2014