Для упрощения разработки методов вычислительные функции метода вынесены в отдельный интерфейс определителя метода ImaMethodDef. Разработчику метода достаточно реализовать класс с единственным (не считая IUnknown) интерфейсом ImaMethodDef, и больше не заботиться об инициализации и сохранении целостности поддерева метода, проверках аргументов на соответствие размеров и размерностей, и прочих мелочах.

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

HRESULT GetDescription ([out,retval,string] maString* descr)
Функция выдает описание метода, устанавливающее количество аргументов, их размеры и размерности. Посредством этой функции разработчик метода сообщает информацию о структуре метода. Синтаксис строки descr подробно описан в спецификации метода.

HRESULT Init ([in] ImaList* param,
		[in] ImaList* input, [in] ImaList* output)
Функция вызывается один раз при создании поддерева метода в алгоритме. Она запоми-нает списки параметров, входных и выходных аргументов метода (в частности, это может быть сделано путем инициализации классов-оболочек). Она также может создать и инициализировать некоторые параметры алгоритма.

Рекомендуется при реализации функции Init запомнить во внутренних переменных класса указатели на ячейки, представляющие аргументы метода. Это несколько повысит эффективность обращения к матрицам-аргументам в функции CalcCellDef, особенно, если для этого используются символьные имена.

Отметим также, что в функции Init некорректно пытаться получить интерфейс матрицы ImaMatrix, хранящейся в ячейке аргумента, так как на этапе вызова Init значения аргументов, скорее всего, ещё не заданы.

HRESULT CalcDef ()
Функция выполняет метод, полностью вычисляет все выходные аргументы метода и, при необходимости, изменяет параметры алгоритма. Функция использует списки параметров, входных и выходных аргументов, установленные функцией Init. Если предполагается, что вычисления займут длительное время, рекомендуется периодически вызывать функцию Progress ядра (подробнее смотри в описании интерфейса ImaKernel.

HRESULT CalcCellDef ([in] int argno,
		[in] maIndex index, [out] ImaCell *cell)
Функция вычисляет значение единственной ячейки с индексом index в выходном аргументе argno. Нумерация аргументов начинается с нуля. Если указатель cell нулевой, то вычисленное значение записывается в соответствующую ячейку argno-го выходного аргумента. Если указатель cell ненулевой, то вычисленное значение записывается в ячейку cell, и не записывается в выходной аргумент. Функция использует списки параметров, входных и выходных аргументов, установленные функцией maInit. Если эта функция не была (или не может быть) реализована, она должна вернуть код ошибки MA_ERR_NOTIMPLEMENTED.

Функции CalcDef и CalcCellDef обязаны выполнять одно и то же преобразование данных. Такое дублирование имеет целью повысить эффективность вычислений в системах построения алгоритмических композиций, поддерживающих концепцию вычислимых (не хранимых) данных.