sitelogo
静的

MINERVAは、Javaで書かれたプログラム部品と協力します。プログラム部品は「外部」で宣言され、MINERVAコードとして利用されます。

この機能を、すでに存在するネットワーク・グラフィカルユーザインタフェース・マルチメディア拡張などでライブラリおよびユーティリティを拡張して利用することができます。

Javaクラスにアクセスするインタフェースは、MINERVA内にあるジェネレータを使用して実現されます。ユーザは、Java関数へのインタフェースを宣言します。 ジェネレータは、パラメータの変換及びクラス呼び出しの為に、上の宣言を呼び出しのための枠組に変換します。

外部クラスの宣言は、以下のようになります。

	dynamic_function(
			PredicateName,
			JavaClassName,
			FunctionName(TypeArg1,...,TypeArgN),
			ReturnType).

static_function( PredicateName, JavaClassName, FunctionName(TypeArg1,...,TypeArgN), ReturnType).

Examples:

	dynamic_function(
                button__set_label,	% MINERVA predicate name
                'Button',		% Java class name
                setLabel(string),	% Java method
                void			% Java return type
        ).

static_function( font__get, % MINERVA predicate name 'Font', % Java class name getFont(string), % Java method 'Font' % Java return type ).

結果として得られるMINERVAの述語は、各々、以下のようになります。

	PredicateName(Object,Arg1,...,ArgN,ReturnArg)
	PredicateName(Object,Arg1,...,ArgN) % for void functions
	PredicateName(Arg1,...,ArgN,ReturnArg) % for static functions
	PredicateName(Arg1,...,ArgN) % for static void functions

この例では、以下の二つの述語が得られます。

	button__set_label(Button,DisplayText)
	font__get(FontName,Font)

MINERVAからJavaを呼び出すインタフェースの一例をあげます。

dynamic_function(
        get_line_number,
        'java.io.LineNumberInputStream',
        getLineNumber,
        int
    ).

dynamic_function( set_line_number, 'java.io.LineNumberInputStream', setLineNumber(int), void ).

create_instance( create_line_number_input_stream, 'java.io.LineNumberInputStream'('java.io.InputStream') ).

上記のように、3つのインタフェース述語が作られねばなりません。 動的述語には、以下が必要です。

	int java.io.LineNumberInputStream.getLineName()
		(述語: get_line_number(+LineNumberStream,-LineNumber))
	void java.io.LineNumberInputStream.setLineName(int lineno)
		(述語: set_line_number(+LineNumberStream,+LineNumber))

'java.io.LineNumberInputStream'のオブジェクトを作るための インタフェース述語を以下に示します。

	create_line_number_input_stream(+Stream, -LineNumberStream)
この述語は、
	"new java.io.LineNumberInputStream(stream)"
の関数にコピーされます。

静的関数には、インタフェース記述(static_function)があります。 より詳しい情報は「例題プログラム」の章を参照して下さい。


戻る 続く..
冒頭へ managed with ubiCMS