Как и в предыдущих случаях, находим, что сообщения о закрытии счета снова не будет (в операторе if метода withdraw значение первого логического компонента равно 0 - счет не был закрыт); новый баланс (newbal = BA.AccountBalance – amt) оказывается опять отрицательным (-300), поэтому повторится сообщение notify и вновь выполнится callback-функция assignStatus, которая обнаружит перерасход больший, чем $200. Новое значение свойства AccountStatus станет равным closed. Сказанное можно проверить по следующим запросам и ответам:
BA.AccountBalance % Запрос.
ans =
-300 % Ответ.
BA.AccountStatus % Запрос.
ans =
closed % Ответ.
Попытка дополнительного изъятия со счета:
BA.withdraw(100)
при проверке состояния счета в первом if функции-методе withdraw приводит к выдаче сообщения:
Account 1234567 has been closed (Счет 1234567 закрыт)
Номер счета 1234567 в последнем сообщении является результатом преобразования значения свойства AccountNumber (число 1234567) объекта BA в символы 1234567 стандартной функцией num2str(BA.AccountNumber).
Если баланс счета вернуть к положительной величине вложением средств, счет вновь будет открыт:
BA.deposit(700)% Вложение.
BA.AccountStatus % Запрос.
ans =
open % Ответ
и съем средств будет разрешен:
BA.withdraw(100) % Съем средств.
BA.AccountBalance % Запрос.
ans =
300 % Ответ
UsingObjectstoWriteDatatoaFile (Использование объектов для записи данных в файл)
В этом разделе: |
FlexibleWorkflow (Гибкий рабочий процесс);
Performing a Task with an Object (Выполнение задачи с объектом);
Using Objects in Functions (Использование объектов в функциях). |
Flexible Workflow (Гибкий рабочий процесс)
Язык MATLAB не требует от вас определения классов для всех кодов, которые вы пишете. Вы можете использовать объекты вместе с обычными функциями. Этот раздел иллюстрирует использование объекта (который выполняет обобщенную задачу написания текста в файл) в функции для написания конкретного текста шаблона определения класса.
Performing a Task with an Object (Выполнение задачи с объектом)
Одним из преимуществ определения класса по сравнению с обычной функцией для выполнения задачи является то, что класс обеспечивает лучший контроль за связанными данными. Например, рассмотрим задачу занесения данных в файл. Она включает следующие шаги:
w Открытие файла для определения и сохранения его идентификатора;
w Использование идентификатора файла для внесения данных в файл;
w Использование идентификатора файла для закрытия файла.
The Filewriter Class (Класс Filewriter)
Следующее простое определение класса иллюстрирует, как вы можете создать класс для написания текста в файл. Оно показывает, как можно использовать преимущества класса за счет:
w Сокрытия приватных данных – клиенту, вызывающему файл, не нужно управлять идентификатором файла;
w Гарантии того, что используется всегда только один идентификатор файла класса - копии handle-объектов обращаются к одному и тому же оригиналу;
w Обеспечения автоматического закрытия файла, когда рабочий объект уничтожается – специальный объектный метод берет на себя эту задачу без явного вызова.
Этот класс (Filewriter) выведен из суперкласса handle, поэтому текущий Filewriter-объект, конкретно используемый для записи данных в файл, является handle-объектом. Все копии handle-объектов пользуются одними и теми же внутренними данными, поэтому будет использован только один идентификатор файла, даже если вы делаете копии handle-объекта. Следовательно, handle-классы определяют также общий (для всех копий какого-либо handle-объекта) метод уничтожения (delete-метод), который вызывается автоматически, когда handle-объект или любая его копия устраняется. Нижеследующий пример переопределяет стандартный метод delete так, чтобы файл закрыть прежде, чем идентификатор файла будет потерян (при этом сам файл останется открытым):
classdef Filewriter < handle
% Следующие свойства являются приватными для класса:
properties (SetAccess = private, GetAccess = ...
private)
FileID % User-defined-свойство класса, хранящее
% идентификатор файла (его значение для каждого объекта -
% представителя этого класса будет определяться конкретным
% файлом, с которым объект будет работать).
end % properties
methods
% Далее следуют конструктор Filewriter-объекта и оператор
% определения и сохранения идентификатора в FileID для
% последующих работ:
function obj = Filewriter(filename) % Конструктор
% Filewriter-объекта obj для записи данных в файл
% filename (следует учесть, что filename – формальный
% параметр, его значение в виде принимаемого фактического
% параметра будет строкой символов в кавычках).
obj.FileID = fopen(filename,'a'); % Определение
% идентификатора файла filename и сохранение его в
% свойстве FileID объекта obj; идентификатор
% определяется при вызове стандартной функции fopen; в
% соответствии с требованием символа «a» идентификатор
% позволяет записывать информацию в последнюю строку
% файла filename. Если файл filename не существует,
% он будет создан автоматически.
end
function writeToFile(obj,text_str) % Функция «писать
% в файл» с помощью Filewriter-объекта obj, хранящего
% идентификатор файла в свойстве FileID.
fprintf(obj.FileID,'%s\n',text_str); % Стандарт-
% ная функция записи строки (как значение аргумента
% text_str) в файл с идентификатором, взятым из FileID.
end
% Далее вызывается delete-метод класса Filewriter до того, как
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.