Версия 7.6 MATLAB вводит новый синтаксис для определения классов. Этот новый синтаксис включает:
classdef
ключевое слово начинает блок кода определений классов. end
оператор отключает определение класса.
В classdef
блок кода, properties
Методы
, и 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 реализовала эти те же примеры, и обеспечьте сравнение старого и нового синтаксиса.