Версия 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 реализовала эти те же примеры, и обеспечьте сравнение старого и нового синтаксиса.