
122
К числу основных достижений современных языков программирования высокого уровня является наличие
средств осуществления так называемого объектно-ориентированного программирования (ООП). Под этим
обычно понимают возможность пользователя самому определять (задавать) классы вычислительных объектов,
их свойства и операции по их преобразованию. Создание собственных классов объектов и методов
оперирования с ними существенно увеличивает возможности использования
вычислительной техники,
упрощает программирование и делает его более удобным, прозрачным и эффективным.
В системе MatLAB предусмотрены достаточно простые средства, позволяющие решать задачи объектно-
ориентированного программирования. К этим средствам относятся возможность создания новых классов
вычислительных объектов и программ (методов) оперирования с ними.
4.1. Основные классы объектов
Классом в MatLAB принято называть определенную форму представления вычислительных объектов в памяти
ЭВМ в совокупности с правилами (процедурами) их преобразования. Класс определяет тип переменной, а
правила - операции и функции, которые могут быть применены к этому типу. В свою очередь, тип определяет
объем памяти, которая отводится записи переменной в память ЭВМ и структуру
размещения данных в этом
объеме. Операции и функции, которые могут быть применены к определенному типу переменных,
образовывают методы этого класса.
В системе MatLAB определены шесть встроенных классов вычислительных объектов:
double
числовые массивы и матрицы действительных или комплексных
чисел с плавающей запятой в формате двойной точности;
sparse
двумерные действительные или
комплексные разреженные матрицы;
char
массивы символов;
struct
массивы записей (структуры);
cell
массивы ячеек;
uint8
массивы 8-битовых целых чисел без знаков.
Класс double определяет наиболее распространенный тип переменных в системе MatLAB, с которыми
оперирует большинство функций и процедур. Класс char определяет переменные, которые являются
совокупностью символов (каждый символ занимает
в памяти 16 битов). Эту совокупность часто называют
строкой. Класс sparse определяет тип переменных, которые являются разреженными матрицами двойной
точности. Разреженная структура применяется для хранения матриц с незначительным количеством ненулевых
элементов, что позволяет использовать лишь незначительную часть памяти, необходимой для хранения полной
матрицы. Разреженные матрицы требуют применения специальных методов для решения задач
. Переменные
класса cell (ячейки) являются совокупностью некоторых других массивов. Массивы ячеек позволяют
объединить связанные данные (возможно, разных типов и размеров) в единую структуру. Объекты класса struct
состоят из нескольких составляющих, которые называются полями, каждое из которых носит собственное имя.
Поля сами могут содержать массивы. Подобно массивам ячеек, массивы записей объединяют связанные
данные
и информацию о них, однако способ обращения к элементам структуры (полям) принципиально иной - путем
указывания имени поля через точку после имени структуры. Наконец, класс uint8 позволяет сохранять целые
числа от 0 до 255 в 1/8 части памяти, необходимой для чисел двойной точности. Никакие математические
операции для этого класса данных не определены.
Каждому типу
данных соответствуют собственные функции и операторы обработки, т. е. методы. Приведем
некоторые из них:
- класс array (обобщенный класс объектов-массивов, являющийся прародителем всех упомянутых
встроенных классов) имеет такие методы: определение размеров (size), длины (length), размерности
(ndims), объединение массивов ([a b]), транспонирование (transpose), многомерная индексация
(subindex), переопределение (reshape) и перестановка (permute) измерений многомерного массива;
- методы класса char (строки символов) - строковые функции (strcmp, lower), автоматическое
преобразование в тип double;
- методы класса cell - индексация с использованием фигурных скобок {e1,...en} и разделением
элементов списка запятыми;
- методы класса double - поиск (find), обработка комплексных чисел (real, imag), формирование
векторов, выделение строк, столбцов, подблоков массива, расширение скаляра, арифметические и
логические операции, математические функции, функции от матриц;
- методы класса struct - доступ к содержимому поля ( . field) (разделитель элементов списка -
запятая);