METHOD

METHOD method-name  
  OF [INTERFACE] interface-name
  IS subprogram-name
END-METHOD

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

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

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

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


関数

METHOD ステートメントは、実装としてサブプログラムをメソッドにインターフェイス定義で割り当てます。問題のインターフェイス定義がコピーコードから取得され、クラス固有の方法で実装される場合は、これが使用されます。

METHOD ステートメントは、DEFINE CLASS ステートメント内でインターフェイス定義後にのみ使用できます。指定するインターフェイス名およびメソッド名は、DEFINE CLASS ステートメントの INTERFACE 節で定義されている必要があります。

構文説明

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

これは、method に割り当てられた名前です。

OF interface-name
インターフェイス名:

これは、interface に割り当てられた名前です。

IS subprogram-name
IS 節:

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

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

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

以下の例は、同じインターフェイスを 2 つのクラスに別々に実装する方法と、これを実現するために PROPERTY ステートメントと METHOD ステートメントを使用する方法を示しています。

インターフェイス Measure をコピーコード iface-c に定義します。クラス ElephantMouse はインターフェイス Measure を実装します。したがって、それらは両方ともコピーコード iface-c を組み込みます。しかし、クラスは、それらの個々のオブジェクトデータエリアから異なる変数を用いてプロパティ Height を実装し、異なるサブプログラムでメソッド Init を実装します。それらは PROPERTY ステートメントを使用して選択したデータエリア変数をプロパティに割り当てて、METHOD ステートメントで選択したサブプログラムをメソッドに割り当てます。

プログラム prog は両方のクラスのオブジェクトを作成し、個々のクラス実装への初期化の指定をそのままにして、同じメソッド Init を使用してそれらを初期化できるようになります。

Example

次は上記の例で使用された Natural モジュールの完全な内容を示しています。

コピーコード:iface-c

interface Measure
*
property Height(p5.2)
end-property
*
property Weight(i4)
end-property
*
method Init
end-method
*
end-interface

クラス:class1

define class elephant
object using class1-o
interface using iface-c
*
property Height of interface Measure is height
end-property
*
property Weight of interface Measure is weight
end-property
*
method Init of interface Measure is init1-n
end-method
*
end-class
end

オブジェクトデータエリア:class1-o

*   *** Top of Data Area ***
  1 HEIGHT                  P 5.2
  1 WEIGHT                  I 2
*   *** End of Data Area ***

メソッドサブプログラム:init1-n

define data
object using class1-o
end-define
*
height := 17.3
weight := 120
*
end

クラス:class2

define class mouse
object using class2-o
interface using iface-c
*
property Height of interface Measure is size
end-property
*
property Weight of interface Measure is weight
end-property
*
method Init of interface Measure is init2-n
end-method
*
end-class
end

オブジェクトデータエリア:class2-o

*   *** Top of Data Area ***
  1 SIZE                    P 3.2
  1 WEIGHT                  I 1
*   *** End of Data Area ***

メソッドサブプログラム:init2-n

define data
object using class2-o
end-define
*
size := 1.24
weight := 2
*
end

プログラム:prog

define data local
1 #o handle of object
1 #height(p5.2)
1 #weight(i4)
end-define
*
create object #o of class 'Elephant'
send "Init" to #o
#height := #o.Height
#weight := #o.Weight
write #height #weight
*
create object #o of class 'Mouse'
send "Init" to #o
#height := #o.Height
#weight := #o.Weight
write #height #weight
*
end