MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 8. Объектно-ориентированное программирование

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

8.4. Иерархия объектов. Индексация объектов

Правило старшинства устанавливает иерархию объектов в системе MATLAB. Это позволяет управлять последовательностью обработки выражений, составленных из объектов. В системе MATLAB принято, что объекты имеют один приоритет и при выполнении выражения вызывается метод, ассоциированный с крайним левым объектом. Если установлено соотношение старшинства, то вызывается метод для класса с самым высоким приоритетом. Для установления иерархии объектов служат функции конструктора inferiorto и superiorto.

Функция superiorto('class_A') устанавливает более высокий приоритет объектов других классов по отношению к объектам класса, указанного в качестве аргумента.

Допустим, что мы решили добавить класс объектов rational, и тогда ожидается появление смешанных выражений, которые включают полиномы и рациональные функции. Причем класс rational должен находиться выше в иерархии классов, чем класс polynom. Это может быть реализовано указанием в конструкторе @rational/rational.m оператора superiorto('polynom'). При этом в методы класса polynom никаких изменений не вносится.

Тогда выражения типа p + r, r + p, p*r и r*p, включающие полином p и рациональную функцию r будут использовать методы, определенные в конструкторе.

Функция inferiorto('class_A') устанавливает более низкий приоритет объектов других классов по отношению к объектам класса, указанного в качестве аргумента; иначе говоря, объекты класса class_A имеют наивысший приоритет.

Индексация объектов.

Общее правило состоит в том, что индексации объектов аналогична индексации структур.

Индексная ссылка. Использование индекса или указателя поля в правой части оператора присваивания называется индексной ссылкой. В этих случаях вызывается метод subsref, реализованный в виде встроенной функции. Соответствующие выражения могут иметь следующий вид A(I), A{I}, A.field. Каждый из них приводит к вызову метода subsref в форме

                  B = subsref(A, S)

Второй аргумент S является структурой с двумя полями. Поле S.type - строка, содержащая символы '( )', '{ }' или '.', которые определяют тип индекса. Круглые скобки соответствуют числовому массиву; фигурные - массиву ячеек; точка - структуре. Поле S.subs - массив ячеек или строка, содержащая фактические индексы. Двоеточие, используемое как индекс, соответствует строковой переменной ':'.

Например, выражение A(1:2, :) вызывает метод subsref(A, S), где S - структура размера 1х1 вида

                  S.type = '( )'
                  S.subs = {1:2, ':'}

Выражение A{1:2} вызывает метод subsref(A, S), где S - структура вида

                  S.type ='{ }'
                  S.subs = {1:2}.

Выражение A.field вызывает метод subsref(A, S), где S - структура вида

                  S.type = '.'
                  S.subs = 'field'.

Эти простые обращения могут быть объединены в более сложные индексные выражения. В этом случае length(S) определяет количество уровней индексации.

Например, выражение A(1, 2).name(3:4) вызывает метод subsref(A, S), где S - структура размера 3х1 со следующими значениями полей

S(1).type = '( )' S(2).type = '.' S(3).type = '( )'
S(1).subs = '{1, 2}' S(2).subs = 'name' S(3).subs = '{3:4}'

Индексное присваивание. Использование индекса или указателя поля в левой части оператора присваивания называется индексным присваиванием. В этих случаях MATLAB вызывает метод subsasgn, реализованный в виде встроенной функции.

Соответствующие выражения могут иметь следующий вид

            A(I) = B
            A{I} = B
            A.field = B

Каждый из них приводит к вызову метода subsasgn в форме

            A = subsasgn(A, S, B)

Поля структуры S аналогичны полям структуры в случае индексной ссылки.

Функция subsasgn различает присваивание вида A(i) = [ ] и A(i) = B, где B - пустой массив.

Если правая часть - символ пустого массива [ ], а не переменная, то третий аргумент входа функции subsasgn является строкой '[ ]'. Следовательно, при разработке собственного метода типа subsasgn следует различать эти два случая.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика