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 で登録される場合に限り関連します。 |
ID
interface-GUID |
ID 節:
この節は、グローバルユニーク ID をインターフェイスに割り当てます。 |
property-definition |
プロパティ定義:
プロパティ定義は、インターフェイスのプロパティを定義するために使用します。下記の「プロパティ定義」を参照してください。 |
method-definition |
メソッド定義:
メソッド定義は、インターフェイスのメソッドを定義するために使用します。下記の「メソッド定義」を参照してください。 |
END-INTERFACE |
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 を省略すると、フォーマット長さと配列定義は、 format-length/array-definition を指定する場合、 |
ID
dispatch-ID |
ID 節:
通常、Natural は自動的にディスパッチ ID をプロパティに割り当てます。プロパティが
|
READONLY |
READONLY オプション:
キーワード キーワード |
IS
operand |
IS 節:
|
END-PROPERTY |
インターフェイスプロパティ定義の終了:
Natural 予約語 |
オブジェクトデータエリアに以下のデータ定義を含ませてください。
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 |
ID 節:
通常、Natural は自動的にディスパッチ ID をメソッドに割り当てます。メソッドが ディスパッチ ID は、フォーマット I4 のゼロでない正の定数です。 |
IS
subprogram-name |
IS 節:
この節は、メソッドを実装するサブプログラムの名前を指定するために使用できます。サブプログラムの名前は最大 8 文字です。デフォルトはメソッド名です( |
PARAMETER |
PARAMETER 節:
パラメータは、サブプログラムの実装において後で使用されるパラメータと一致している必要があります。これは、パラメータデータエリアを使用することによって保証されます。 パラメータデータエリアの
|
END-METHOD |
メソッド定義の終了:
Natural 予約語 |