ToolTalk ユーザーズガイド

オブジェクト型の定義

メッセージが、特定のオブジェクトまたはオブジェクト型にアドレス指定されている場合、ToolTalk サービスは、メッセージを配信するアプリケーションを判定できなければなりません。アプリケーションは、「オブジェクト型」(otype) にこの情報を提供します。otype はアプリケーションの ptype を指定します。ptype はオブジェクトを管理し、オブジェクトと関連するメッセージパターンを記述しています。

メッセージパターンには、メッセージは利用可能だがアプリケーションが起動していない場合の処理を ToolTalk サービスに示す指示が入っています。この場合、ToolTalk は次の指示のいずれか 1 つを実行します。

ToolTalk サービスがこのような情報を利用できるようにするために、アプリケーションのインストール時に ToolTalk 型コンパイラの tt_type_comp で otype ファイルをコンパイルします。オブジェクトを管理するアプリケーションは、ToolTalk サービスに登録する際に ptype を宣言します。ptype を登録するとき、ToolTalk サービスは ptype を示す otype の有無を調べ、otype 内で検索したパターンを登録します。

アプリケーションの otype は、ToolTalk サービスが、オブジェクト指向のメッセージを配信するときに使用するアドレス指定情報を提供します。ユーザーが持つ otype の数とそれらの otype が表すものは、ユーザーのアプリケーションの性質によって異なります。たとえば、ワープロ用のアプリケーションの otype は文字、単語、パラグラフ、文書などになり、図編集用のアプリケーションの otype はノード、円弧、注釈ボックス、ダイアグラムなどになります。

otype は、オブジェクト型識別子 (otid) で始まります。otid の後には、次の項目が続きます。

  1. オプションの開始文字列 - ToolTalk は、必要に応じてこのコマンドを実行し、プログラムを実行するプロセスを起動します。

  2. シグニチャ - その型のオブジェクトにアドレス指定できるメッセージを定義するコード (つまり、その型のオブジェクトに対して呼び出せる動作)

シグニチャ

「シグニチャ」は、その型のオブジェクトにアドレス指定できるメッセージを定義します。シグニチャは、矢印 (=>) によって 2 つの部分に分けられます。シグニチャの前半部分は、着信メッセージの照合基準を定義します。シグニチャの後半部分は、シグニチャの前半部分に一致した各メッセージに ToolTalk サービスが追加する受信側の値を定義します。これらの値は、操作およびメッセージの配信範囲と処置を実行するプログラムの ptid を指定します。

otype ファイルの作成

次のコード例は、otype ファイルの構文を示しています。

otype	::=	obj_header	'{' objbody* '}' [';']
obj_header	::=	'otype' otid [':' otid+]
objbody	::=	`observe:' osignature*
	|	`handle:' osignature*
		`handle_push:' osignature*
		`handle_rotate:' osignature*
osignature	::=	op args [contextdcl] [rhs][inherit] `;'
rhs	::=	[`=>' ptid [scope]]
		[`start'][`queue']
		[`opnum='number]
inherit	::=	`from' otid
args	::=	`(` argspec {, argspec}* `)'
	|	`(void)'
	|	`()'
contextdcl	::=	`context' `(` identifier {, identifier}* `)' `;'
argspec	::=	mode type name
mode	::=	`in' | `out' | `inout'
type	::=	identifier
name	::=	identifier
otid	::=	identifier
ptid	::=	identifier

obj_Header 情報

otid - 「オブジェクト型識別子」。オブジェクト型を識別します。otid は、導入システムごとに一意でなければなりません。この識別子は、インストール後は変更できません。したがって、選択する個々の名前は一意でなければなりません。たとえば、otype を実行するツールの ptid で始めることができます。otid には、64 文字以内という制限があり、予約済み識別子 (ptype、otype、start、opnum、queue、file、session、observe、または handle) は使用できません。

osignature 情報

otype の定義のオブジェクト本体の部分は、アプリケーションが監視および処理の対象とするオブジェクトに関する、メッセージの osignature を記述したものです。

op - 操作名。この名前は、メッセージの操作属性と照合されます。


注 -

ptype と otype の両方にメッセージシグニチャを指定する場合は、それぞれに一意の操作名を使用します。たとえば、ptype と otype の両方に表示操作は指定できません。


args - 操作のための引数。args リストが void の場合、シグニチャは引数のないメッセージだけに一致します。args リストが空で (つまり ()) である場合は、シグニチャは引数とは無関係に一致します。

contextdcl - コンテキスト名。この名前の付いたコンテキストを持つパターンがシグニチャから生成される場合、パターンは空の値リストを持ちます。

ptid - この型のオブジェクトを管理するアプリケーションのプロセス型識別子

opnum - 指定された数をメッセージの opnum 属性に書き込み、メッセージと一致したシグニチャを識別できるようにします。

メッセージがシグニチャと一致するとき、シグニチャの opnum がメッセージに組み込まれます。これでアプリケーションは、tt_message_opnum 呼び出しによって opnum を検索できます。シグニチャごとに固有の opnum を指定すると、どのシグニチャがメッセージと一致したかを判定できます。

tt_otype_opnum_callback_add 呼び出しを使用すれば、opnum にコールバックルーチンを接続できます。メッセージが一致すると、ToolTalk サービスは、その opnum に接続されたコールバックをすべて調べ、それらを起動します。

inherit - otype は、操作を基本の型から引き継げる引き継ぎ階層を形成します。ToolTalk サービスでは otype を定義する場合、引き継いだすべての操作と引き継ぎ元の otype を明示的に指定しなければなりません。この明示的な指定によって、後からの変更 (階層に新しいレベルを追加することや、基本の型に新しい操作を追加することなど) が、otype の動作に予想外の影響を与えるのを防止できます。

scope - このパターン属性は、メッセージの配信範囲属性と照合されます。配信範囲は矢印の右端にあり、メッセージのディスパッチのときに ToolTalk サービスが書き込みます。これは otype を定義するときに、属性を指定できることを意味します。つまり、メッセージの送信側は、メッセージの配信方法を理解していなくてもかまいません。

osignature 処理情報

start - osignature がメッセージに一致しても、この otype を持つ実行中プロセスの中にメッセージに一致したパターンを持つものがない場合は、この otype のプロセスを起動します。

queue - osignature がメッセージに一致しても、この otype を持つ実行中プロセスの中に、メッセージに一致したパターンを持つものがない場合は、この otype のプロセスがメッセージに一致したパターンを持つものを登録するまで、メッセージを待ち行列に入れます。

次に otype ファイルの例を示します。

#include "Sun_EditDemo_opnums.h"

otype Sun_EditDemo_object {
	 handle:
	 /* hilite object given by objid, starts an editor if necessary */
	 hilite_obj(in string objid)
		=> Sun_EditDemo session start opnum=Sun_EditDemo_HILITE_OBJ;
};

Sun_EditDemo_opnums.h ファイルは、edit.c が使用するすべての opnum のシンボリック定義を定義します。これによって、edit.types ファイルと edit.c ファイルは同じ定義を共有できます。