Современное объектное программирование основано на введении новых типов данных (классов) и определении операций для них. В системе MATLAB существуют следующие стандартные классы: числовые массивы (double), двумерные разреженные матрицы (sparse), строки или массивы символов (char), структуры или массивы записей (struct), массивы ячеек (cell). Кроме того, некоторые расширения MATLAB используют свои классы.
В MATLAB тип переменной или соответствующий класс не объявляется и не описывается, а определяется автоматически при создании объекта. Например, при задании матрицы А=еуе(5) создается объект класса double, а по команде As=sparse(A) производится преобразование матрицы А в разреженную матрицу As, то есть создается новый объект класса sparse.
Объекты нового класса создаются при помощи специальной m-функции – конструктора класса, имя которой совпадает с названием класса. Для нового класса также нужно определить методы обработки объектов, написав соответствующие функции. Конструктор класса и функции обработки должны размещаться в каталоге, имя которого начинается с символа «@», а далее идет имя класса. Каталог класса является подкаталогом для каталога, описанного в пути доступа. Объекты класса реализуются в виде структур, поля которых видны только для методов, работающих с данным классом. При этом возможно доопределение существующих встроенных операторов, например, чтобы задать операцию умножения для объектов нового класса, в каталоге класса следует написать функцию mtimes.
Так, в каталоге symbolic находятся три подкаталога: @char, @sym, @symlibs. В подкаталоге @sym содержится конструктор класса – файл sym.m и множество других файлов, реализующих операции с символьными переменными.
При вызове конструктора динамически создается объект. Если конструктор вызывается без аргументов, то создается шаблон объекта, обычно с пустыми полями. Если на вход конструктора подается объект того же класса, то конструктор обычно возвращает сам введенный объект. Для проверки принадлежности объекта OBJ классу CLASS служит команда 1sa (0BJ.CLASS)
Функция class (MATLAB различает большие и малые буквы) определяет класс объекта при вызове class(OBJ) и переводит структуру S в объект класса CLASS при обращении class (S.CLASS). Команды работы с классами описаны в таблице 2.3.
Таблица 2.3
Команда
Назначение
Class
Определение класса или создание объекта
Isa
Определение принадлежности объекта к классу
isobject
Выявление принадлежности объекта к какому-нибудь классу
methods
Вывод списка методов для данного класса
inferiorto
Указание подчиненности класса по отношению к некоторым классам
superiorto
Указание старшинства класса по отношению к некоторым классам
При работе с объектами учитываются иерархия (старшинство) и наследование, когда объекты одного класса приобретают свойства других классов. При простом наследовании (один класс-родитель) дочерний объект включает все поля родительского объекта, и при работе с ним можно обращаться к методам родительского класса, кроме того, добавляются специфические для дочернего класса поля. При этом методы нового класса не могут применяться к объектам родительского класса. Для реализации множественного наследования (несколько классов родителей) применяется команда class (S, CLASS, PARENTl, PARENT2….), здесь из структуры S создается объект класса CLASS, наследующий свойства классов PARENT1, PARENT2.
В дополнение к наследованию поддерживается объединение частей в одно целое или агрегирование, то есть использование объектов в качестве полей для других объектов.
Чтобы использовать для объектов нового класса знаки основных математических операций, создаётся в каталоге функции с именами, которые отвечают за операции сложения, матричного умножения и т.д. Список имен математических операций можно получить по команде help*.