INTERFACE interface-name
|
|
[ EXTERNAL ]
|
|
[ID interface-GUID]
|
|
[property-definition] | |
[method-definition] | |
END-INTERFACE
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:CREATE OBJECT | DEFINE CLASS | INTERFACE | METHOD | PROPERTY | SEND METHOD
関連機能グループ:「コンポーネントベースプログラミング」
インターフェイスは、互いに意味のあるメソッドおよびプロパティの集まりであり、クラスの特定機能を提供します。
クラスに対して 1 つ以上のインターフェイスを定義することができます。 複数インターフェイスを定義すると、それらが行うことに従ってメソッドを構造化/グループ化することが可能です。例えば、すべてのメソッドを挿入し、1 つのインターフェイスの持続性(ロード、ストア、更新)を扱い、他のメソッドを他のインターフェイスに挿入します。
INTERFACE
ステートメントは、インターフェイスを定義するために使用します。 Natural クラスモジュールでのみ使用し、次のように定義できます。
DEFINE CLASS
ステートメント内で定義します。 この形式は、インターフェイスが 1 つのクラスに実装されるときにのみ使用します。
または、DEFINE CLASS
ステートメントの INTERFACE USING
節に組み込まれるコピーコードで定義します。 この形式は、インターフェイスが複数のクラスに実装されるときに使用します。
インターフェイスに関連するプロパティとメソッドは、プロパティとメソッド定義で定義します。
interface-name |
インターフェイスに割り当てる名前です。 インターフェイス名は最大 32 文字以内で、ユーザー定義変数の 命名規則に従っている必要があります(『Natural スタジオの使用』ドキュメントの「ユーザー定義変数の命名規則」を参照)。 クラスごとに一意で、クラス名とも異なっている必要があります。 異なるプログラミング言語で書かれたクライアントによってインターフェイスを使用する予定であれば、インターフェイス名はこれらの言語に適用する命名規則と矛盾しないように選択する必要があります。 |
---|---|
EXTERNAL | EXTERNAL 節は、当インターフェイスがクラスによって実装されるが、本来は別のクラスで定義されていることを示します。 EXTERNAL 節は、クラスが DCOM で登録される場合に限り関連します。 EXTERNAL 節のインターフェイスは、クラスが DCOM で登録されるときには無視されます。 インターフェイスは、本来それを定義するクラスによって登録されることを前提とします。
|
ID interface-GUID | ID 節は、グローバルユニーク ID をインターフェイスに割り当てます。 インターフェイス GUID は、LOCAL 節に組み込まれるデータエリアに定義された GUID の名前です。 インターフェイス GUID は英文字定数です。 GUID は、クラスが DCOM で登録される場合にインターフェイスに割り当てる必要があります。
|
property-definition | プロパティ定義は、インターフェイスのプロパティを定義するために使用します。 下記の「プロパティ定義」を参照してください。 |
method-definition | メソッド定義は、インターフェイスのメソッドを定義するために使用します。 下記の「メソッド定義」を参照してください。 |
END-INTERFACE | INTERFACE ステートメントを終了するには、Natural の予約語 END-INTERFACE を使用する必要があります。
|
プロパティ定義は、インターフェイスのプロパティを定義するために使用します。
PROPERTY property-name
|
|
[(format-length/array-definition)] | |
[ID dispatch-ID]
|
|
[READONLY ]
|
|
[IS operand]
|
|
END-PROPERTY
|
プロパティは、クライアントによってアクセス可能なオブジェクトの属性です。 例えば、従業員を表すオブジェクトは "Name" プロパティと "Department" プロパティを持ちます。 "Name" または "Department" プロパティをアクセスすることによって従業員の名前や部署を検索したり変更したりするほうが、値を返す 1 つのメソッドおよび値を変更する別のメソッドを呼び出すより、クライアントにとっては非常に簡単です。
各プロパティは、その値を保存するためにクラスのオブジェクトデータエリアに変数を必要とします。これはオブジェクトデータ変数として参照されます。 プロパティ定義を使用してこの変数をクライアントにアクセス可能にします。 プロパティ定義は、プロパティの名前とフォーマットを定義し、オブジェクトデータ変数に接続します。 最も単純なケースでは、プロパティは、オブジェクトデータ変数自体の名前とフォーマットを使用します。 一定の制限内の名前とフォーマットを変更することも可能です。
property-name |
プロパティに割り当てる名前です。 プロパティ名は最大 32 文字以内で、Natural ユーザー定義変数の命名規則に従う必要があります。『Natural スタジオの使用』ドキュメントの「ユーザー定義変数の命名規則」を参照してください。 異なるプログラミング言語で書かれたクライアントによってプロパティを使用する予定であれば、プロパティ名はこれらの言語に適用する命名規則と矛盾しないように選択する必要があります。 |
---|---|
format-length/array-definition |
クライアントに認識されるように、プロパティのフォーマットを定義します。 format-length/array-definition を省略すると、フォーマット長さと配列定義は、 format-length/array-definition を指定する場合、 |
ID dispatch-ID |
通常、Natural は自動的にディスパッチ ID をプロパティに割り当てます。 プロパティが ディスパッチ ID は、フォーマット I4 のゼロでない正の定数です。 |
READONLY |
このキーワードが指定されると、プロパティの値は読まれるだけで、設定されません。 キーワード |
IS operand |
|
END-PROPERTY | Natural 予約語 END-PROPERTY を使用して、インターフェイス PROPERTY 定義を終了させる必要があります。
|
オブジェクトデータエリアに以下のデータ定義を含ませてください。
1 Salary(p7.2) 1 SalaryHistory(p7.2/1:10)
その後、以下のプロパティ定義が可能になります。
property Salary end-property property Pay is Salary end-property property Pay(P7.2) is Salary end-property property Pay(N7.2) is Salary end-property property SalaryHistory end-property property OldPay is SalaryHistory(*) end-property property OldPay is SalaryHistory(1:10) end-property property OldPay(P7.2/*) is SalaryHistory(1:10) end-property property OldPay(N7.2/*) is SalaryHistory(*) end-property
以下のプロパティ定義は許されません。
/* Not data transfer-compatible. */ property Pay(L) is Salary end-property /* Not data transfer-compatible. */ property OldPay(L/*) is SalaryHistory(*) end-property /* Not data transfer-compatible. */ property OldPay(L/1:10) is SalaryHistory(1:10) end-property /* Assigns an array to a scalar. */ property OldPay(P7.2) is SalaryHistory(1:10) end-property /* Takes only a sub-array. */ property OldPay(P7.2/3:5) is SalaryHistory(*) end-property /* Index specification omitted in ODA variable SalaryHistory. */ property OldPay is SalaryHistory end-property /* Only asterisk notation allowed in property format specification. */ property OldPay(P7.2/1:10) is SalaryHistory(*) end-property
メソッド定義は、インターフェイスのメソッドを定義するために使用します。
METHOD method-name
|
|||||
[ID dispatch-ID]
|
|||||
[IS subprogram-name]
|
|||||
PARAMETER
|
USING parameter-data-area
|
||||
data-definition | |||||
END-METHOD
|
インターフェイスを各種クラスで再利用可能にするためには、コピーコードからインターフェイス定義を組み込み、インターフェイス定義の後に METHOD
ステートメントでサブプログラムを定義してください。 その後、各種クラスでそれぞれにメソッドを実装できます。
method-name |
メソッドに割り当てる名前です。 メソッド名は最大 32 文字で、Natural の命名規則に従う必要があります(『Natural スタジオの使用』ドキュメントの「ユーザー定義変数の命名規則」を参照)。 インターフェイスごとに一意にする必要があります。 異なるプログラミング言語で書かれたクライアントによってメソッドを使用する予定であれば、メソッド名はこれらの言語に適用する命名規則と矛盾しないように選択する必要があります。 |
---|---|
ID dispatch-ID |
通常、Natural は自動的にディスパッチ ID をメソッドに割り当てます。 メソッドが ディスパッチ ID は、フォーマット I4 のゼロでない正の定数です。 |
IS subprogram-name | これは、メソッドを実装するサブプログラムの名前です。 サブプログラムの名前は最大 8 文字です。 デフォルトはメソッド名です(IS 節が指定されない場合)。
|
PARAMETER |
メソッドのパラメータを指定します。 パラメータは、サブプログラムの実装において後で使用されるパラメータと一致している必要があります。 これは、パラメータデータエリアを使用することによって保証されます。 パラメータデータエリアの
|
END-METHOD | Natural 予約語 END-METHOD を使用して、インターフェイスの METHOD 定義を終了させる必要があります。
|