Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
matlab_shpora.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.52 Mб
Скачать

19. Устойчивые переменные

Устойчивые переменные ( persistent variables ) – это локальные переменные, сохраняющие свое значение между вызовами функции. Устойчивые переменные обладают следующими свойствами:

 Устойчивые переменные объявляются и используются только в пределах M-функции.

 При объявлении устойчивой переменной MATLAB присваивает ей значение []. Затем переменной присваивается требуемое значение.

 Система MATLAB не очищает устойчивые переменные, пока функция существует. Значение устойчивых переменных сохраняется от одного вызова функции до другого.

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

Объявить устойчивую переменную можно при помощи команды persistent name _1,…

 MATLAB очищает все устойчивые переменные, используемые в функции, если функция очищается по команде clear func _ name или если редактируется M-файл, содержащий данную функцию.

20 Перегрузка функции

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

21 Отладка m-функций

В среде программирования MATLAB имеются возможности отладки разрабатываемых функций, тоесть существуют способы, при помощи которых можно выявить месторасположение ошибок и их причину. При возникновении ошибки в процессе выполнения M-функции в командное окно выводится приблизительное диагностическое сообщение и номер строки, в котором, по мнению MATLAB, произошла ошибка. Другим способом отладки функции является применение точек останова и пошагового выполнения функции при помощи встроенного редактора- отладчика medit.exe . Чтобы поставить точку останова на какой-либо строке кода функции, следует установить курсор на нужной строке и нажать клавишу < F12 > . Повторное нажатие клавиши <F12> на этой строке убирает точку останова. Точку останова можно поставить также,выполнив команду меню Debug|Set / Clear Break Point. В строке слева появляется красный кружок, указывающий на то, что в данной строке проставлена точка останова.После этого, не закрывая окна редактора- отладчика, следует переключить при помощи мыши фокус ввода в командное окно MATLAB и обычным образом запустить функцию на выполнение. Система MATLAB выполнит все команды до первой точки останова и сделает паузу. В строке останова появится зеленая стрелка. Теперь можно просматривать фактические значения входных параметров функции, текущие значения глобальных и локальных переменных, значения выражений. Чтобы просмотреть значение переменной, достаточно подвести курсор к ее имени в тексте функции, после чего на экране появится всплывающий желтый прямоугольник со значением переменной внутри него. С одержимое любой переменной также может быть выведено в командном окне обычным указанием ее имени и нажатием клавиши <Enter>. В режиме отладки приглашение командной строки принимает вид K >> . Затем можно продолжить работу программы в одном из отладочных режимов.

ТЕМА 5

1) isa(p,’polynom’) используется чтобы определить, является ли входной аргумент обьектом данного класса.

Конс труктор создает структуру и инициализирует ее поля, используя входные данные. Затем из этой структуры конструируется сам объект при помощи встроенной функции class () . У этой функции есть два обязательных параметра. Первый – структура, которая будет представлять данные объекта, а второй – текстовая строка, содержащая имя создаваемого класса.

2) - Инкапсуляция (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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]