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