Elseif isa(a,'polynom')
p = a;
Else
p.c = a(:).';
p = class(p,'polynom');
End
Данный конструктор создает полином из заданного вектора, содержащего коэффициенты полинома при убывающих степенях x. Если же в конструктор не передавать никакого аргумента, то будет создан "пустой" полином.
Сначала в конструкторе проверяется количество аргументов, и если оно равно нулю, то создается пустой полином. Точнее, создается структура p, содержащая единственное поле c, которое и будет содержать пустой вектор коэффициентов полинома. Затем из этой структуры конструируется сам объект при помощи встроенной функции class(). У этой функции есть два обязательных параметра. Первый - структура, которая будет представлять данные объекта, а второй - текстовая строка, содержащая имя создаваемого класса. Оно должно совпадать с именем конструктора и папки, его содержащей (с добавлением символа '@' в начале имени папки).
Если при вызове конструктора аргумент был задан, то проверяется тип этого аргумента. В том случае, когда был задан объект того же класса (так называемый copy-constructor), создается его копия при помощи оператора присваивания. Проверка класса переданного объекта осуществляется по его имени, при помощи функции isa() (является).
Наконец, если передан был обычный массив, то он копируется в поле p.c создаваемой структуры и, затем, из нее конструируется объект класса так же, как и в первом случае.
Подобная последовательность действий является обязательной для конструктора объектов. Естественно, структура, хранящая данные объекта, может быть создана сколь угодно сложной - с произвольным набором полей.
Отметим, что за пределами методов данного класса, функциями class() и isa() тоже можно активно пользоваться. В этом случае, первая из них может принять только один аргумент - объект и возвращает текстовую строку - имя класса заданного объекта. Например, для заданного вещественного вектора эта функция вернет строку 'double'.
Часто бывает необходимо преобразовать объект одного класса к другому классу. Например, может понадобиться преобразовать созданный нами полином обратно в вектор его коэффициентов. Чтобы обеспечить такую возможность, нужно создать для исходного класса (полинома в нашем примере) специальную функцию-конвертор. Имя этой функции (и имя ее m-файла) должно совпадать с именем класса, к которому она будет преобразовывать исходный объект. Для нашего примера понадобиться следующая функция:
function c = double(p)
%@polynom/double.m.
c = p.c;
Теперь, в сессии MATLAB мы можем преобразовывать вектора в полиномы и обратно:
" P = polynom([1 -2 7]);
" double(p)
ans =
1 -2 7
Другим частым преобразованием является преобразование к текстовому виду (метод char()) для нужд распечатки объекта. В примере с полиномом этот метод (@polynom/char.m) мог бы порождать строку 'x^3 - 2*x + 7'.
Преобразование к тексту используется в другом методе, которой желательно реализовать в каждом создаваемом новом классе. Это метод display() - он вызывается всякий раз, когда MATLAB нужно распечатать содержимое объекта. Главным образом это происходит, когда в среде MATLAB введено выражение не завершенное точкой с запятой.
Дата добавления: 2015-01-18 | Просмотры: 582 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|