INTERFACE

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 をインターフェイスに割り当てます。interface-GUID は、LOCAL 節に組み込まれるデータエリアに定義された GUID の名前です。interface-GUID は英文字定数です。GUID は、クラスが DCOM で登録される場合にインターフェイスに割り当てる必要があります。

property-definition
プロパティ定義:

プロパティ定義は、インターフェイスのプロパティを定義するために使用します。下記の「プロパティ定義」を参照してください。

method-definition
メソッド定義:

メソッド定義は、インターフェイスのメソッドを定義するために使用します。下記の「メソッド定義」を参照してください。

END-INTERFACE
INTERFACE ステートメントの終了:

INTERFACE ステートメントを終了するには、Natural の予約語 END-INTERFACE を使用する必要があります。

プロパティ定義

プロパティ定義は、インターフェイスのプロパティを定義するために使用します。

PROPERTY property-name
  [(format-length/array-definition)]
  [IDdispatch-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 を省略すると、フォーマット長さと配列定義は、IS 節で割り当てられたオブジェクトデータ変数から取得されます。

format-length/array-definition を指定する場合、IS 節の operand に指定されたオブジェクトデータ変数のフォーマットとの転送の互換性が必要です。READONLY プロパティの場合、データ転送の互換性は 1 つの方向(ソースオペランドとしてのオブジェクトデータ変数と宛先オペランドとしてのプロパティ)にのみ必要です。配列定義を指定するときは、次元、次元ごとのオカレンス、下限、および上限を、対応するオブジェクトデータ変数の配列定義と等しくする必要があります。これは、次元ごとに 1 つのアスタリスクを指定することによって表現されます。

ID dispatch-ID
ID 節:

ID 節は、特定の数値識別子をプロパティに割り当てます。この ID(dispatch-ID)は、クラスを DCOM に登録する場合にのみ関連します。

通常、Natural は自動的にディスパッチ ID をプロパティに割り当てます。プロパティが EXTERNAL 節のインターフェイスに属している場合にのみ、プロパティの固有ディスパッチ ID を明示的に定義する必要があります。(このインターフェイスは、このクラスに実装されますが、元は別のクラスで定義されています)。この場合、使用するディスパッチ ID は通常、インターフェイスの本来の実装によって指示されます。

dispatch-ID は、フォーマット I4 のゼロでない正の定数です。

READONLY
READONLY オプション:

キーワード READONLY が指定されると、プロパティの値は読まれるだけで、設定されません。IS 節の operand に指定されたオブジェクトデータ変数のフォーマットは、format-length/array-definition に指定されたフォーマットへのデータ転送の互換性が必要です。逆方向へのデータ転送の互換性は必要ありません。

キーワード READONLY が省略されると、プロパティの値は読み込みおよび設定が可能です。

IS operand
IS 節:

IS 節の operand により、オブジェクトデータ変数をプロパティ値の保存場所として割り当てます。割り当てられたオブジェクトデータ変数はグループでなくてもかまいません。変数は正常なオペランド構文で参照されます。これは、オブジェクトデータ変数が配列であれば、添字指定で参照する必要があることを意味しています。完全な添字範囲指定とアスタリスク表記だけが許されます。

INTERFACE ステートメントがコピーコードメンバから組み込まれ、複数のクラスで再利用されるならば、IS 節は使用されません。INTERFACE ステートメントを再利用したい場合は、INTERFACE ステートメント外で PROPERTY ステートメントにオブジェクトデータ変数を割り当てる必要があります。

IS 節を省略すると、プロパティはプロパティと同じ名前のオブジェクトデータ変数と接続されます。この名前を持つ変数が定義されていないか、または、それがグループであれば、構文エラーが生じます。

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
  [IDdispatch-ID]
  [ISsubprogram-name]

PARAMETER

USINGparameter-data-area

data-definition
END-METHOD

インターフェイスを各種クラスで再利用可能にするためには、コピーコードからインターフェイス定義を組み込み、インターフェイス定義の後に METHOD ステートメントでサブプログラムを定義してください。その後、各種クラスでそれぞれにメソッドを実装できます。

構文要素の説明:

構文要素 説明
method-name
メソッド名:

メソッドに割り当てる名前です。メソッド名は最大 32 文字で、Natural の命名規則に従う必要があります(『Natural の使用』ドキュメントの「ユーザー定義変数の命名規則」を参照)。インターフェイスごとに一意にする必要があります。

異なるプログラミング言語で書かれたクライアントによってメソッドを使用する予定であれば、メソッド名はこれらの言語に適用する命名規則と矛盾しないように選択する必要があります。

ID dispatch-ID
ID 節:

ID 節は、特定の数値識別子をメソッドに割り当てます。この ID(ディスパッチ ID)は、クラスを DCOM に登録する場合にのみ関連します。

通常、Natural は自動的にディスパッチ ID をメソッドに割り当てます。メソッドが EXTERNAL 節のインターフェイスに属している場合にのみ、メソッドの固有ディスパッチ ID を明示的に定義する必要があります。(このインターフェイスは、このクラスに実装されますが、元は別のクラスで定義されています)。この場合、使用するディスパッチ ID は、通常インターフェイスの本来の実装によって指示されます。

ディスパッチ ID は、フォーマット I4 のゼロでない正の定数です。

IS subprogram-name
IS 節:

この節は、メソッドを実装するサブプログラムの名前を指定するために使用できます。サブプログラムの名前は最大 8 文字です。デフォルトはメソッド名です(IS 節が指定されない場合)。

PARAMETER
PARAMETER 節:

PARAMETER 節は、メソッドのパラメータを指定します。DEFINE DATA ステートメントの PARAMETER 節と同じ構文です。

パラメータは、サブプログラムの実装において後で使用されるパラメータと一致している必要があります。これは、パラメータデータエリアを使用することによって保証されます。

パラメータデータエリアの BY VALUE とマークされたパラメータは、メソッドの入力パラメータです。

BY VALUE が指定されていないパラメータは、"by reference"(参照)で渡される入力/出力パラメータです。これがデフォルトです。

BY VALUE RESULT とマークされている最初のパラメータが、メソッドの戻り値として返されます。複数のパラメータがこのようにマークされている場合は、その他のパラメータは入力/出力パラメータとして扱われます。

END-METHOD
メソッド定義の終了:

Natural 予約語 END-METHOD を使用して、インターフェイスの METHOD 定義を終了させる必要があります。