Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Инкапсуляция (Encapsulation of Data and Methods)



- Перезагрузка функций и операций (Function and operator overloading)

- Наследование (Single and Multiple Inheritance )

- Агрегирование ( Aggregation )

3) В чем отличие «создать класс » и «создать объект»? Объект - это эк­земпляр класса. Класс - это абстрактная сущность. Рассмотрим последо­вательность создания класса в среде MATLAB на примере класса ро-lynom, подробно описанном в справочной документации по пакету. • Один из первых шагов создания нового класса - выбор структуры данных для использования в классе. Объекты хранят свои данные в структурах. Все поля структуры, хранящей данные класса, являются скрытыми (private), т. е. их поля доступны только для методов дан­ного класса и ею потомков Напрямую в выражениях их использовать нельзя.

• Объекты нового класса создаются при помощи специальной функции-конструктора класса. Re имя должно совпадать с названием класса. В рассматриваемом примере это функция polynom, описанная в файле

polynom.m.

• Класс содержит функции-методы для работы с его объектами, реали­зованные с помощью М-файлов. Функция-метод - это функция, один из аргументов которой - объект данного класса. Имя М-файла - имя действия, реализованного функцией, описанной в этом файле. Напри­мер, для сложения двух полиномов должна быть реализована функция сложения, т. е. должен существовать файл pi us. m.

• Функции-методы класса должны размещаться в специальной паике-контейнерс каталоге с именем...\@className. Имя наминается с символа ' @', а в остальном должно совпадать с именем класса И MATLAB класс - это папка, функции-методы класса - это М-фанлы, находящиеся в этом каталоге.

• Методы класса можно вызывать откуда угодно.

• Для работы с классом текущий каталог Current Directory дол­жен быть открыт на папке, содержащей папку @className.

• Папка GclassName должна входить в каталог, определенный в пути поиска Search Path среды MATLAB. Саму папку-контеннер мето­дов добавлять в путь MATLAB не нужно. Например, если класс ро-lynom находится в с: \temp\@polynom, то необходимо ввести командную строку » addpath c: \temp

• В классах существуют скрытые частные (private) функции, разме­щаемые в папке @className\private\. Все файлы, находящиеся в этом подкаталоге, доступны только внутри методов данного класса. Пользователь не может их вызывать из командной строки или из дру­гих каталогов. Private-функции не имеют в качестве входного аргу­мента объект класса. Private-функции обычно используются как вспо­могательные функции для реализации задач класса и не оперируют непосредственно с объектом класса.

• После каждого переопределения класса (изменение названия или чис­ла полей класса, редактирование функций) необходимо ввести изме­нения в сеанс МАТ1.АВ, для чего подается команда » clear classes Эта команда удаляет из памяти MATI.AB «старое» опреде-ление класса а также очищает рабочее пространство Workspace

4) В MATLAB существует ряд функций (табл. 5.3), позволяющих ра­ботать с классами, а также проверять принадлежность объекта какому-либо классу.

Таблица 5.3. Функции дли pa6oiu с классами

Функция Описание
class(р) Определение класса объекта
isa(p, 'polynom') Проверка при надежности объекта данно­му класс\
isobject(р) Выявление принадлежности объекта како­му-либо классу MATLAB
methods ('polynom') Вывод списка методов для данного класса
whos p Вывод подробной информации об объекте

 

5) Язык программирования МАТЛАВ не имеет декларации новых классов и типов. Объекты класса создаются в момент вызова функции-конструктора этою класса. Таким образом, функция-конструктор - это первая функция, которая должна быть определена при создании нового класса и размещена в папке-контейнере класса. Имя функции-конструктора совпадает с названием класса и разметается в М-файле с аналогичным именем.

Рассмотрим пример конструктора, создающего объекты класса polynom. Этот конструктор должен находиться в М-файле @polynom/polynom.m. Данный конструктор создает полином из за­данного вектора коэффициентов полинома при убывающих степенях пе­ременной

function р = polynom(а)

%POLYNOM Polynomial class constructor. % p = POLYNOM(v) if nargin == 0 p.с = [];

p = class(p, 'polynom1); elseif isa(a, 'polynom*) p = a; else

p.с = a<: >.■;

p = class(p, 'polynom*);

end

При вызове к'онструктора динамически создается объект, который может быть инициализирован некоторыми начальными значениями. В зависимости от способа вызова конструктора существует три типовые ситуации:

• Конструктор по умолчанию. Конструктор вызывается без аргументов, например: р = polynom (). В этом случае создается шаблон объек­та, обычно с пустыми нолями В отдельных случаях поля инициализи­руются некоторыми начальными значениями.

Конструктор копирования. На вход конструктора подается объект того же класса, что и создаваемый объект, например: а = polynom (р). В этом случае конструктор обычно возвращает копию объекта. При этом в конструкторе необходимо использовать функцию isa(p, ' polynom'), чтобы определить, является ли входной аргу­мент объектом данного класса. • Конструктор с параметрами. Конструктору передаются входные аргу­менты, например: а = polynom ([3 0 -2 5]). Конструктор соз­дает структуру и инициализирует ее ноля, используя входные данные. Затем из этой структуры конструируется сам объект при помощи встроенной функции class (). У этой функции есть два обязательных параметра. Первый - структура, которая будет представлять данные объекга, а второй - текстовая строка, содержащая имя создаваемою класса.

Подобная последовательность действий обычна для конструктора объектов любого класса. Структура, хранящая данные объекта, может быть сколь угодно сложной.

6) В MATLAB нет эквивалента методу destructor. Для удаления объекта класса из рабочего пространства Workspace используется функция clear.

7) 5.3. Методы класса

Для нового класса следует определить методы обработки объектов, написав соответствующие функции. Какие методы должны быть реали­зованы в классе? Помимо функций, реализующих основное назначение создаваемого класса, в его определение необходимо включить также ряд стандартных методов, которые позволят данному классу вести себя в среде MATLAB аналогично встроенным типам данных. В табл. 5.1 пере­числены основные методы, включенные в классы MATLAB.

Таблица 5.1. Ьаювыс методы классов MATI.AB

Метол класса Описание
class constructor Создание объекта класса
display Вывод содержимого объекта, если выражение с пе­ременной этого класса не завершается разделителем точкой с запятой
set и get Доступ к свойствам объекта. Функция get предна­значена для получения значений свойств, а функция set - для установки новых значений
subsref Индексная ссылка, т. е. использование индексов или указателей полей к объекту, разметенному в правой части оператора присваивания (переопределение ме­тодов для a(i), а { i К a. field)
subsasgn Индексное присваивание, т. с. использование индек­сов или указателей полей к объект)', размещенному в левой части оператора присваивания (переопределе­ние методов для a{i)=b, a{i}=b, a.field=b)
subindex Индексный дескриптор, т. е. использование объекта класса в качестве целочисленного индекса другого объекта (переопределение методов для х (а))
end Последний индекс по указанной размерности
конверторы double, char Преобразование объекта одного класса к другому классу

8)

subsref Индексная ссылка, т. е. использование индексов или указателей полей к объекту, разметенному в правой части оператора присваивания (переопределение ме­тодов для a(i), a{i}, a. field)
subsasgn Индексное присваивание, т. с. использование индек­сов или указателей полей к объекту, размещенному в левой части оператора присваивания (переопределе­ние методов для a{i)=b, a{i}=b, a.field=b)
subindex Индексный дескриптор, т. е. использование объекта класса в качестве целочисленного индекса другого объекта (переопределение методов для х (а))

9. Переопределение арифметических операций. Каждый встроенный оператор в системе MATLAB имеет имя. Поэтому любой оператор может быть переопределен путем создания М-файла с соответствующим названием в каталоге классов. Например, если p или q - полиномы, то выражение вида p + q задает вызов метода @polynom/plus.m, если он существует.

В данном случае это M-файл вида:

function r = plus(p, q)
% POLYNOM/PLUS Реализовать операцию p + q для объектов polynom..
p = polynom(p);
q = polynom(q);
k = length(q.c) - length(p.c);
r = polynom([zeros(1, k) p.c] + [zeros(1, -k) q.c]);

10.Полином задается вектором -строкой из чисел, т.е. коэффициентами, расположенными в порядке убывания показателя степени.

Основные команды для действий с полиномами таковы:

conv(p, q) – произведение полиномов p и q. Название команды происходит от слова convolution (свертка), поскольку коэффициенты произведения действительно получаются как компоненты свертки векторов p и q.

[q, r]=deconv(b, a) – частное (q) и остаток (r) от деления b на a, так что conv(a, q)+r=b.

polyval(p, x) – поэлементное вычисление значений полинома p на множестве x, где x может быть как вектором, так и матрицей.

roots(p) - вектор-столбец, содержащий все корни полинома. Их порядок не определен

11.set и get- Доступ к свойствам объекта. Функция get предназначена для получения значений свойств, set - для установки новых значений.

12.Для преобразования объекта класса polynom обратно в вектор его коэффициентов используется метод double

Для преобразования объекта к текстовому виду, применяемому при отображении объекта, используется метод char.

Вывод на печать display

Метод с именем display вызывается всякий раз, когда оказывается, что исполняемый оператор не заканчивается точкой с запятой. Для многих классов метод display может просто выводить на экран имя переменной, а затем использовать конвертор char, чтобы печатать содержимое или значение переменной. Для этого служит метод @polynom/display.m. Тело этой функции может быть без изменения использовано в каталогах других методов.

Пример.

display(p)
p = x^3 - 2*x - 5


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 339; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь