exponenta event banner

Совместимость с предыдущими версиями

Новый синтаксис определения класса с программным обеспечением MATLAB версии 7.6

Программное обеспечение MATLAB ® версии 7.6 представляет новый синтаксис для определения классов. Этот новый синтаксис включает в себя:

  • classdef ключевое слово начинает блок кода определений классов. Один end оператор завершает определение класса.

  • В пределах classdef блок кода, properties, methods, и events являются также ключевыми словами, определяющими, где определяются соответствующие члены класса.

Не удается смешать иерархию классов

Невозможно создать иерархии классов, которые объединяют классы, определенные до версии 7.6, и текущие определения классов, которые используют classdef. Поэтому нельзя подкласс старого класса для создания версии нового класса.

Только одна папка класса «@» на класс

Для классов, определенных с помощью нового classdef ключевое слово, папка класса затеняет все папки классов, которые появляются после нее по пути MATLAB. Классы, определенные в папках классов, должны находить все файлы классов в одной папке. Однако классы, определенные в папках классов, по-прежнему имеют приоритет над функциями и сценариями с одинаковыми именами, даже теми функциями и сценариями, которые находятся перед ними по пути.

Частные методы

В версии 7.6 нет необходимости определять частные папки в папках классов. Можно задать метод Access атрибут для private вместо этого.

Изменения в конструкторах классов

Методы конструктора классов имеют два основных отличия. Конструкторы классов:

  • Не используйте class функция.

  • Должен вызывать конструктор суперкласса, только если требуется передать аргументы его конструктору. В противном случае вызов конструктора суперкласса не требуется.

Пример старого и нового синтаксиса

Сравните следующие два Stock методы конструктора. Stock класс является подклассом Asset , для которого требуются аргументы, переданные его конструктору.

Функция конструктора до версии 7.6

   function s = Stock(description,num_shares,share_price)
      s.NumShares = num_shares;
      s.SharePrice = share_price;
% Construct Asset object
      a = Asset(description,'stock',share_price*num_shares);
% Use the class function to define the stock object 
      s = class(s,'Stock',a);

Написать то же самое Stock конструктор класса, как показано здесь. Определение наследования в classdef и определить конструктор в пределах methods блок.

Функция конструктора для версии 7.6

classdef Stock < Asset
   ...
   methods
 
      function s = Stock(description,num_shares,share_price)
% Call superclass constructor to pass arguments 
         s = s@Asset(description,'stock',share_price*num_shares);
         s.NumShares = num_shares;
         s.SharePrice = share_price;
      end % End of function
 
   end % End of methods block
end % End of classdef block

Новые функции, представленные в версии 7.6

Примеры старых и новых

Реализация классов MATLAB версии 7.6 использует синтаксис, отличный от синтаксиса предыдущих версий. Однако занятия, написанные в предыдущих версиях, продолжают работать. Большая часть кода, используемого для реализации методов, скорее всего, останется прежней, за исключением тех случаев, когда используются новые возможности.

В следующих разделах повторяются примеры использования последнего синтаксиса. Оригинальная документация MATLAB Classes and Objects реализовала эти же примеры и обеспечивает сравнение старого и нового синтаксиса.

Представление многочленов классами

Иерархия классов для разнородных массивов