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

METHOD

METHODmethod-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 節で定義されている必要があります。

Top of page

構文説明

method-name これは、メソッドに割り当てられた名前です。
OF interface-name これは、インターフェイスに割り当てられた名前です。
IS subprogram-name これは、メソッドを実装するサブプログラムの名前です。 サブプログラムの名前は最大 8 文字です。 デフォルトは method-name です(IS 節が指定されない場合)。
END-METHOD METHOD ステートメントを終了するには、Natural の予約語 END-METHOD を使用する必要があります。

Top of page

以下の例は、同じインターフェイスを 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 

Top of page