Mоделирование процессов и систем в Matlab (966709), страница 26
Текст из файла (страница 26)
Каковы преимущества и недостатки использования бинарных и текстовых файлов данных для хранения и считывания информации2 138 Урок е ° Обьектно-ориентированное программирование К числу основных достижений современных языков программирования высокого уровня относится наличие в них средств объектно-ориентированного программирования (ООП). Под этим обычно понимают возможность пользователя определять (задавать) классы вычислительных объектов, их свойства и операции по их преобразованию. Создание собственных классов объектов и методов оперирования с ними значительно увеличивает возможности использования вычислительной техники, упрощает программирование и делает его более удобным, прозрачным и эффективным.
В системе МАТЮКАВ имеются достаточно простые средства, позволяющие решать задачи объектно-ориентированного црограммнрования. К этим средствам относится возможность создания новых классов вычислительных объектов и программ (методов) оперирования с ними. Основные классы объектов Классом в МАТ1.АВ принято называть определенную форму представления вычислительных объектов в оперативной памяти в совокупности с правилами (процедурами) их преобразования. Класс определяет тип переменной, а правила — операции и функции, которые могут быль применены к этому типу.
В свою очередь тип определяет объем памяти, отводимой для записи переменной в памяти, и структуру размещения данных в этом объеме. Операции и функции, которые могут быть применены к конкретному типу переменных, образуют метлодьт класса. В системе МАТ1.АВ определены шесть встроенных классов вычислительных обьектов: О 6опЫ е — числовые массивы и матрицы действительных или комплексных чисел с плавающей точкой в формате двойной точности; О зрагзе — двумерные действительные или комплексные разреженные матрицы; О сйаг — массивы символов; О э~гней — массивы записей (структуры); О се11 — массивы ячеек; О ш п~ — массивы 8-битовых целых чисел без знаков. Класс бонЫе определяет наиболее распространенный тип переменных в системе МАТЮКАВ, с которыми оперирует большинство функций и процедур.
Класс сйаг определяет переменные, представляющие собой совокупность символов (каждый символ занимает в памяти 16 бнт), которую часто называют стпрокот1. Класс зрагзе определяет тип переменных, являющихся разреженными матрицами двойной точности. Разреженную структуру применяют для хранения матриц с небольшим количеством ненулевых элементов, что позволяет использовать лишь незначительную часть памяти, необходимой для хранения полной матрицы. Разреженные матрицы требуют применения специальных методов для решения задач. Переменные класса се11 (ячейки) являются совокупносп ю массивов других классов (в том числе и класса сеП). Массивы ячеек позволяют объединить связанные данные (возможно, разных типов и размеров) в единую структуру. Объекты класса з1гас1 имеют несколько составляющих, называемых полями, каждое из которых Основные классы объектов носит собственное имя.
Поля сами могут содержать массивы. Подобно массивам ячеек массивы записей объединяют связанные данные и информацию о них, однако способ обращения к элементам структуры (полям) принципиально иной— имя поля указывается через точку после имени структуры.
Наконец, класс от пг8 позволяет сохранять целые числа от О до 255 в 1/8 части памяти, необходимой для хранения чисел двойной точности. Никакие математические операции для этого класса данных не определены. Каждому классу соответствуют собственные функции и операторы обработки, то есть млюодьс Приведем некоторые из них: О аггау (класс, который является родительским для всех встроенных классов объектов-массивов) — определение размеров (зтге), длины (1 епдгЬ), размерности (п6тлв), объединение массивов (га Ь]), транспонирование (ггапзрозе), многомерная индексация (зоЬтп6ех), переопределение (гезбаре) и перестановка (регвыге) измерений многомерного массива; О сэаг (строки символов) — строковые функции (зггсвр, 1онег), автоматическое преобразование в тип 6оиЬ1 е; О се11 — индексация с использованием фигурных скобок (е1.....
еп) н разделением элементов списка запятыми; О 6оиЬ]е — поиск (ттп6), обработка комплексных чисел (геа1, 1 пад), формирование векторов, выделение строк, столбцов, подблоков массива, расширение скаляра, арифметические и логические операции, математические функции, функции от матриц; О зггнсг — доступ к содержимому поля (. тте16) (разделитель элементов списка — запятая); О ей пг8 — единственный метод — операция сохранения (чаще всего используется в пакете 1птаяе Ргосеззтпя Тоо1Ъох).
Класс символьных строк сваг При вводе с клавиатуры строки символов располагаются между двумя апострофавят. Например, вводя совокупносп символов ' Это ', нолучнм в командном окне впв Это Точно так же с помощью знака присваивания производится определение пере- менных типа сзаг. » вг1 - 'это': вг2 'строка': вгз 'синволов.'. » вг1.вг2.вгЗ вг1 - Это вг2 - строка вгЗ синвопов. Объединение нескольких строк в одну (ст1лттлеяие, илн евтивыяот1ию) можно осуществить с помощью обычной операции объединения векторов в строку. 1511 $12 вг33 апв - Это строка синволов. 1бО урок тп ° Объектно-ориентированное программирование Существует еще одна возможность достичь той же цели — использование процедуры зсгсзь(51. 52,...,5п), которая производит сцепление (конкатенацию) заданных строк 51, 52, ..., зп в единую строку в порядке их указания в списке аргументов.
» зт - звгсвт(551.5В2.553) зп Зто строке синволов. Объединить строки символов в несколько отдельных, но соединенных в единую конструкцию, строк (вертикальная конкатенация) можно, применяя процедуру зтгчсас. » ззч ззгчсвп(551 зт2,553] зсч Зто строкд синполоп. Заметим, что для такого сцепления символьных строк нельзя применять операцию вертикального сцепления (снмвол чц»), используемую для построения матрицы из отдельных строк, так как количество элементов (символов) объединяемых символьных строк может быть различным.
Например: » [ВС1: 5(2: 5531 ??? А]1 гоиз 1Л тле Ьгвсхетеп( ехргеззтоп позп Ьпче тле зале попсег от со]паз Символьная строка представляет собой массив (точнее, вектор-строку), элементами которого являются отдельные символы, включая символы пробелов. Поэтому информацию о любом символе в строке можно получить, указав номер этого символа от начала строки (при этом, конечно, надо учитывать и символы пробелов).
Например: » зс(3) дп5 т » ВИЗ: 12) впз - то строкп Совокупность вертикально сцепленных строк образует двумерный массив (мат- рицу) символов. Поэтому выполнение команды » 55 зтч(2.3 : етк0 приводит к такому результату: 55 строке Функция 5(ггер(51. 52. 53) формирует строку из строки 51 путем замены всех ее фрагментов, которые совпадают со строкой 52, на строку 53. » зп = [551 5(2 5531 5( - Зто строка синволов » у звггер(55.'о'.'в'] у - Зтв стрвкп сннвплвв » х зтггер(55.'и'.'о') х - Зто строко сннволов. 141 Основные классы объектов Функция иррег(51) переводит все символы строки 51 в верхний регистр. » х1 оррег(5С) х) - ЗтО Стгохл СИН5ОЛО5.
Аналогично, функция ) оыег(51) переводит все символы в нижний регистр. » х2 1онег(х1) х2 - вто строка сннволов. Процедура тт повтг(51. вс1) выдает номер элемента строки 51, с которого начина- ется первое вхождение строки 511, если она есть в строке 51: » Гт полег(БС. 'рок') ап5 - 9 Как ранее отмечалось, довольно часто возникает необходимость вставить в строку символов числовое значение одного илн нескольких параметров, что связано с переводом числовой переменной в строку символов определенного вила.
Это можно сделать с помощью процедуры пив25сг. Входным аргументом процедуры является числовая переменная (класса йоиЫ е). Процедура формирует представление значения указанной числовой переменной в виде символьной строки. Формат представления определяется значением, установленным в поле Числовой форнат. В качестве примера рассмотрим формирование текстовой строки с включением значения переменной »х рт: » Откр([' Значение перененной' 'х' 'равно'.
ан2втг(хЦ) Значение перененноа 'х' равно 3.1416 Аналогичным образом с помощью процедуры ляс25сг(А) можно получить значе- ние матрицы А в виде символьной строки. » А [1.2.3: 4 5 6„.7 8 9): » Отар(ват2втг(А)) [1 2 3:4 5 6;7 6 9) Переход от символьного представления числа к числовому осуществляется про- цедурой втг2попс » втх тввв2»тг(х) всх = 3.1416 » У " ввг2п»в(втх) у - 3.1416 » у + 5 апв - 5.1416 » к втх + 5 с - 56 51 54 57 54 59 Последний результат получен вследствие того, что строка символов втх при включении ее в арифметическую операцию автоматически перестраивается в класс даиЫ е, то есть все составляющие ее символы заменяются целыми числами, равными колу соответствующего символа. После этого сложение полученного числового вектора с числом 5 происходит по обычным правилам, то есть 5 суммируется с хая(дым из кодов символов. Проверим это, учитывая, что с помощью процедуры 142 Урон 4 ° Объектно-ориентированное программирование ()оиЬ)е(зсг) можно получить числовое представление строки символов згг в виде кодов входящих в нее символов: » поные(зск) апз - 51 45 49 52 49 54 Сравнивая полученный результат с предыдущим, можно убедиться в етраведливости сказанного.
Функция 51гйиг(511,512 523) действует аналогично функции зсгчсаг(511 512, 513), то есть образует символьную матрицу, располагая строки 511, 512, ...„51п одну под другой. » 2 з(т2ааг(з11. в12. втз) Е Это строка синвопов КЛВСС ЗВПИС6Й эвп$Сь Массивы записей — это тип массивов в системе МАТЮКАВ, в котором разрешается располагать в виде записей разнородные данные (то есть данные разных классов). Отличительной особенностью таких массивов является наличие в них именованных полей. Массивы записей в МАТ1.АВ не объявляются. Отдельные экземпляры этого класса создаются автоматически в процессе присвоения конкретных значений полям записи.