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