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

                                 % для проверки годности аргумента setvalue с

                                         % целью определения порядка действий.

            error('Not available') % Вызов функции error

                                         % для вывода сообщения «Не пригоден».

         else

            obj.OfficeNumber = setvalue; % Назначение

                                         %  величины setvalue свойству

             % OfficeNumber объекта obj.

         end

      end

   end

   methods (Static) % Установка значения регламентированного

                        % атрибута Static как «истина», остальные атрибуты – по

                        %  умолчанию.

      function num = get.EmpNumber % Переопределение

                        % стандартной функции get для запроса величины свойства

                                 % EmpNumber.

         num = queryDB('LastEmpNumber') + 1; % Расчет

                                 % num как суммы результата метода queryDB и

                        % единицы.

      end

   end

end

Functions Used with Objects (Функции, используемые с объектами)

MATLAB имеет следующие стандартные функции для работы с объектами:

Функция

Цель

class

Возвращает класс объекта

events

Отображает на экране имена событий класса

isa

Определяет, действительно ли аргумент есть объект некоторого класса

isobject

Определяет,  действительно ли    вход есть MATLAB-объект

methods

Информация о методах класса

methodsview

Информация о методах класса в выделенном окне

properties

Отображает на экране имена свойств класса

Developing Classes — Typical Workflow (Создание классов – типовой рабочий процесс)

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

Formulating a Class (Формулирование класса);

Implementing the BankAccount Class (Исполнение класса BankAccount);

Implementing the AccountManager Class (Исполнение класса AccountManager);

Using the BankAccount Class (Использование класса BankAccount).

FormulatingaClass (Формулирование класса)

В данном примере излагаются разработка и исполнение простого handle-класса (копии любого объекта такого класса ссылаются на одно  и то же множество исходных данных). Для создания класса, который представляет собой некоторый банк счетов, вначале определите элементы данных и операции, выполняемые вашим классом. Например, банковский счет имеет:

w Номер;

w Баланс;

w Текущий статус (открыт, закрыт и т.д.).     

Вам необходимо определить операции с банковским счетом такие, как:

w Пополнение счета;

w Снятие средств.

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

w open (открыт) - баланс положителен;

w overdrawn  (превышение) - превышение отрицательного баланса в пределах $200;

w closed (закрыт)  - отрицательный баланс превышает порог $200. 

Ранее было сказано, что в классах данные хранятся в свойствах, операции выполняются методами, а извещения о событиях поддерживаются слушателями. Поэтому классу банковских счетов необходимы аналогичные компоненты, рассмотренные в последующих разделах.

DefiningClassData (Определение данных класса)

Классу необходимо определить свойства для хранения данных – номера счета, его баланса и статуса:

w AccountNumber (Номер счета) – этому свойству дают значение при создании объект-инстанции класса (открытие счета);

w AccountBalance (Баланс счета) – это свойство модифицируется  операциями класса (пополнение счета и снятие средств с него);

w AccountStatus (Статус счета) – это свойство устанавливается в начальное значение, когда создается инстанция класса. Оно изменяется методами  другого класса (AccountManager  -Менеджер счета) каждый раз, кода величина свойства AccountBalance счета падает ниже нуля.

Первые два свойства содержат информацию, изменить которую могут только сам класс банковских счетов и его инстанции-объекты, поэтому атрибут SetAccess этих свойств должен быть установлен в private. Величина для AccountStatus определяется внешней программой AccountManager, которой необходим доступ к этому свойству класса банковских счетов, поэтому атрибут SetAccess данного свойства должен остаться по умолчанию – public (свободный доступ).

Defining Class Operations (Определение операций класса)

Класс должен создать счет, позволить вложить средства в него и снять их со счета. Поэтому потребуется три метода класса:  

w deposit (вложение) – обновляет свойство AccountBalance, когда осуществляется пополнение счета;

w withdraw (снятие средств) – обновляет свойство AccountBalance, когда осуществляется изъятие средств со счета;

w BankAccount (Банковский счет) – конструктор-метод, создает текущий счет для очередного клиента.

Defining Class Events (Определение событий класса)

Банковские счета с отрицательным балансом имеют статусы, изменяемые внешней программой менеджера, как указано выше. Для исполнения этой активности класс BankAccount стимулирует событие InsufficientsFunds (Неудовлетворительные счета), когда его метод withdraw (снятие средств со счета) приводит к отрицательному балансу. Поэтому возбуждение событий InsufficientsFunds осуществляется внутри данного метода withdraw.