Приложение

 

Приложение

Поддержка  средств Java в MATLAB 6

Язык программирования Java обычно непосредственно не используется для поддержки математических вычислений в системе MATLAB. Однако этот перспективный язык высокого уровня входит в состав ядра системы и широко применяется для создания средств интерфейса и средств Интернета. Поэтому в новых версиях MATLAB 6.0/6.1 существенно расширена поддержка средств языка Java, который приобрел важное значение для решения задач в области создания электронных и Интернет-документов.

Фактически Java интегрирован в MATLAB и используется для построения его графического интерфейса и справочной системы (наряду с HTML). Кроме того, предусмотрены работа с рядом типов данных, классов и объектов, связанных с Java, и поддержка построенной на Java виртуальной машины. Основной материал по использованию средств языка Java имеется в дополнительном руководстве «MATLAB. External Interfaces. Version 6». Для знакомства с тонкостями программирования на Java рекомендуется обращаться в Интернет-сайт www.javasoft.com, посвященный этому языку. Уточнить версию Java, установленную в системе MATLAB, на вашей компьютерной платформе можно, исполнив команду:

» version -Java ans

Java 1.1.8 from Sun Microsystems Inc.

Вы можете создавать объекты Java в MATLAB с использованием имени класса Java:

» f = java.awt.Frame('My Title')

f =

Java. awt. Frame[f rameO. 0,0, 0x0. i nval i d. hi dden. layout=java. awt. Border-Layout.

resizable.title=my title]

Методы объектов Java могут быть вызваны как с использованием синтаксиса Java, так и с использованием синтаксиса MATLAB:

» setTitle (f. 'new title' ) 

» t = getTitle(f)

t =

new title

Тот же пример с использованием синтаксиса Java:

» f.setTitle ('modify title' )

» t = f.getTitle

t =

modify title

» whos f

Name Size Bytes Class

f1x1 Java.awt.Frame 

Grand total is 1 elements using 0 bytes

Как видно из этого сообщения, в MATLAB поддерживаются Java-классы и Java-объекты.

Для более полного знакомства с возможностями Java в MATLAB можно воспользоваться справочной системой. Правда, в индексном каталоге поиск разделов по имени «Java» к успеху не приводит, но в окне расширенного поиска Search можно найти ряд статей по применению Java.

В окне справки в разделе Calling Java from MATLAB можно найти целый ряд разделов справки, посвященных применению этого языка в системе MATLAB (естественно, на английском языке).

Для получения информации об объектах и методах Java, с которыми может работать MATLAB, нужно исполнить команду:

»methodsview Java.awt.Menultem

Данные окна рис. П2 показывают, что поддержка Java реализована в большом числе объектов и методов системы MATLAB.

При использовании объектов Java пользователь должен учитывать многочисленные отличия в свойствах объектов Java и объектов MATLAB, что ведет к различиям в результатах исполнения многих функций. Например, вот как работает функция определения длины строки в MATLAB:

» s= ' Hellо my friend!'

s =

Hello my friend!

» size(s)

ans =

1 16

Результат означает, что строка s задана как одномерный массив с числом элементов 16. А вот как та же функция работает со строковым массивом Java:

» string=java.lang.Sthng( 'Hello my friend!')

string=

Hello my friend!

» size(string) 

ans = 

1 1

Нетрудно заметить, что отдельные символы в этом случае не рассматриваются как элементы массива, и строка представлена одномерным массивом единичной длины.

» C=char(string)

С=

Hello my friend!

» [m,n]=size(C)

m =

1

 n =

16

 » whos С

Name Size Bytes Class

С 1x16 32 char array Grand total is 16 elements using 32 bytes

Использовав преобразование объекта класса java.lang.string в массив символов MATLAB, мы все-таки подсчитали число символов обычными средствами MATLAB. Но в среде MATLAB мы можем сделать это и средствами Java.

» string.length

ans =

16

Или

» e=java.lang.StringBuffer(string)

e =

Hello my friend!

» e.length

ans =

16

Следующий пример показывает создание Java-структуры многоугольника:

» polygon=java.awt.Polygon([14 42 98 124],[55 12 -2 62].4) 

polygon = 

java.awt.Pol ygon@94067b

Для выявления структуры Java объекта может использоваться функция struct (object), которая преобразует объект в структуру (массив структур) MATLAB с потерей информации о классе.

Пример: .

» struct(string)

ans =

0x0 struct array with fields:» struct(polygon)

ans =

npoints: 4

xpoints: [4x1 int32]

ypoints: [4x1 int32]

Следует отметить, что указание имени объекта с большой буквы (кстати, как это задано в определении класса) ведет к ошибке, поскольку сам объект, преобразуемый в структуру, по правилам MATLAB, где регистр имеет значение, называется

polygon:

» struct(Polygon)

??? Undefined function or variable 'Polygon'.

Эти примеры, и их можно привести множество, свидетельствуют о том, что пользователь, рискнувший применить средства Java в MATLAB на практике, должен хорошо знать как возможности языка Java, так и особенности среды и языка программирования MATLAB. И быть готовым к различным сюрпризам.

Для обычных пользователей системой MATLAB по ее прямому назначению — математические вычисления — большинство возможностей Java представляет ограниченный интерес. Исключением, пожалуй, является работа с такими важными объектами Java, как массивы и классы url. Напомним, что Java-массивы входят в иерархию объектов языка программирования системы MATLAB.

Массивы в Java считаются одномерными (подобными векторам-столбцам MAT-LAB). Однако возможно построение массивов в массивах без ограничения числа уровней вложения. Тем не менее функция ndims MATLAB, если ее входным аргументом является такой «многомерный» массив Java, всегда возвращает 2. Форма таких массивов в общем случае не прямоугольная, т. е. число элементов по рядам и столбцам может различаться. В MATLAB все массивы, кроме массивов Java, могут быть одномерными, двумерными и многомерными. Нумерация элементов Java-массивов в обычных системах программирования на Java идет с нуля. В MATLAB нумерация всех элементов массивов, в том числе и Java-массива (Java-array), начинается с единицы. (База массива равна единице.) Ниже приведен пример задания прямоугольного Java-массива в массиве с числами двойной точности с именем dblArray: dblArray = javaArrayC Java.lang.Double'.3.4);

В следующем фрагменте программы на языке MATLAB с помощью циклов элементам массива присваиваются конкретные значения:

for 1=1:3

for j-l:4 dblArray(i.j) = Java.lang.Double((i*5)+j);

end end

Теперь несложно проверить созданный массив:

dblArray

dblArray =

Java.lang.Double[][]:

[6] [7] 

[11] [12] 

[16] [17]

» dblArray(2.3) 

ans = 

13.0

[ 8] 

[13] 

[18]

[9] 

[14] 

[19]

Из этого примера в целом ясно, что, несмотря на отдельные нюансы, работа с Java-массивами в основном подобна таковой для MATLAB массивов. При этом система MATLAB поддерживает ряд типов преобразований массивов и иных данных из форматов, принятых на языке программирования Java, в форматы MATLAB и наоборот.