Для определения user-defined-события вы просто указываете имя внутри блока событий events. Событие стимулируется путем вызова унаследованного подклассом BankAccount метода notify суперкласса handle. Заметим, что в данном случае (user-defined-событие) имя события не является регламентированным - вы можете именовать его любой строкой и при возникновении события реализовать его теми действиями, которые выберете.
Implementing the BankAccount Class (Исполнение класса BankAccount)
В рассматриваемом классе, как и для других классов, в любом свойстве определяется только одно множество данных (контейнер данных) для всех инстанций класса BankAccount. Вы, вероятно, не захотите также оперировать независимыми копиями какого-либо объекта-счета, чтобы в разных ситуациях работать только с исходным множеством данных этого счета. Поэтому класс BankAccount должен быть исполнен как handle-класс (класс, выведенный из суперкласса handle или его подкласса). Все копии любого его объекта (handle-объекта) будут обращаться только к одному и тому же множеству данных исходного счета.
DisplayFullyCommentedExampleCode (Отображение полностью комментированного примера кода)
Вы можете отобразить код для данного примера на временном окне, который содержит детальный комментарий и связи с родственными подразделами документации, щелкнув ссылки:
BankAccount class (Класс BankAccount);
AccountManager class (Класс AccountManager).
Вы можете открыть файлы обоих классов в редакторе MATLAB, кликнув:
Open in editor (Открыть в редакторе).
Class Definition (Определение класса)
classdef BankAccount < handle % Подкласс класса handle.
properties (Hidden) % Здесь Hidden означает скрытые свойства
% (не представляются при отображении класса).
AccountStatus = 'open'; % Начальный статус пустого
% счета не может быть иным, в противном случае к вновь
% открытому счету нельзя будет обратиться.
end
% Следующие свойства могут быть установлены только методами
% класса (и соответсвенно его объект-инстанций):
properties (SetAccess = private)
AccountNumber % Конкретный номер может быть задан только
% объектом для очередного создаваемого счета.
AccountBalance = 0; % Начальный баланс для любого
% открываемого счета; изменение баланса – только при
% вложении или изъятии средств.
end
% Определите user-defined-событие InsufficientFunds:
events
InsufficientFunds
end
methods
function BA = BankAccount...
(AccountNumber,InitialBalance) % Конструктор
% счета. При открытии счета (т.е. объекта BA) можно
% задать его номер (по входному аргументу AccountNumber)
% и состояние баланса AccountBalance (по входному
% аргументу InitialBalance):
BA.AccountNumber = AccountNumber;
BA.AccountBalance = InitialBalance;
% Далее идет вызов метода addAccount вспомогательного класса
% AccountManager; метод addAccount необходим для создания
% и регистрации слушателя и его callback-функции с целью
% выполнения нужных действий по событию InsufficientFunds
% в случае его возникновения:
AccountManager.addAccount(BA); % Вызов метода
% addAccount класса AccountManager для
% обслуживания события InsufficientFunds, т.е. создания
% и регистрации слушателя этого события и callback-функции
% реагирования на событие.
end
function deposit(BA,amt) % Метод вложения средств
% amt на счет BA; при этом меняется его баланс:
BA.AccountBalance = BA.AccountBalance + amt;
% Если баланс положительный:
if BA.AccountBalance > 0
% то счет будет открыт:
BA.AccountStatus = 'open';
% Если баланс не положительный, статус счета
% останется прежним (до операции deposit).
end
end
function withdraw(BA,amt) % Снятие средств amt со счета
% BA. Если до этого результат функции strcmp (сравнивает
% значение свойства AccountStatus и строку closed) будет
% «истина» и баланс счета окажется отрицательным:
if (strcmp(BA.AccountStatus,'closed')&&...
BA.AccountBalance < 0),
% то отображается сообщение о закрытом счете:
disp(['Account',num2str...
(BA.AccountNumber),...
' has been closed.']) % Сообщение: «Счет
% AccountNumber закрыт».
return % Возврат в точку вызова.
end
% Если указанные выше условия не выполняются,
% рассчитывается новый баланс:
newbal = BA.AccountBalance - amt; % Расчет
% нового баланса.
BA.AccountBalance = newbal; % Установка нового
% баланса. Если баланс newbal отрицательный:
if newbal < 0
% то посредством метода notify сообщается о
% событии InsufficientFunds в объекте BA:
notify(BA,'InsufficientFunds') % Сообщение о % событии InsufficientFunds для слушателя,
% зарегистрированного ранее вместе с его callback-
% функцией реагирования (см. выше команду
% AccountManager.addAccount).
end
end % withdraw
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.