Программное обеспечение 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
Свойства: Способы использования свойств
Классы дескрипторов: сравнение классов дескрипторов и значений
События и слушатели: Концепции событий и слушателей
Атрибуты элемента класса: Спецификация атрибута
Абстрактные классы: абстрактные классы и члены классов
Динамические свойства: Динамические Свойства - Добавляющие Свойства к Случаю
Возможность подкласса встроенных классов MATLAB: Конструирование конструкторов подкласса
Пакеты для функций и классов области: Пакеты Создание пространств имен. MATLAB не поддерживает пакеты для классов, созданных до MATLAB версии 7.6 (то есть классов, которые не используют classdef).
JIT/Accelerator поддерживает объекты, определенные только классами с помощью classdef.
Реализация классов MATLAB версии 7.6 использует синтаксис, отличный от синтаксиса предыдущих версий. Однако занятия, написанные в предыдущих версиях, продолжают работать. Большая часть кода, используемого для реализации методов, скорее всего, останется прежней, за исключением тех случаев, когда используются новые возможности.
В следующих разделах повторяются примеры использования последнего синтаксиса. Оригинальная документация MATLAB Classes and Objects реализовала эти же примеры и обеспечивает сравнение старого и нового синтаксиса.