
Министерство образования и науки Российской Федерации
Рязанский государственный радиотехнический университет
В.Ф. ОДИНОКОВ
MATLAB R2008a. КЛАССЫ
Часть 4
Учебное пособие
Рязань 2012
УДК 519.68 (075.8)
MATLABR2008a. Классы. Часть 4: учеб. пособие / В.Ф. Одиноков; Рязан. гос. радиотехн. ун-т. - Рязань, 2012. - 68 с.
Рассматриваются основные понятия и элементы MATLAB-классов версии 7.6.0 (R2008a).
Предназначено для студентов специальностей 230201 - "Информационные системы и технологии", 230203 – "Информационные технологии в дизайне", 230204 – "Информационные технологии в медиаиндустрии", бакалавров направления 230400_62 – "Информационные системы и технологии", студентов заочной формы обучения, в том числе по специальности 230201, магистрантов направления 230400_68 - "Информационные системы и технологии" и аспирантов.
Библиогр.: 5 назв.
В создании пособия принимал участие студент гр. 835 Аникеев Д.В.
Классы, подклассы, объекты, методы
Печатается по решению редакционно-издательского совета Рязанского государственного радиотехнического университета.
Рецензент: кафедра автоматизированных систем управления Рязанского государственного радиотехнического университета (зав. кафедрой д-р техн. наук, проф. Г.И. Нечаев)
Рязанский государственный
радиотехнический
университет, 2012
Введение
Без моделирования различных объектов и протекающих в них процессов невозможны почти никакие серьезные исследования и разработки ни в одной из областей знаний. Повышению производительности труда при этом способствуют разнообразные (готовые) системы программной имитации. Одной из таких систем является универсальный пакет МATLAB 7.6 (R2008а), включающий ряд функциональных элементов. Все они представлены соответствующими разделами в путеводителеHelpNavigatorпакета МATLAB. Среди них важнейшим является раздел МATLAB(Матричная лаборатория). Он содержит язык, методологию и средства программирования. Программирование в системе МATLAB основано на объектно-ориентированной технологии. Последняя изложена в подразделеMATLAB Classes and Object-Oriented Programming(MATLAB-классы и объектно-ориентированное программирование) разделаМATLAB.
Отсутствие русифицированного варианта пакета МATLAB создает значительные трудности при практической работе с ним. Различная литература [1, 2] по системе МATLAB на русском языке только отчасти решает отмеченную проблему, поскольку преследует, в основном, учебные цели. В отличие от этого данное пособие ориентировано на непосредственноеобщение с МATLAB-документами, так как является продолжением [3, 4, 5] синхронного (в порядке дерева тем путеводителяHelpNavigator) перевода-изложения вышеуказанного подраздела системы МATLAB.
ЭлектронныйHelp-справочник пакета
МATLAB, имея цветовое оформление и
автоматические ссылки на соответствующие
страницы МATLAB-документации, не может
быть полностью воспроизведен в
черно-белом варианте бумажного носителя
данного пособия. Поэтому следует
отметить ряд формальных моментов. Так,
смысловое ударение на слова и фразы в
тексте пособия показанонаклоннымшрифтом. Цветовое выделение всехзаголовков, функций и ключевых словокнаHelpв пособии замененожирнымшрифтом.Графическиецветовые элементы пакета МATLAB в данном
материале различаются только оттенками
серого тона. Всё выделенное жирным
шрифтом иподчеркнутоев пособии
означаетавтоматический вызоввHelpсоответствующих страниц
пакета при однократном нажатии (клике)
левой кнопкой мыши таких ссылок-связей.Специальновыделяемые в тексте
пособия элементы окружены символами
«». Расстановка абзацев и табуляцияподчиняются, в основном, правилам
окнаHelp. Шрифт обычного
текста пособия -TimesNewRoman, программный код -Courier
New,
названия разделов и подразделов -Arial
Black. Знаки «%»послестрок
программного кода означают начало или
продолжение неисполняемого
текста-комментария; наличие или отсутствие
ограничителя «;» в конце строккодаопределяется синтаксисомязыкаMATLAB; многоточие «…» без
разрядки (шрифтTimesNewRoman) означает «и т.д.»,
«проч.», «и др.»; многоточие «...»
с разрядкой (шрифтCourier
New)
– перенос продолжения строки кода.
Понятия «раздел» и «подраздел» условны:
любойподразделкак отдельный
тематический элементHelp-навигатора
является обобщающим разделомдля
своих внутренних структурных составляющих.
Implementing a Class for Polynomials (Исполнение класса полиномов)
В данном разделе рассматривается Example — A Polynomial Class(Пример – класс полиномов), в котором дается определение класса полиномиальных объектов.
Example — A Polynomial Class (Пример – класс полиномов)
В этом разделе: |
Adding a Polynomial Object to the MATLAB Language (Добавление полином-объекта к языку MATLAB);
Displaying the Class Files (Отображение файлов класса);
Summary of the DocPolynom Class (Резюме класса DocPolynom);
The DocPolynom Constructor Method (DocPolynom-конструктор-метод);
Converting DocPolynom Objects to Other Types (Конвертирование DocPolynom-объектов к другим типам);
The DocPolynom disp Method (DocPolynom-disp-метод);
The DocPolynom subsref Method (DocPolynom-subsref-метод);
Defining Arithmetic Operators for DocPolynom (Определение арифметических операторов для DocPolynom);
|
В этом разделе (окончание): |
Overloading MATLAB Functions for the DocPolynom Class(ПереопределениеMATLAB-функций для классаDocPolynom).
|
Adding a Polynomial Object to the MATLAB Language (Добавление полином-объекта к языку MATLAB)
Этот пример дает класс для представления полиномов в языке MATLAB.Value-класс использован потому, что поведение полиномиальных объектов в средеMATLABаналогично семантике другихMATLAB-переменных. Этот пример определяет методы для расширения отображения, индексации, а также арифметических и графических операций.
Смотрите Comparing Handle and Value Classes(Сравнениеhandle- иvalue-классов) для большей информации оvalue-классах.
Этот класс переопределяет некоторые из функций MATLAB, такие какroots, polyval, diffи plot, после чего они могут быть использованы с новыми полином-объектами.
Displaying the Class Files (Отображение файлов класса)
Open the DocPolynom class definition file in the MATLAB editor (Открыть файл определения класса DocPolynom в MATLAB-редакторе).
Для использования класса создайте директорию @DocPolynom и сохраните в ней файлDocPolynom.m. Родительская директория к@DocPolynomдолжна быть наMATLAB-пути.
Summary of the DocPolynom Class (Резюме класса DocPolynom)
Определение класса (на директории @DocPolynom) формирует свойства для хранения данных и методы для их обработки.
Следующая таблица представляет свойства класса DocPolynom.
DocPolynom Class Properties (Свойства класса DocPolynom):
Имя |
Класс |
По умолчанию |
Описание |
coef |
double |
[] |
Вектор полином-коэффициентов [наибольшая степень … наименьшая степень]
|
Ниже дается таблица методов для класса DocPolynom.
DocPolynom Class Methods (Методы класса DocPolynom):
Имя |
Описание
|
DocPolynom |
Конструктор класса
|
double |
Конвертирует полиномиальные объекты к классу double(а именно его коэффициенты в векторе)
|
char |
Создает форматированное отображение полиномиальных объектов по степеням xс использованием методаdisp
|
disp |
Определяет, как MATLABотображаетDocPolynom-объекты на командной линии
|
subsref |
Позволяет вам специфицировать величину для независимой индексной переменной и иметь доступ к свойству coefпоdot-нотации
|
plus |
Выполняет сумммирование DocPolynom-объектов
|
minus |
Выполняет вычитание DocPolynom-объектов
|
mtimes |
Выполняет перемножение DocPolynom-объектов
|
roots |
Переопределяет MATLAB-функциюrootsдля работы сDocPolynom-объектами
|
polyval |
Переопределяет MATLAB-функциюpolyvalдля работы сDocPolynom-объектами |
diff |
Переопределяет MATLAB-функциюdiffдля работы сDocPolynom-объектами
|
DocPolynom Class Methods(Методы классаDocPolynom) - окончание:
Имя |
Описание
|
plot |
Переопределяет MATLAB-функциюplotдля работы сDocPolynom-объектами
|
Using the DocPolynom Class(Использование классаDocPolynom)
Следующий пример иллюстрирует базовое использование класса DocPolynom.
Создайте DocPolynom-объекты
для представления следующих полиномов.
Заметьте, что аргумент для функции-конструктора
содержит коэффициенты полиномови
:
p1 = DocPolynom([1 0 -2 -5])% Обращение к конструктору.
p1 = % Автоматический вывод созданного объекта:
x^3 - 2*x – 5 % Созданный полином.
p2 = DocPolynom([2 0 3 2 -7])% Обращение к класс-
% конструктору.
p2 =% Автоматический вывод созданного объекта:
2*x^4 + 3*x^2 + 2*x - 7% Созданный полином.
Disp-метод классаDocPolynom отображает полиномы вMATLAB-синтаксисе.
Найдите корни полиномов, используя переопределенный метод roots:
>> roots(p1)% Вызовroots-метода класса DocPolynom.
ans = % Автоматический вывод корней:
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
Сложите два полинома p1иp2.
Когда вы складываете два DocPolynom-объекта,MATLABвызывает методplus, определенный для классаDocPolynom:
p1 + p2% Оператор сложения полиномов.
ans =% Автоматический вывод результата:
2*x^4 + x^3 + 3*x^2 – 12
Следующий раздел описывает методы, иллюстрированные здесь, а также другие методы и их детали.
The DocPolynom Constructor Method (DocPolynom- конструктор-метод)
Следующая функция (файл в директории @DocPolynom/DocPolynom.m) является конструктором классаDocPolynom:
function obj = DocPolynom(c)
% Construct a DocPolynom object using the coefficients supplied
% (КонструкторDocPolynom-объекта, использующий принятые
% коэффициенты).
if isa(c,'DocPolynom')% Проверка принадлежности
% переменной cкDocPolynom-объекту; если так, то:
obj.coef = c.coef;% Передача коэффициентов из
% свойства coef объектаcсвойству coefобъекта
% obj(см. следующий раздел).
else % Еслиc неDocPolynom-объект, то:
obj.coef = c(:).';% Передача вектораcобъектуobj.
end
end % DocPolynom
Constructor Calling Syntax (Синтаксис вызова конструктора)
Вы можете вызвать DocPolynom-конструктор с двумя разными аргументами:
Входной аргумент является DocPolynom-объектом. В таком случае конструктор возвращает новый DocPolynom-объект с теми же коэффициентами, что и у входного аргумента. Этот случай контролирует стандартная MATLAB-функция isa.
Входной аргумент является вектором коэффициентов (не DocPolynom-объектом). Конструктор пытается преобразовать тип величин вектора и назначает их свойству coef.
Как только свойство coef ограничит величины двойной точностью, вы не сможете управлять типом входного аргумента в функции- конструкторе.
Пример использования DocPolynom-конструктора был дан выше:
p = DocPolynom([1 0 -2 -5])
p =
x^3 - 2*x -5
Это выражение создает инстанцию класса DocPolynomс конкретными коэффициентами. Заметьте, что методы класса отображают эквивалентный полином, используя синтаксис языкаMATLAB. КлассDocPolynomреализуют это отображение своими методамиdispиchar.
Converting DocPolynom Objects to Other Types(КонвертированиеDocPolynom-объектов к другим типам)
Класс DocPolynomопределяет два метода конверсииDocPolynom-объектов к другим классам:
double – конвертирует к MATLAB-стандарту численного типа, поэтому вы можете выполнять арифметические операции с полиномами;
char – конвертирует к строке символов; используется для форматирования вывода в Command Window (Командное окно).
The DocPolynom to Double Converter (Конвертор DocPolynom-double)
Double-метод конверсии классаDocPolynomпросто возвращает вектор коэффициентов, который получает двойную точность по определению:
function c = double(obj)
% DocPolynom/Double Converter (Конвертор
% DocPolynom/double).
c = obj.coef;
end % double
Для DocPolynom-объекта p:
p = DocPolynom([1 0 -2 -5])
выражение:
c = double(p)
возвращает:
c =
1 0 -2 -5
что соответствует классу double:
class(c)% Запрос на класс аргументаc.
ans = % Ответ:
double
The DocPolynom to Character Converter (Конвертор DocPolynom-char)
Char-метод классаDocPolynom продуцирует строку символов, которая представляет отображение полинома как степень независимой переменнойx. Поэтому после спецификацииx строка возвращается как синтаксически корректноеMATLAB-выражение, которое вы можете оценивать (рассчитать).
Метод dispклассаDocPolynomиспользуетDocPolynom-char-метод для форматирования отображения DocPolynom-объекта.
Следующая функция есть DocPolynom-char-метод, определенный в файле@DocPolynom/DocPolynom.m:
function s = char(p) % DocPolynom-char-метод.
% сhar(p) is the string representation of p.coef (сhar(p)есть
% строка, представляющая содержание вp.coef).
if all(p.coef == 0)% Если коэффициентов нет, то:
s = '0';% Обнуление строкиs.
else % Иначе:
d = length(p.coef) - 1;% Число элементов вcoef,
% содержащихx(без свободного элемента).
s = []; % Начальная установка объекта-строки.
for a = p.coef;% Для каждого элемента массиваcoef:
if a ~= 0;% еслиaне равно 0 и
if ~isempty(s)% еслиsне пусто и
if a > 0 % если коэффициент a> 0,то:
s = [s ' + ' ]; % прибавляем.
else% Иначе:
s= [s' - ' ]; % вычитаем и
a = -a;% меняем знакa, так как его
% уже учли.
end % if
end % if
if a ~= 1 | d == 0 % Для первого элемента
% строки s: еслиaне равно 1 илиdравно 0,
% то:
s = [s num2str(a)];% ставим на первое
% место в строке sчислоa.
ifd> 0 % Еслиd> 0, то:
s = [s '*']; % умножаем.
end
end
if d >= 2 % Еслиd >= 2(т.е. есть степеньx,
% большая 1),то:
s = [s 'x^' int2str(d)];% за
% элементами a*пишемx^, а далее
% степень, равную d.
elseif d == 1 % Иначе, еслиd == 1(нет
% явной степени при x),то:
s = [s 'x'];
end
end % if
d = d - 1;% Переход к следующему элементу
% строки sв циклеfor.
end % for
end % if
end % char
Evaluating the Output (Оценка вывода)
Если вы создаете DocPolynom-объектp:
p = DocPolynom([1 0 -2 -5]);
и затем вызываете метод charдляp:
char(p)
то результат очевиден:
ans =
x^3 - 2*x - 5
Величина, возвращаемая методом char, есть строка, которую вы можете послать функцииeval(оценка), когда зададите скаляр независимой переменнойx. Например:
x = 3;% Назначение величины3переменнойx. Теперь оценка
% полинома будет вестись для x = 3.
eval(char(p))% Вызов функции оценки выражения-строки.
ans = % Автоматический вывод результата оценки дляx = 3:
16
The DocPolynom subsref Method(DocPolynom-subsref-метод) описывает лучший способ для оценки полинома.
The DocPolynom disp Method (DocPolynom-disp-метод)
MATLAB-функцияdispпозволяет вам отображать строку символов или значение переменной. Однако так как эта общая функцияdispне предназначена дляDocPolynom-объектов, вам нужно создать её переопределенную версию-метод.
DocPolynom-char-метод продуцирует строку полинома, который затем отображается на экране:
function disp(obj)
% disp function for objects (Функция disp для объектов).
disp([' ' char(obj)])% char(obj)- строка,
% обрамленная кавычками «'»; первые элементы (кавычка,
% пять пропусков, кавычка) конкатенации «[]» формируют
% отступ (пять пропусков) на строке вывода.
end % disp
When MATLAB Calls the disp Method (Когда MATLAB вызывает disp-метод)
Выражение:
p = DocPolynom([1 0 -2 -5])
создает DocPolynom-объект. Если выражение не ограничено точкой с запятой, результат автоматически выводится на командной линии с помощьюdisp-метода:
p =
x^3 - 2*x – 5
The DocPolynom subsref Method (DocPolynom- subsref-метод)
Обычно индексированное назначение автоматически определено в MATLAB. Однако в данном частном случае классDocPolynomтрактует, что индексированная ссылка кDocPolynom-объекту обусловливает оценку полинома с величиной независимой переменной,равной индексу. ПоэтомуDocPolynom-полином для:
оценивает ,
где
есть величина индекса.
Например, для DocPolynom-объектаp:
p = DocPolynom([1 0 -2 -5]) % Создание объектаp.
p = % Автоматический вывод:
x^3 - 2*x - 5 % Созданный полином.
следующее индексированное выражение оценивает величину полинома с
x = 3и x= 4и возвращает вектор результирующих значений:
p([3 4])% Автоматический вызовsubsref-метода дляx = 3и
%x= 4.
ans = % Автоматический вывод результатов:
16 51 % Полученный вектор для двух результатов.
subsref Implementation Details (Детали исполнения subsref)
DocPolynom-subsref-метод обеспечивает две возможности:
Посылку величины независимой переменной как индексной ссылки (например, p(3) оценивает полином с x = 3);
Dot-нотацию для доступа к свойству coef:
function b = subsref(a,s)
% Implement a special subscripted assignment (Исполнение
% специального индексного назначения);a– объект; s– структура
% с полями: type–строка, содержащая'()'или'.' (символы
% '()'указывают на целочисленные индексы,'.'– на индексную
% структуру), subs– массив ячеек строк.
switch s.type % Переключатель типов'()','.'.
case '()'% Для типа'()':
ind = s.subs{:}; % Передача всех индексов изsubs
% переменной ind.
for k = 1:length(ind)% Для очередного индекса:
b(k) = eval(strrep(char(a),...
'x',num2str(ind(k))));% Оценка полинома
% для k-того индекса и передача результата в выходной
% аргумент-массив.
end
case '.'% Для типа'.':
switch s.subs % Переключатель элементов вsubs.
case 'coef'% Для случая'coef':
b = a.coef; % Передача коэффициентов из свойства
% coefобъектаaвыходному аргументуb.
otherwise% Иначе (если вsubsнетcoef):
error(['''' s.subs '''' ' is not... a property']) % Вызов MATLAB-функции
% error и вывод сообщения: «'s.subs' – не
% свойство».
end
otherwise % Иначе (если типов'()','.'нет):
error('Specify value for x as obj(x)') % Вы-
% зов функцииerrorи вывод сообщения:
% «Специфицируй величину для xкак obj(x)».
end % switch s.type
end % subsref
Для индексных ссылок, использующих круглые скобки:
Метод char класса DocPolynom сначала продуцирует полином, который может быть оценен (рассчитан);
Функция strrep заменяет x в полиноме на величину индексного аргумента в a;
Функция eval оценивает полином и передает результат в выходной аргумент.
Для ссылок, использующих dot-нотацию,subsref-метод простовозвращаеткоэффициенты или ошибку, если имя свойства не корректное.
Смотрите описание функции subsrefдля более подробной информации.
Defining Arithmetic Operators for DocPolynom(Определение арифметических операторов дляDocPolynom)
Некоторые арифметические операции имеют смысл для полиномов и должны быть определены для класса DocPolynom. Смотрите Implementing Operators for Your Class(Исполнение операторов для вашего класса) с дополнительной информацией о переопределении операций, которые могут быть полезны для класса, такие как деление, горизонтальная конкатенация и др.
Данный раздел показывает исполнение следующих методов:
Метод и синтаксис |
Исполнение |
plus(a,b) |
Бинарное сложение
|
minus(a,b) |
Бинарное вычитание
|
mtimes(a,b) |
Матричное перемножение
|
Когда переопределяете арифметические операторы, учитывайте типы данных, с которыми вы хотите работать. В этом разделе методы plus,minusиmtimesопределены вDocPolynomдля обработки комбинаций операторов классовDocPolynom/DocPolynomиDocPolynom/double.
Defining the + Operator(Определение оператора «+»)
Если pилиqявляетсяDocPolynom-объектом, то выражение
p + q
вызывает DocPolynom-plus-метод независимо от степени предпочтения второго объекта. Object Precedence in Expressions Using Operators (Объект-предпочтение в выражениях, использующих операторы) дает дополнительную информацию по этой теме.
Следующий метод переопределяет MATLAB-функциюplus:
function r = plus(obj1,obj2)
% Plus Implement obj1 + obj2 for DocPolynom (plus
% выполняет obj1 + obj2 для DocPolynom).
obj1 = DocPolynom(obj1);% Переопределение входного
% объекта obj1в видеDocPolynom-объекта.
obj2 = DocPolynom(obj2);% Переопределение входного
% объекта obj2в видеDocPolynom-объекта.
k = length(obj2.coef)-length(obj1.coef);% Опре-
% деление разности чисел коэффициентов двух полиномов.
r = DocPolynom([zeros(1,k) obj1.coef]+...
[zeros(1,-k) obj2.coef]); % zeros(1,k) -
% строка из k нулей,zeros(1,-k)- пустая
% матрица 1-на-0; [zeros(1,k) obj1.coef]- дополненная
% слева нулями строка коэффициентов coef(сама строка этих
% коэффициентов, если k ≤ 0) объектаobj1;
% [zeros(1,-k) obj2.coef])- строка коэффициентов
% coef(дополненная слева нулями строка этих коэффициентов,
% если k < 0) объектаobj2; [zeros(1,k) obj1.coef]+
%+[zeros(1,-k) obj2.coef]- поэлементная сумма
% сформированных строк коэффициентов - вектор коэффициентов
% результирующего полинома; DocPolynom– вызов
% конструктора результирующего полинома.
end%plus
Функция обеспечивает:
Гарантию того, что оба входных аргумента оказываются DocPolynom-объектами (для обоих вызывается DocPolynom-конструктор), поэтому, например, выражение
p + 1
содержащее double-объект 1, работает корректно;
Доступ к двум векторам коэффициентов и, если необходимо, дополнение одного из них нулями до длины другого;
Дополнительный вызов DocPolynom-конструктора для создания результата с правильным типом.
Defining the – Operator(Определение оператора «-»)
Вы можете определить (задать) оператор «-» по аналогии с «+».
MATLABвызываетDocPolynom-minus-метод (оператор «-») для расчетаp - q, гдеp,qили оба -DocPolynom-объекты:
function r = minus(obj1,obj2)
% minus Implement obj1 - obj2 for DocPolynom (minus
% исполняет obj1 - obj2 для DocPolynom).
obj1 = DocPolynom(obj1);
obj2 = DocPolynom(obj2);
k = length(obj2.coef) - length(obj1.coef);
r = DocPolynom([zeros(1,k) obj1.coef]-...
[zeros(1,-k) obj2.coef]);
end % minus
Defining the * Operator(Определение оператора «*»)
MATLABвызываетDocPolynom-mtimes-метод для расчета произведения, напримерp*q. Методmtimesиспользован для переопределения встроенного оператора «*»MATLAB-матриц, так как произведение двух полиномов есть просто свертка (conv) их векторов коэффициентов:
function r = mtimes(obj1,obj2)
% mtimes Implement obj1 * obj2 for DocPolynoms(mtimes
% исполняет obj1 * obj2 для DocPolynoms).
obj1 = DocPolynom(obj1);
obj2 = DocPolynom(obj2);
r = DocPolynom(conv(obj1.coef,obj2.coef));
end % mtimes
Using the Arithmetic Operators (Использование арифметических операторов)
Зададим DocPolynom-объект:
p = DocPolynom([1 0 -2 -5]);
Следующие две арифметические операции вызывают методы plus(оператор «+») иmtimes (оператор«*»)классаDocPolynom:
q = p+1
r = p*q
Результат выдается автоматически:
q =
x^3 - 2*x - 4
r =
x^6 - 4*x^4 - 9*x^3 + 4*x^2 + 18*x + 20
Overloading MATLAB Functions for the DocPolynom Class(ПереопределениеMATLAB-функций для классаDocPolynom)
Язык MATLABуже имеетразличные функции для работы с полиномами, которые представлены векторами коэффициентов. Вы можете переопределить эти функции для работы свашим новым классом, напримерDocPolynom.
В случае DocPolynom-объектов переопределенные методы могут просто применить какую-либо особую функцию для коэффициентов (т.е. величин, возвращаемых свойствомcoef).
Этот раздел показывает, как исполнить следующие MATLAB-функции:
MATLAB-функции для полиномов
MATLAB-функция |
Цель |
roots (obj) |
Рассчитывает корни полинома
|
polyval(obj,x) |
Оценивает полином в специфицированных точках |
MATLAB-функции для полиномов (окончание)
MATLAB-функция |
Цель |
diff(obj) |
Находит приращение и приблизительную производную
|
plot(obj) |
Строит график полиномиальной функции |
Defining the roots Function for the DocPolynom Class (Определение функции roots для класса DocPolynom)
DocPolynom-roots-метод находит корни DocPolynom-объекта путем посылки коэффициентов coef к MATLAB-функции roots:
function r = roots(obj) % DocPolynom-roots-метод.
% roots(obj) returns a vector containing the roots of obj
% (roots(obj)возвращает вектор, содержащий корни
% полинома obj).
r = roots(obj.coef); %MATLAB-функции roots.
end %roots
Если pесть следующийDocPolynom-объект:
p = DocPolynom([1 0 -2 -5]);
то выражение:
roots(p)
дает такой результат:
ans =
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
Defining the polyval Function for the DocPolynom Class (Определение функции polyval для класса DocPolynom)
MATLAB-функцияpolyvalоценивает полином в заданном множестве точек.DocPolynom-polyval-метод использует вложенный метод умножения или метод Горнера для уменьшения числа операций перемножения для расчета различных степенейx:
function y = polyval(obj,x) % DocPolynom-polyval-метод.
% polyval(obj,x) evaluates obj at the points x %
% (polyval(obj,x)оцениваетobjв точкахx).
y = 0;% Начальное значениеy.
for a = obj.coef % Цикл изменения переменнойa по
% числам коэффициентов полинома.
y = y.*x + a;% Формула расчетаy (для всехx при
% очередном значении a).
end
end % polyval
Defining the diff Function for the DocPolynom Class (Определение функции diff для класса DocPolynom)
MATLAB-функцияdiffнаходит производную от полинома.DocPolynom-diff-метод дифференцирует полином путем умножения каждого коэффициента на соответствующую ему степень переменной:
function q = diff(obj) % DocPolynom-diff-метод.
% diff(obj) is the derivative of the DocPolynom obj -
%diff(obj)есть производная отDocPolynom-объекта
% obj.
c = obj.coef;% передача коэффициентов полинома
% временной переменной c.
d = length(c) - 1; %degree(степень) – определение
% степени полинома путем вычитания нулевой степени
% независимой переменной.
q = DocPolynom(obj.coef(1:d).*(d:-1:1));% Форми-
% рованиеDocPolynom-объекта для производной;
% obj.coef(1:d).*(d:-1:1)- формула производной.
end % diff
Defining the plot Function for the DocPolynom Class (Определение функции plot для класса DocPolynom)
MATLAB-функцияplotсоздает линию графика. Переопределенная функцияplotдля классаDocPolynom(DocPolynom-plot-метод) выбирает область независимой переменной несколько большей, чем интервал, включающий все действительные корни. ЗатемDocPolynom-polyval-метод используется для оценки полинома в нескольких сотнях точек области изменения независимой переменной:
function plot(obj) % DocPolynom-plot-метод.
% plot(obj) plots the DocPolynom obj (plot(obj) строит
% график DocPolynom-объекта obj).
r = max(abs(roots(obj))); % Определение максимума
% из абсолютных значений корней (max,abs–MATLAB-
% функции, roots-DocPolynom-roots-метод.
x = (-1.1:0.01:1.1)*r;% Задание диапазона измененияx.
y = polyval(obj,x);% ВызовDocPolynom-polyval-метода.
plot(x,y);% ВызовMATLAB-функцииplot.
title(['y = ' char(obj)])% Внесение названия графика:
% y = «значениеchar(obj)для полином-объекта».
xlabel('X')% Внесение метки осиx(символX).
ylabel('Y','Rotation',0)% Внесение метки осиy
% (символ Y) с указанием возможности измененияy
% относительно 0; title, xlabel, ylabel - MATLAB-
% функции.
grid on %MATLAB-команда (нанесения сетки на график).
end%plot
Пример: использование следующих двух DocPolynom-объектовx(не путать с независимой переменнойx) иpвызывает большинство из рассмотренных методов:
x = DocPolynom([1 0]);% КонструированиеDocPolynom-
% объекта x.
p = DocPolynom([1 0 -2 -5]);% Конструирование
% DocPolynom-объектаp.
plot(diff(p*p + 10*p + 20*x) - 20) % Вызов
%DocPolynom-методаdiffдля синтетического полинома
% p*p + 10*p + 20*x) - 20(из объектовpиx)и обращение к
% DocPolynom-методу plotдля построения графика этого полинома
% (на рисунке xиXсоответствуют независимой переменной
% полинома и метки горизонтальной оси, Y– метка вертикальной оси
% – значения полинома для различных независимых переменных x):
Designing Related Classes(Создание связанных классов)
Темы раздела и их краткие характеристики.
Example — A Simple ClassИерархия классов, использованнаяHierarchy(Пример - простая для каталога финансовых активов иерархия классов)
Example — Containing AssetsКласс для содержания и управления
into a Portfolio (Пример – иерархией классов финансовых содержание активов вportfolio) активов
Example — A Simple Class Hierarchy (Пример – простая иерархия классов)
В этом разделе: |
Shared and Specialized Properties(Разделяемые и специализированные свойства);
|
В этом разделе (окончание): |
Designing a Class for Financial Assets (Разработка класса финансовых активов);
Displaying the Class Files (Отображение файлов класса);
Summary of the DocAsset Class (Резюме класса DocAsset);
The DocAsset Constructor Method (DocAsset-конструктор-метод);
The DocAsset Display Method (DocAsset-метод отображения);
Designing a Class for Stock Assets (Разработка класса для stock-активов)
Displaying the Class Files (Отображение файлов класса);
Summary of the DocStock Class (Резюме класса DocStock);
Designing a Class for Bond Assets (Разработка класса bond-активов);
Displaying the Class Files (Отображение файлов класса);
Summary of the DocBond Class (Резюме класса DocBond);
Designing a Class for Savings Assets (Разработка класса savings-активов)
Displaying the Class Files (Отображение файлов класса);
Summary of the DocSavings Class (Резюме класса DocSavings). |
Shared and Specialized Properties(Разделяемые и специализированные свойства)
Как пример того, что подклассы являются специализированными инстанциями более общих классов, рассмотрим класс активов (assets), который может быть использован для представления любой сущности, которая имеет денежную величину. Некоторые варианты активов – основные капиталы (stocks), долговые обязательства (bonds) и депозиты (savings). Данный пример определяет четыре класса –DocAssetи его подклассыDocStock,DocBondиDocSavings.
Класс DocAssetсодержит данные, которые являются общими для всех его специализированных подклассов. Подклассы наследуют свойства суперклассаDocAssetв дополнение к своим собственным свойствам. Подклассы представляют все вышеперечисленные типы активов.
Следующая диаграмма показывает свойства, определенные для классов активов.
Свойства
Унаследованные
свойства
Собственные
свойства
Унаследованные
свойства
Унаследованные
свойства
Собственные
свойства
Собственные
свойства
Классы DocStock,DocBondиDocSavingsнаследуют свойства из классаDocAsset. В этом примере классDocAssetобеспечивает хранение общих для всех подклассов данных и разделяет свои методы с этими подклассами.
Designing a Class for Financial Assets (Разработка класса финансовых активов)
Этот класс обеспечивает хранение и доступ к информации, общей для всех своих подклассов. Он не предназначениметь инстанции-объекты, поэтому ему не требуется много методов. Класс содержит следующие методы:
Конструктор;
Локальная функция установки для одного свойства.
Displaying the Class Files (Отображение файлов класса)
Open the DocAsset class definition file in the MATLAB Editor (Открыть файл определения класса DocAsset в редакторе MATLAB).
Summary of the DocAsset Class (Резюме класса DocAsset)
Класс определен в файле DocAsset.m, который вы должны поместить в @-директории с тем же именем. Её родительская директория должна быть наMATLAB-пути. Смотрите функциюaddpathдля дополнительной информации.
Следующая таблица содержит свойства, определенные для класса DocAsset.
DocAsset Class Properties (Свойства класса DocAsset):
Имя |
Класс |
По умолчанию |
Описание |
Description |
char |
'' |
Описание актива
|
CurrentValue |
double |
0 |
Текущая величина актива
|
Date |
char |
date |
Дата создания записи (устанавливается с помощью MATLAB-функцииdate)
|
Type |
char |
'savings' |
Тип актива (stock, bond, savings)
|
Следующая таблица показывает методы для класса DocAsset.
DocAsset Class Methods (Методы класса DocAsset):
Имя |
Описание |
DocAsset |
Конструктор класса
|
disp |
Отображает информацию об объекте
|
set.Type |
Локальная set-функция. При установке свойство проверяет корректность устанавливаемой величины
|
The DocAsset Constructor Method (DocAsset- конструктор-метод)
Хотя обычное назначение конструктора класса – создание объектов данного класса, в рассматриваемом случаеобъекты как инстанции классаDocAssetне формируются. Назначение конструктора классаDocAssetсостоит в организации интерфейса для его подклассов, т.е. в создании возможности обращения к этому конструктору из подклассов для формирования наследуемых суперкласс-частей (DocAsset-частей) их объектов. КлассDocAssetимеет четыре свойства, которые хранят общие для всех его подклассов данные. Вся дополнительная специфическая информация посылается конструктору классаDocAssetего подклассом. Данные свойстваDateявляются приватными и устанавливаютсяMATLAB-функциейdateтолько самимклассом вDocAsset-конструкторе при обращении к нему. Ниже показано назначение свойств класса:
Description – строка символов, которая описывает частный актив (например, stock-имя, savings-имя, bond-имя и т.д.). Устанавливается при обращении к DocAsset-конструктору.
Date – дата создания объекта подкласса. Это свойство имеет приватный допуск и назначается автоматически MATLAB-командой date внутри DocAsset-конструктора при обращении к нему.
Type – тип актива (например, savings, bond, stock). Локальная set-функция для этого свойства обеспечивает контроль ошибок при любом обращении к DocAsset-конструктору для установки значения этого свойства.
CurrentValue – текущая величина актива, устанавливаемая при обращении к DocAsset-конструктору.
Property Definition Block (Блок определения свойств)
Следующий код показывает определение свойств класса DocAsset. Следует учесть, что величина свойстваType ограничена одной из строкbond,stockилиsavings:
properties
Description = '';
CurrentValue = 0;
end
properties(SetAccess = private)
Date = date; % date function sets value (Функция date
% устанавливает величину); независимо от начальной
% величины Dateэто свойство будет установлено при
% обращении подкласса к DocAsset-конструктору.
Type = 'savings'; % Независимо от начальной величины
% Type это свойство будет установлено при обращении
% подклассом к DocAsset-конструктору.
end
Constructor Method Code(Код конструктор-метода)
Как было сказано выше, вы не обязаны конструировать объект этого класса. Вы просто назначаете величины компонентам выходного аргумента a (в конструкторе ниже) конструктора, который представляет собой создаваемую суперкласс-часть объекта подкласса по умолчанию (эта суперкласс-частьaсоздается раньше, чем будут назначены её свойства):
function a = ... DocAsset(description,type,current_value)
% DocAsset constructor function (Функция DocAsset-
% конструктора); объектaсоздается автоматически до
% назначений его свойств:
a.Description = description;
a.Date = date;
a.Type = type;
a.CurrentValue = current_value;
end % DocAsset
Set Function for Type Property (Set-функция для свойства Type)
В данном классе только три типа активов - bond,stockиsavings. Поэтому возможные величины свойстваTypeограничены одной из трех перечисленных строк посредствомset-функции:
function obj = set.Type(obj,type) % Set-функция.
% Ниже производится проверка на соответствие типу:
if ~(strcmpi(type,'bond') || strcmpi...
(type,'stock') ||strcmpi(type,'savings'))
error('Type must be either bond, stock,...
or savings') % Вызов MATLAB-функции error
% для вывода сообщения: «Tип должен бытьbond,stock
% или savings».
end
obj.Type = type;% Назначение величины свойствуType,
% если проверка на тип прошла успешно.
end % Type set function (Функция set.Тype)
MATLABвызывает функциюset.Typeпри любой попытке установить свойствоType- в класс-конструкторе или при начальном назначении величины. Поэтому следующее выражение продуцирует ошибку:
properties
Type = 'cash';
end
Исключение составляет сама функция set.Type, где выражение:
obj.Type = type;
не обусловливаетрекурсивный вызовset.Type.
The DocAsset Display Method (DocAsset-метод отображения)
DocAsset-метод отображения (disp)запланирован для вызова из подкласс-методов. Его цель – отображение данных для объектов-потомков. Метод просто форматирует данные для отображения способом, согласованным сdisp-методом объектов-потомков:
function disp(a)% DocAsset-disp-метод.
% Display a DocAsset object (Отображение DocAsset-
% объекта).
fprintf('Description: %s\nDate: %s\nType: %s\nCurrentValue:%9.2f\n',a.Description,...
a.Date,a.Type,a.CurrentValue); % MATLAB-
% функцияfprintf выводит четыре составляющих.
end% disp
Disp-методы отображенияDocAsset-подклассов могут теперь вызывать этотDocAsset-disp-метод для отображения данных, хранящихся в родительском классеDocAsset. Такой подход изолируетdisp-метод подкласса от изменений классаDocAsset, если таковые потребуются.
Designing a Class for Stock Assets (Разработка класса для stock-активов)
Одним из типов активов являетсяstock. Класс (DocAsset-подкласс), запланированный для хранения и управления информацией оstock-активах, содержит следующие данные:
Число акций;
Цена акции.
Дополнительно базовый класс DocAssetхранит основную информацию, включающую описание частного актива, дату создания записи, тип актива и его текущую величину.
Displaying the Class Files (Отображение файлов класса)
Open the DocStock class definition file in the MATLAB Editor (Открыть файл определения класса DocStock в редакторе MATLAB).
Для пользования классов создайте директорию @DocStockи поместите в неё файлDocStock.m. Родительская директория для@DocStockдолжна быть наMATLAB-пути.
Summary of the DocStock Class (Резюме класса DocStock)
Этот класс определен в одном файле DocStock.m, который должен быть расположен в @-директории с тем же именем. Её родительская директория
должна быть на MATLAB-пути. Смотрите функциюaddpathдля дополнительной информации.
Напомним, что DocStockявляетсяDocAsset-подклассом.
Следующая таблица содержит свойства класса DocStock.
DocStock Class Properties (Свойства класса DocStock):
Имя |
Класс |
По умолчанию |
Описание |
NumShares |
double |
0 |
Число акций конкретного stock-актива
|
SharePrice |
double |
0 |
Цена акции
|
Свойства, наследуемые от класса DocAsset | |||
Description |
char |
'' |
Описание актива
|
CurrentValue |
double |
0 |
Текущая величина актива
|
Date |
char |
date |
Дата создания записи (устанавливается функцией date)
|
Type |
char |
'' |
Тип актива (stock, bond, savings) |
Следующая таблица включает методы класса DocStock.
DocStock Class Methods (Методы класса DocStock):
Имя |
Описание
|
DocStock |
Класс-конструктор
|
disp |
Отбражает информацию об объекте
|
Specifying the Base Class (Спецификация базового класса)
Символ «<» в classdef-линии определенияDocStock задает его как подкласс-инстанцию базового классаDocAsset:
classdef DocStock < DocAsset
Property Definition Block (Блок определения свойств)
Следующий код показывает определение собственных свойств класса DocStock:
properties
NumShares = 0;
SharePrice = 0;
end
Using the DocStock Class (Использование класса DocStock)
Допустим, что вы хотите создать запись о stock-активе для 200 акций компанииXdotcomпо цене $23.47 за каждую.
Вызовите функцию-метод DocStock-конструктора со следующими аргументами:
Stock-имя или описание;
Число акций;
Цена акции.
Например, следующее выражение:
XdotcomStock = DocStock('Xdotcom',200,23.47);
создает DocStock-объектXdotcomStock, который содержит информацию оstock-активе корпорацииXdotcom(описаниеstock-актива илиstock-имя). Актив содержит200акций по цене$23.47 за каждую.
The DocStock Constructor Method(DocStock-конструктор-метод)
Конструктор класса DocStockпутем вызоваDocAsset-конструктора сначала создает суперкласс-частьDocStock-объекта, так как последний выведен из классаDocAsset(см.The DocAsset Constructor Method -DocAsset-конструктор-метод). ЗатемDocStock-конструктор возвращает весьDocStock-объект после установки величин для его двух ненаследуемых (собственных) свойств:
function s = DocStock(description,...
num_shares,share_price)
s = s@DocAsset(description,'stock',...
share_price*num_shares); % Суперкласс-часть
%DocStock-объекта s.
s.NumShares = num_shares;% Назначение для свойства
% NumSharesDocStock-объекта s.
s.SharePrice = share_price;% Назначение для свойства
% SharePrice DocStock-объекта s.
end % DocStock
The DocStock disp Method (DocStock-disp-метод)
Когда вы, например, используете выражение (без ограничителя «;»):
XdotcomStock = DocStock('Xdotcom',100,25)
MATLABпосле созданияDocStock-объекта находит (в директории@DocStock)disp-метод классаDocStock. Этот метод генерирует такой вывод:
Description: Xdotcom
Date: 17-Nov-1998
Type: stock
Current Value: 2500.00
Number of shares: 100
Share price: 25.00
Ниже представлен DocStock-методdisp. Он использует базовыйdisp-метод классаDocAsset для отображения основных наследуемых свойств и встроенную функциюfprintfдля отображения дополнительных специфических сведений:
function disp(s)% Disp-метод класса DocStock.
disp@DocAsset(s)% Отображение суперкласс-части
% DocStock-объекта s.
fprintf('Number of shares: %g\nShare price: ...
%3.2f\n',s.NumShares,s.SharePrice); % Отобра-
% жение собственных свойств подклассаDocStock.
end % disp
Designing a Class for Bond Assets (Разработка класса bond-активов)
Класс DocBondаналогичен классуDocStockв том, что он выведен из классаDocAssetдля представления специального типа актива. Таким образом, он наследует базовые параметры классаDocAssetи включает свои дополнительные элементы, отображающие особенности активов типаbond.
Displaying the Class Files (Отображение файлов класса)
Open the DocBond class definition file in the MATLAB Editor (Открыть файл определения класса DocBond в редакторе MATLAB).
Для использования класса создайте директорию @DocBondи поместите на ней файлDocBond.m. Её родительская директория должна быть наMATLAB-пути. Смотрите функциюaddpathдля дополнительной информации.
Summary of the DocBond Class (Резюме класса DocBond)
Данный класс определен в одном файле DocBond.m, который располагается на @-директории с тем же именем. Её родительская директория должна быть наMATLAB-пути.
Как и DocBond, классDocStockявляется подклассом классаDocAsset.
Ниже представлена таблица свойств класса DocBond.
DocBond Class Properties (Свойства класса DocBond):
Имя |
Класс |
По умолчанию |
Описание
| ||
FaceValue |
double |
0 |
Номинальная стоимость bond-актива
| ||
Yield |
double |
0 |
Прибыль
| ||
CurrentBondYield |
double |
0 |
Текущая прибыль
| ||
Свойства, унаследованные от класса DocAsset | |||||
Description |
char |
'' |
Описание актива
|
DocBond Class Properties (Свойства класса DocBond) – окончание:
Имя |
Класс |
По умолчанию |
Описание
|
CurrentValue |
double |
0 |
Текущая величина актива
|
Date |
char |
date |
Дата создания записи (устанавливается с помощью MATLAB-функцииdate)
|
Type |
char |
'' |
Тип актива (stock, bond, savings)
|
Следующая таблица показывает методы класса DocBond.
DocBond Class Methods (Методы класса DocBond):
Имя |
Описание
|
DocBond |
Конструктор класса
|
disp |
Отображает информацию об объекте и вызывает DocAsset-методdisp
|
calc_value |
Функция-утилита для расчета текущей bond-величины
|
Specifying the Base Class(Спецификация базового класса)
Символ «<» в classdef-линии определенияDocBondзадает его как подкласс-инстанцию базового классаDocAsset:
classdef DocBond < DocAsset
Property Definition Block (Блок определения свойств)
Следующий код показывает определение DocBond-свойств:
properties
FaceValue = 0;
Yield = 0;
CurrentBondYield = 0;
end
Using the DocBond Class (Использование класса DocBond)
Допустим, что вы хотите создать запись об активе, которая содержит bond-актив сbond-именем xyzbond, номинальной стоимостью $100 и текущей прибылью 4.3 %. Текущая прибыль для эквивалентныхbond-активов на сегодня составляет 6.2 %, что означает, что рыночная величина этого частногоbond-актива меньше его номинальной стоимости.
Вызовите DocBond-конструктор со следующими аргументами:
Bond-имя или описание;
Номинальная стоимость bond-актива;
Прибыль bond-актива;
Текущая прибыль эквивалентных активов (используемая для расчета текущей величины актива).
Например, следующее выражение:
b = DocBond('xyzbond',100,4.3,6.2);
создает DocBond-объектb, который содержит информацию оbond-активе с именемxyzbond, номинальной стоимостью $100, прибылью 4.3 % и текущей прибылью таких активов 6.2 %, используемой для расчета текущей величины актива.
Заметка. Расчеты, выполненные в этом примере, даются только для иллюстрации и не предлагают действительные действия по денежным инвестициям.
|
The DocBond Constructor Method(DocBond-коструктор-метод)
Метод DocBond-конструктора требует четыре аргумента:
function b = DocBond(description, face_value,...
yield,current_yield) % Конструктор DocBond-
% объекта.
market_value =...
DocBond.calc_value(face_value,...
yield,current_yield); % Вызов DocBond-метода
%calc_value. Далее следует формирование
% суперкласс-части объекта b:
b =...
b@DocAsset(description,'bond',market_value);
% Теперь можно сделать дополнительные назначения:
b.FaceValue = face_value;
b.Yield = yield;
b.CurrentBondYield = current_yield;
end % DocBond
The calc_value Method (Метод calc_value)
Класс DocBondопределяет рыночную величинуbond-актива, используя простую формулу, которая масштабирует номинальную стоимость через отношение прибылиbond-актива к текущей прибыли для эквивалентного актива.
Расчет рыночной величины актива требует, чтобы прибыль была не нулевая, а положительная. Поскольку DocBond-методcalc_valueне выводит сообщение об ошибке в случае неправильной прибыли, нужно быть уверенным, что некорректная прибыль не используется при расчетах рыночной величины.
Рыночная величина (market_value) актива посылается базовомуDocAsset-конструктору, когда тот вызывается внутриDocBond-конструктора.DocBond-методcalc_valueимеет свой атрибутStatic, установленный вtrue, поскольку он не принимаетDocBond-объект как входной параметр:
methods (Static)
function market_value =...
calc_value(face_value,yield,...
current_yield)
if current_yield <= 0 || yield <= 0
market_value = face_value;
else
market_value =...
face_value*yield/current_yield;
end
end % calc_value
end % methods
The DocBond disp Method (DocBond-disp-метод)
Когда вы используете, например, следующее выражение (без точки с запятой):
b = DocBond('xyzbond',100,4.3,6.2)
MATLABпосле созданияDocBond-объектаb находитDocBond-методdispв директории @DocBond. Этот метод продуцирует такой вывод:
Description: xyzbond
Date: 17-Nov-1998
Type: bond
Current Value: $69.35
Face value of bonds: $100
Yield: 4.3%
Ниже функция dispраскрывает данныйDocBond-метод. Базовые параметрыDocBond-объекта (Description,Date,Type,Current Value) отображаются с помощьюDocAsset-методаdisp (командаdisp@DocAsset(b)). Затем используетсяMATLAB-функцияfprintfдля отображения на экране дополнительных свойствFaceValueиYield:
function disp(b)
disp@DocAsset(b) % Call DocAsset disp method (Вызов
% DocAsset-disp-метода).
fprintf('Face value of bonds: $%g\nYield:...
%3.2f%%\n', b.FaceValue,b.Yield);
end % disp
Designing a Class for Savings Assets (Разработка класса savings-активов)
Класс DocSavingsаналогичен классамDocStockиDocBondв том, что выведен из классаDocAssetдля представления специфического типа активов.
Displaying the Class Files (Отображение файлов класса)
Open the DocSavings class definition file in the MATLAB Editor (Открыть файл определения класса DocSavings в редакторе MATLAB).
Для использования класса создайте директорию @DocSavingsи сохраните в ней файлDocSavings.m. Родительская директория для@DocSavingsдолжна быть наMATLAB-пути.
Summary of the DocSavings Class (Резюме класса DocSavings)
Этот класс определен в одном файле DocSavings.m, который вы должны разместить в @-директории с тем же именем. Её родительская директория
должна быть на MATLAB-пути. Смотрите функциюaddpathдля более полной информации.
Ниже приведена таблица, содержащая свойства класса DocSavings.
DocSavings Class Properties (Свойства класса DocSavings):
Имя |
Класс |
По умолчанию |
Описание
|
InterestRate |
double |
'' |
Текущая процентная ставка savings-актива
|
Свойства, унаследованные от класса DocAsset
| |||
Description |
char |
'' |
Описание актива
|
CurrentValue
|
double |
0 |
Текущая величина актива |
Date |
char |
date |
Дата создания записи (устанавливается MATLAB-функциейdate)
|
Type |
char |
'' |
Тип актива (stock, bond, savings)
|
Следующая таблица представляет методы класса DocSavings.
DocSavings Class Methods (Методы класса DocSavings)
Имя |
Описание
|
DocSavings |
Конструктор класса
|
disp |
Вызывает DocAsset-методdispи отображает информацию об объекте
|
Specifying the Base Class(Спецификация базового класса)
Символ «<» вclassdef-линии DocSavings-определения указывает на его базовый классDocAsset:
classdef DocSavings < DocAsset
Property Definition Block (Блок определения свойств)
Данный код показывает определение специфического свойства класса DocSavings:
properties
InterestRate = 0;
end
Using the DocSavings Class (Использование класса DocSavings)
Предположим, вы хотите создать запись, которая содержит savings-актив с текущим балансом $1000 и процентной ставкой 2.9 %.
Вызовите функцию DocSavings-конструктора со следующими аргументами:
Описание (название) банковского счета;
Баланс актива;
Процентная ставка по активу.
Например, выражение:
sv = DocSavings('MyBank',1000,2.9);
создает DocSavings-объектsv, который содержит информацию о счетеMyBankс балансом $1000 и процентной ставкой 2.9 %.
The DocSavings Constructor Method (DocSavings- конструктор-метод)
Процентная ставка savings-счета хранится в свойствеInterestRateклассаDocSavings. Описание актива и текущая величина (баланс счета) хранятся в наследуемых свойствах (DocAsset-частьDocSavings-объекта).
DocSavings-конструктор вначале вызывает базовый класс (командаs@DocAsset, файлDocAsset.m) для создания суперкласс-частиDocSavings-объекта. Затем назначает величину собственному свойствуInterestRateподклассаDocSavings:
function s = DocSavings(description,...
balance,interest_rate)
s = s@DocAsset(description,'savings',balance);
% (Аргумент'savings', соответствующий типу
% DocSavings-объекта, требуетсяDocAsset- конструктору.
s.InterestRate = interest_rate;
end % DocSavings
The DocSavings disp Method (DocSavings-disp-метод)
Когда, например, вы набираете выражение (не ограниченное точкой с запятой):
sv = DocSavings('MyBank',1000,2.9)
MATLABпосле созданияDocSavings-объектаsvнаходитDocSavings-методdisp(в директории@DocSavings). Этот метод продуцирует такой вывод:
Description: MyBank
Date: 17-Nov-1998
Type: savings
Current Value: $1000
Interest Rate: 2.9%
Ниже показан код DocSaving-disp-метода. Вначале для отображения суперкласс-части (Description, Date, Type, Current Value) DocSaving-объекта вызывается метод disp класса DocAsset. Затем используетсяMATLAB-функцияfprintfдля отображения специфического свойстваInterestRateкласса DocSaving:
function disp(b)
disp@DocAsset(b) % Call DocAsset disp method (Вызов
% DocAsset-метода disp).
fprintf('Interest Rate:...
%3.2f%%\n',s.InterestRate); % MATLAB-команда.
end % disp
Example — Containing Assets into a Portfolio (Пример – содержание активов в portfolio)
Агрегирование классов означает включение одного класса в другой. Базовое отношение при этом состоит в том, что каждый включенный класс «есть часть» включающего (контейнерного) класса.
Например, рассмотрим класс финансовых объектов (portfolio-объектов) как портфеля-контейнера для множества типов активов (stock,bond,savingsи т.д.). Он может группировать, анализировать и возвращать полезную информацию об индивидуальных активах.Portfolio-объекты не являются общедоступными любым внешним программам, а только с помощью методов данного классаportfolio-контейнера.
Example — A Simple Class Hierarchy(Пример – простая иерархия классов) содержит информацию об активах, объединяемых в такомportfolio-классе.
Designing the DocPortfolio Class (Разработка класса DocPortfolio)
Класс DocPortfolio(portfolio-класс) разработан для объединения различных активов в видеDocPortfolio-объектов и для обеспечения информации об их статусе или инвестиционных возможностях. Данный пример исполняет некоторый упрощенныйportfolio-класс, который:
Содержит индивидуальные активы;
Отображает информацию о содержании portfolio-контейнера;
Отображает 3-D-диаграмму, показывающую соотношение активов разных типов (тип-активов) вportfolio.
Displaying the Class Files (Отображение файлов класса)
Open the DocPortfolio class definition file in the MATLAB Editor (Открыть файл определения класса DocPortfolio в редакторе MATLAB).
Для использования класса создайте директорию @DocPortfolioи сохраните в ней файлDocPortfolio.m. Родительская директория для@DocPortfolioдолжна быть наMATLAB-пути.
Summary of the DocPortfolio Class (Резюме для класса DocPortfolio)
Этот portfolio-класс определен в одном файлеDocPortfolio.m, который должен быть расположен в @-директории с тем же именем. Родительская директория для@DocPortfolioдолжна быть наMATLAB-пути. Смотрите функциюaddpathдля дополнительной информации.
Ниже приведена таблица свойств класса DocPortfolio. Поскольку данный класс не выведен из других классов, он не имеет наследуемых свойств.
DocPortfolio Class Properties (Свойства класса DocPortfolio):
Имя |
Класс |
По умолчанию |
Описание
|
Name |
char |
'' |
Имя объекта, владеющего portfolio(портфель активов)
|
IndAssets |
cell |
{} |
Массив ячеек, содержащий индивидуальные активы (актив- или asset-объекты) |
TotalValue |
double |
0 |
Величина всех активов (рассчитывается в конструктор-методе класса DocPortfolio)
|
AccountNumber |
char |
'new' |
Буквенно-цифровой идентификатор, назначаемый автоматически, когда DocPortfolio-объект создается в первый раз |
Следующая таблица показывает методы класса DocPortfolio.
DocPortfolio Class Methods (Методы класса DocPortfolio):
Имя |
Описание |
DocPortfolio |
Конструктор класса
|
disp |
Вызывает DocAsset-методdispи отображает информацию об объекте
|
pie3 |
Переопределяет MATLAB-функцииpie3с целью принятияDocPortfolio-объекта как единственного аргумента |
saveport |
Вызывается всегда, когда вы сохраняете DocPortfolio-объект; добавляет номер счета к объекту
|
getAccountNumber
|
Содает алфавитно-цифровой идентификатор для конкретного DocPortfolio-объекта
|
Property Definition Block (Блок определения свойств)
Следующий код показывает определение свойств класса DocPortfolio:
properties
Name = '';
end
properties (SetAccess = private)
IndAssets = {};
TotalValue = 0;
AccountNumber = 'new';
end
How Class Properties Are Used (Как использовать свойства класса)
Name– хранит имяDocPortfolio-объекта как строку символов. Имя объекта посылается конструктору классаDocPortfolioкак входной аргумент.
IndAsset– массив ячеек, который содержитaктив-объекты разных типов (т.е. тип-объекты классовDocStock,DocBondиDocSavings). Этиaктив-объекты посылаются кDocPortfolio-конструктору как входные аргументы и назначаются свойствуIndAssetклассаDocPortfolioвнутриDocPortfolio-конструктора. Допуск (атрибутSetAccess) к данному свойству установлен какprivate.
TotalValue– хранит суммарную величину активовDocPortfolio-объекта. Конструктор классаDocPortfolioопределяет величину каждого актива путем запроса их свойствCurrentValueи суммирует результат. Допуск к свойствуTotalValueограничен его атрибутомSetAccess=private.
AccountNumber – содержание этого свойства известно только классуDocPortfolioи его инстанциям-объектам, так как атрибутSetAccessсвойства установлен вprivate.
Using the DocPortfolio Class (Использование классаDocPortfolio)
Класс DocPortfolioразработан для обеспечения информации о финансовых активахDocPortfolio-объектов. Имеются три типа активов, которыми можно обладать:stock,bondиsavings.
Первым шагом является создание объектов всех типов активов, находящихся во владении конкретного DocPortfolio-объекта, и самогоDocPortfolio-объекта (portfolio-инстанции), например:
XYZStock = DocStock('XYZ Stocks',200,12.34);
USTBonds = DocBond('U.S. Treasury...
Bonds',1600,3.2,2.8);
SaveAccount = DocSavings('MyBank Acc #...
123',2000,6);
VictoriaSelna = DocPortfolio('Victoria Selna',...
XYZStock,...
SaveAccount,...
USTBonds)
DocPortfolio-объект VictoriaSelna автоматически выдает следующую информацию:
Assets for Client: Victoria Selna
Description: XYZStock
Date: 24-Nov-1998
Current Value: $2468.00
Type: stock
Number of shares: 200
Share price: $12.34
Description: U.S. Treasury Bonds
Date: 24-Nov-1998
Face value of Bond: $1600.00
Current Value: $1828.57
Type: bond
Interest Rate: 3.2%
Description: MyBank Acc # 1234
Date: 24-Nov-1998
Current Value: $2000.00
Type: savings
Interest Rate: 6%
Total Value: $6296.57
The DocPortfolio pie3 Method (DocPortfolio-pie3-метод) дает графическое отображение portfolio-компонентов (долей тип-активов).
The DocPortfolio Constructor Method (DocPortfolio-конструктор-метод)
DocPortfolio-метод конструктора принимает как входные аргументы имя (name)DocPortfolio-объекта (клиента) и список (varargin) переменной длины тип-объектов (классовDocStock,DocBondиDocSavingsв данном примере).
Свойство IndAssetsбазового классаDocPortfolio есть массив ячеек, используемый для хранения всех тип-объектов. Из этих объектов конструктор классаDocPortfolioопределяет общую величину всех активов. Эта величина содержится в свойствеTotalValueбазового класса:
function p = DocPortfolio(name,varargin)
p.Name = name;
for k = 1:length(varargin)
p.IndAssets{k} = {varargin{k}};
asset_value = p.IndAssets{k}{1}.CurrentValue;
p.TotalValue = p.TotalValue + asset_value;
end
end % DocPortfolio
The DocPortfolio disp Method (DocPortfolio-disp-метод)
DocPortfolio-метод disp с помощью MATLAB-функции fprintf сначала отображает имя (Name) DocPortfolio-объекта (клиента Client). Затем по очереди (циклfor -endдляdisp) отображает содержание каждого тип-объекта путем вызова частныхdisp-методов этих объектов. После этого выводится общая величина активов (повторный вызовMATLAB-функцииfprintf):
function disp(p)
fprintf('\nAssets for Client: %s\n',p.Name);
for k = 1:length(p.IndAssets)
disp(p.IndAssets{k}{1}) % Dispatch to corresponding
%disp(Отправка к соответствующим методамdisp).
end
fprintf('\nTotal Value: ... $%0.2f\n',p.TotalValue);
end % disp
The DocPortfolio pie3 Method (DocPortfolio-pie3-метод)
Класс DocPortfolioпереопределяет стандартнуюMATLAB-функциюpie3для принятияportfolio-объекта и отображения 3-D-чертежа, иллюстрирующего относительное содержание активовportfolio-объекта.MATLABвызывает переопределенную версиюpie3(в директории@DocPortfolio) каждый раз, когда входным аргументом такой функции являетсяportfolio-объект:
function pie3(p)
% Step 1: Get the current value of each asset (Шаг 1: Получение
% текущей величины каждого актива):
stock_amt = 0; bond_amt = 0; savings_amt = 0;
for k = 1:length(p.IndAssets)
if isa(p.IndAssets{k},'DocStock')
stock_amt = stock_amt +...
p.IndAssets{k}.CurrentValue;
elseif isa(p.IndAssets{k},'DocBond')
bond_amt = bond_amt +...
p.IndAssets{k}.CurrentValue;
elseif isa(p.IndAssets{k},'DocSavings')
savings_amt = savings_amt +...
p.IndAssets{k}.CurrentValue;
end % if
end % for
% Step 2: Create labels and data for the pie graph (Шаг 2: Создание метки
% и даты дляpie-чертежа):
k = 1;
if stock_amt ~= 0
label(k) = {'Stocks'};
pie_vector(k) = stock_amt;
k = k + 1;
end % if
if bond_amt ~= 0
label(k) = {'Bonds'};
pie_vector(k) = bond_amt;
k = k + 1;
end % if
if savings_amt ~= 0
label(k) = {'Savings'};
pie_vector(k) = savings_amt;
end % if
% Step 3: Call pie3, adjust fonts and colors (Шаг 3: Вызов pie3,
% подгонка шрифтов и цветов) – вызов стандартнойMATLAB-
% функции pie3:
pie3(pie_vector,label);set(gcf,'Renderer',...
'zbuffer')
set(findobj(gca,'Type','Text'),...
'FontSize',14,'FontWeight','bold')
colormap prism
stg(1) = {['Portfolio Composition for...
',p.Name]};
stg(2) = {['Total Value of Assets: ...
$',num2str(p.TotalValue,'%0.2f')]};
title(stg,'FontSize',10)
end % pie3
В данном DocPortfolio-методеpie3 три части:
Шаг 1 – запрос на свойства CurrentValueкаждого тип-актива вDocPortfolio-объекте и определение суммарного значения;
Шаг 2 – создание меток и вектора данных pie-чертежаportfolio-объекта;
Шаг 3 – вызов MATLAB-функцииpie3для коррекции шрифта и карты цветов и добавления названия.
Visualizing a Portfolio (Portfolio-визуализация)
Вы можете использовать DocPortfolio-объект для презентации индивидуального финансовогоportfolio-клиента. Например, имея следующие три тип-актива и общийDocPortfolio-объект:
XYZStock = DocStock('XYZ Stocks',200,12.34);
USTBonds = DocBond('U.S. Treasury...
Bonds',1600,3.2,2.8);
SaveAccount = DocSavings('MyBank Acc #...
123',2000,6);
VictoriaSelna = DocPortfolio('Victoria Selna',...
XYZStock,...
SaveAccount,...
USTBonds);
вы можете использовать метод pie3класса DocPortfolioдля отображения соотношения тип-активов какpie-чертеж:
pie3(VictoriaSelna)
MATLABавтоматически выдает следующий результат:
Examples(Примеры)
Используйте следующий список для поиска различных примеров в MATLAB-доументации.
How to Develop Your Class(Как разработать ваш класс):
Developing Classes — Typical Workflow(Разработка классов – типовой процесс).
Using Objects in Functions(Использование объектов в функциях):
Using Objects to Write Data to a File(Использование объектов для внесения данных в файл).
Defining MATLAB Classes (Определение MATLAB-классов):
Example — Representing Structured Data(Пример – представление структурированных данных);
Example — Implementing Linked Lists(Пример – исполнение связных списков);
Example — Class for Graphing Functions(Пример – класс для графических функций);
Subclassing hgsetget(Созданиеhgsetget-подклассов);
Example — Class Method as a Slider Callback (Пример – метод класса как сallback-регулятор);
Example — Using Events to Update Graphs(Пример – использование событий для обновления графиков).
Defining a Value Class (Определение value-класса):
Example — A Polynomial Class (Пример – класс полиномов).
Designing Related Classes (Создание связанных классов):
Example — A Simple Class Hierarchy (Пример – простая иерархия классов).
Containing Other Classes (Включение других классов):
Example — Containing Assets into a Portfolio (Пример – содержание активов в portfolio).