Смекни!
smekni.com

Программирование и разработка приложений в Maple (стр. 131 из 135)

Процедуры, представленные в [41,103] и прилагаемой к ней Библиотеке, обеспечивают пользователя набором средств для обработки библиотек пользователя, имеющих структурную организацию, аналогичную главной Maple-библиотеке. Данные средства обеспечивают целый ряд функций, упрощающих проблему восстановления поврежденных библиотек. Наряду с этим, они также поддерживают и другие структурные организации, полезные в целом ряде важных приложений. Отмеченные и другие предпосылки, обусловленные вышеупомянутыми процедурами, позволяют довольно существенно автоматизировать обработку пользовательских библиотек, наряду с расширением возможностей, имеющих дело с сохранением процедур и программных модулей во внешней памяти компьютера. В целом же, средства, методы и приемы, представленные в книгах [41,103], предназначены как для повышения эффективности применения пакета Maple в различных приложениях, требующих программирования, так и для самого освоения программирования в его программной среде.

9. Средства Maple, не рассматриваемые в настоящей книге, но полезные для приложений

В данном разделе представлена краткая характеристика средств пакета, по целому ряду причин не рассматриваемых в настоящей книге, однако представляющих несомненный интерес для разработчиков Maple-приложений. Основной причиной этого явилось то, что в настоящей книге представлен базовый материал разработки Maple-приложений без привлечения каких-либо средств извне.

Механизм внешних вызовов (external calling) позволяет интегрировать в Maple программы, откомпилированные в среде таких языков как C, Fortran или Java. Большое количество ПС можно получать с интернета, обеспечивающих решение самых разнообразных задач из различных приложений. Механизм внешних вызовов позволяет выполнять эти средства в ваших Maple-приложениях. С этой целью встроенная функция define_external обеспечивает связь с внешней функцией (например, из dll-библиотеки), формируя Maple-процедуру, выполняющую роль интерфейса с внешней функцией. В некотором роде механизм внешних вызовов является расширением возможностей пакетных функций system и ssystem, рассматриваемых в настоящей книге. Сам Maple использует механизм внешних вызовов для имплантирования в свою среду численных библиотек NAG, включая модуль LinearAlgebra для решения задач линейной алгебры. Детально в данной книге механизм внешних вызовов нами не рассматривается, приведем лишь сам принцип реализации такого механизма на весьма простом примере.

Рассмотрим простую функцию сложения двух целых чисел, написанную на С: int add(int x, int y) {return x + y;}

сохраненную в файле «add.c» с последующей компиляцией в dll-библиотеку «add.dll», расположенную по адресу «с:/user/add.dll». Для обеспечения последующего обращения к этой функции из Maple-среды формируем вызов функции define_external, включающий следующие параметры:

– имя функции в dll-библиотеке (например, add)

– имя самой dll-библиотеки (например, add.dll) или класс, содержащий подпрограмму

– типированные аргументы и результат возврата (например, integer[4])

В настоящее время механизм внешних вызовов поддерживает соглашения по вызову только для языков C, Fortran и Java. При этом, автоматическая генерация оболочки вызова поддерживается только для языка С. В нашем конкретном случае механизм внешнего вызова принимает следующий вид:

> add_c := define_external('add', LIB="C:/user/add.dll", 'a'::integer[4], 'b'::integer[4], RETURN::integer[4]): add_c(10, 17); ⇒ 27

После этого процедура add_c может использоваться подобно обычным Maple-процедурам. В обшем случае вызов функции define_external имеет следующий формат:

define_external('имя функции', a1::<описание>, ..., an::<описание>, LIB="путь к dll-library") При этом, если вместо аргументов aj (j=1..n), типированных своим описанием, кодируется только одно слово MAPLE, то предполагается, что внешняя функция принимает поток струк-ур данных Maple без преобразования. Представленный механизм внешних вызовов предполагает, что вы имеете dll-библиотеку, а также полное описание входящих в нее функций, по меньшей мере тех, интерфейс с которыми вы планируете создавать.

Для повышения эффективности использования механизма внешних вызовов, начиная с Maple 7, с пакетом поставляется модуль ExternalCalling, содержащий процедуры для эффективного использования встроенной функции define_external. Заинтересованный читатель может детально ознакомиться с механизмом внешних вызовов в справке по пакету, например, по вызову ?external_calling.

Начиная с Maple 8, пакет дополнен модулем Maplets, содержащим набор средств для создания графического интерфейса пользователя. Модуль Maplets обеспечивает возможность создания произвольных графических интерфейсов пользователя, называемых маплетами (maplets), для доступа к вычислительной среде пакета. Maplets-технология позволяет встраивать кнопки, панели инструментов, меню, всплывающие меню, перетаскиваемые кнопки, окна для построения графики и обеспечивать работу других элементов. И при этом, пользователи могут выполнять вычисления и другие операции, включая работу с графическими объектами, без использования стандартного GUI. В этом отношении пользователь может создавать графический интерфейс под свои конкретные приложения. Приложения, созданные посредством Maplets, используют Java-технологию, однако пользователь не должен быть знаком с Java. Ему потребуется лишь: (1) знание основ программирования в Maple и (2) общее знакомство со средствами модуля Maplets.

Пользователь для создания Maplet-приложения может использовать или средства модуля Maplets, или Maplet-конструктор (Maplet Builder). При этом, второй подход допустим только в среде стандартного клона Maple. К недостаткам (возможно, временным) данного средства можно отнести существенно меньшую мобильность относительно стандартного GUI, необходимость наличия Java-среды и немалое число недоработок. Здесь средства для создания Maplet-приложений не рассматриваются и заинтересованный читатель за информацией может обратиться к справке по пакету либо получить вводную довольно полезную информацию по адресу http://maplets.exponenta.ru/intro.htm.