MATLAB R2008a. Классы. Часть1: Учебное пособие, страница 20

Разделы с дополнительной информацией по определению и уничтожению классов:

The Handle Base Class (Базовый класс handle);

Handle Class Delete Methods (Delete-методы handle-классов).

Using the Editor and Debugger with Classes (Использование редактора и отладчика с классами)

В этом разделе:

Referring to Class Files (Ссылка на файлы классов).

Referring to Class Files(Ссылка на файлы классов)

Классы определены в M-файлах так же,  как сценарии и функции. Чтобы использовать редактор и отладчик с файлом класса, вы должны использовать полное имя класса. Например, пусть М-файл myclass.m  для класса имеет следующее размещение (знак «+» указывает на пакеты файлов):

   +PackDir1/+PackDir2/@myclass/myclass.m

Для открытия файла myclass.m в редакторе MATLAB вы можете указать на файл, используя dot-разделение (разделение точками) имен пакетов:

        edit PackDir1.PackDir2.myclass

Вы можете также использовать path-нотацию (нотацию пути – «/»):

        edit +PackDir1/+PackDir2/@myclass/myclass

Если файл myclass.m не расположен в @-директории, вы можете набрать (пример для файла myclass.m, расположенного после +PackDir2):

        edit +PackDir1/+PackDir2/myclass

Для ссылки к функциям (например, packFunction) внутри пакета директорий вы можете использовать dot- или path-разделители:

        edit PackDir1.PackDir2.packFunction

   edit +PackDir1/+PackDir2/packFunction

Для указания на метод (например,  myMethod), определенный в его собственном М-файле внутри @-директории, вы можете использовать следующее:

        edit +PackDir1/+PackDir2/@myclass/myMethod

DebuggingClassFiles (Отладка файлов класса)

Для отладки файлов определения класса стандартная функция dbstop (установка точек прерывания) принимает любую спецификацию файла, используемую с командой edit (редактирование или создание файла).

ModifyingClasses (Модификация классов)

Если вы модифицируете определение класса (т.е. меняете атрибуты или спецификации блоков classdef, properties, methods или events), эти изменения могут влиять не тотчас, если это не инстанции класса. MATLAB не использует модифицированный класс до тех пор, пока существует хотя бы одна инстанция предыдущего определения. Он продолжает использовать прежнее определение, пока все инстанции не обнулятся.

Можно использовать стандартную команду clear с указанием на классы:

        clear classes

чтобы очистить текущую (используемую в данный момент) рабочую область памяти от всех переменных, сбросить все функции (которые могут иметь постоянные переменные, удерживаемые инстанциями класса) и обнулить все классы, которые не имеют инстанций вне рабочей области.

Однако вам не требуется вводить команду clear classes после изменения кода в определениях функций внутри методов. MATLAB реализует измененный метод при любом его следующем вызове.

CompatibilitywithPreviousVersions (Совместимость с предыдущими версиями)

В этом разделе :

NewClass-DefinitionSyntaxIntroducedwithMATLABSoftwareVersion 7.6 (Новый синтаксис определения класса, введенный в версию MATLAB 7.6);

Changes to Class Constructors (Изменения к класс-конструкторам);

В этом разделе (окончание):

New Features Introduced with Version 7.6 (Новые характеристики, введенные в версию 7.6);

Examples of Old and New (Примеры старого и нового).

New Class-Definition Syntax Introduced with MATLAB Software Version 7.6(Новый синтаксис определения класса, введенный в версию MATLAB 7.6)

Версия MATLAB 7.6 вводит новый синтаксис для определения класса. Этот новый синтаксис дополняется следующим:

w Ключевое слово classdef начинает блок определения класса, который заканчивается словом end;

w Внутри блока classdef слова properties, methods и events являются также ключевыми ограничителями, где вы определяете соответствующие компоненты класса.

CannotMixClassHierarchy (Нельзя нарушать иерархию классов)

Нельзя создавать иерархии классов, которые смешивают классы, определенные раньше версии 7.6, и текущих определений (т.е. использующих classdef). Поэтому вы не можете создавать новую версию подкласса из старого класса.

OnlyOne @-DirectoryperClass (Только одна @-директория на класс)

Для класса, определенного с использованием нового ключевого слова classdef, @-директория включает все участки, которые встречаются после неё до конца директории. Класс, расположенный на @-директории, должен размещать все свои файлы в этой единственной директории. При этом классы, определенные в @-директориях, продолжают обладать преимущественным приоритетом над функциями и сценариями с такими же именами, даже если последние расположены раньше на пути.

PrivateMethods (Приватные методы)

Вам нет необходимости определять приватные директории классов для версии 7.6. Вы можете просто установить приватные (private) атрибуты доступа (Access) для метода.

ChangestoClassConstructors (Изменения к класс-конструкторам)

Методы класс-конструкторов для версии 7.6 имеют две главные особенности:

w Функция class не используется;

w Они должны вызывать конструктор суперкласса, только если вам нужно послать аргументы к этому конструктору. Другими словами, вызов суперкласс-конструктора не является обязательным.

Examples of Old and New Syntax (Примеры старого и нового синтаксисов)

Сравните следующие два Stock-конструктора. Класс Stock является инстанцией класса Asset, который требует аргументы для своего конструктора.

Constructor Function Prior to Version 7.6 (Функция-конструктор доверсии 7.6):

   function s = Stock(description, num_shares,...

                    share_price)

       s.NumShares = num_shares;

       s.SharePrice = share_price;

        % Конструктор Asset-объекта:

      a = Asset(description,'stock',share_price*...

             num_shares);

        % Используйте стандартную функцию class для определения Stock-                        % объекта:

      s = class(s,'Stock',a);