バージョン 4.2.5
 —  ステートメント  —

INTERFACE

INTERFACE interface-name
  [property-definition]
  [method-definition]
END-INTERFACE

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:CREATE OBJECT | DEFINE CLASS | INTERFACE | METHOD | PROPERTY | SEND METHOD

関連機能グループ:「コンポーネントベースプログラミング


機能

インターフェイスは、互いに意味のあるメソッドおよびプロパティの集まりであり、クラスの特定機能を提供します。

クラスに対して 1 つ以上のインターフェイスを定義することができます。 複数インターフェイスを定義すると、それらが行うことに従ってメソッドを構造化/グループ化することが可能です。例えば、すべてのメソッドを挿入し、1 つのインターフェイスの持続性(ロード、ストア、更新)を扱い、他のメソッドを他のインターフェイスに挿入します。

INTERFACE ステートメントは、インターフェイスを定義するために使用します。 Natural クラスモジュールでのみ使用し、次のように定義できます。

インターフェイスに関連するプロパティとメソッドは、プロパティとメソッド定義で定義します。

Top of page

構文説明

interface-name

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

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

property-definition プロパティ定義は、インターフェイスのプロパティを定義するために使用します。 下記の「プロパティ定義」を参照してください。
method-definition メソッド定義は、インターフェイスのメソッドを定義するために使用します。 下記の「メソッド定義」を参照してください。
END-INTERFACE INTERFACE ステートメントを終了するには、Natural の予約語 END-INTERFACE を使用する必要があります。

プロパティ定義

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

PROPERTY property-name
  [(format-length/array-definition)]
  [READONLY]
  [ISoperand]
END-PROPERTY

プロパティは、クライアントによってアクセス可能なオブジェクトの属性です。 例えば、従業員を表すオブジェクトは Name プロパティと Department プロパティを持ちます。 Name または Department プロパティをアクセスすることによって従業員の名前や部署を検索したり変更したりするほうが、値を返す 1 つのメソッドおよび値を変更する別のメソッドを呼び出すより、クライアントにとっては非常に簡単です。

各プロパティは、その値を保存するためにクラスのオブジェクトデータエリアに変数を必要とします。これはオブジェクトデータ変数として参照されます。 プロパティ定義を使用してこの変数をクライアントにアクセス可能にします。 プロパティ定義は、プロパティの名前とフォーマットを定義し、オブジェクトデータ変数に接続します。 最も単純なケースでは、プロパティは、オブジェクトデータ変数自体の名前とフォーマットを使用します。 一定の制限内の名前とフォーマットを変更することも可能です。

property-name

プロパティに割り当てる名前です。 プロパティ名は最大 32 文字以内で、Natural ユーザー定義変数の命名規則に従う必要があります。『Natural の使用』ドキュメントの「ユーザー定義変数の命名規則」を参照してください。

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

format-length/array-definition

クライアントに認識されるように、プロパティのフォーマットを定義します。

format-length/array-definition を省略すると、フォーマット長さと配列定義は、IS 節で割り当てられたオブジェクトデータ変数から取得されます。

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

READONLY

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

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

IS operand

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
  [IS subprogram-name]

PARAMETER

USING parameter-data-area

data-definition
END-METHOD

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

method-name

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

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

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

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

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

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

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

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

メソッドが呼び出される場合は、OPTIONAL パラメータを指定する必要はありません。 SEND METHOD ステートメントで nX 表記を使用することにより、これらを未指定にしておくことができます。

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

Top of page