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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сравните следующие два Stock методы конструктора. The 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 Version 7.6 использует другой синтаксис по сравнению с предыдущими релизами. Однако классы, написанные в предыдущих версиях, продолжают работать. Большая часть кода, которую вы используете для реализации методов, вероятно, останется прежней, кроме тех случаев, когда вы используете новые возможности.

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

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

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