Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Инкапсуляция (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 с классами
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
8)
9. Переопределение арифметических операций. Каждый встроенный оператор в системе MATLAB имеет имя. Поэтому любой оператор может быть переопределен путем создания М-файла с соответствующим названием в каталоге классов. Например, если p или q - полиномы, то выражение вида p + q задает вызов метода @polynom/plus.m, если он существует. В данном случае это M-файл вида: function r = plus(p, q) 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) |
Последнее изменение этой страницы: 2017-03-17; Просмотров: 367; Нарушение авторского права страницы