記述 | グループ | 意味 |
---|---|---|
public | アクセス制御 | メソッドはどこからでも呼び出せます。 |
internal | アクセス制御 | メソッドは同一クラスまたは派生クラス、注入クラスに所属するメソッドからのみ呼び出せます。 |
native | アクセス制御 | メソッドはFGESレベルでは呼び出せません。 この属性はネイティブメソッドのために存在します。 |
static | ホスト | メソッドはインスタンスを必要としません。 この属性を持つクラスメンバメソッドは特に「クラスメソッド」と呼びます。 この属性が設定されるとメソッド内でthisおよび自身のインスタンス変数が使用できなくなり、 クラス名::メソッド名() の形式で呼び出せるようになります。 また、暗黙にfinal属性も設定されます。 |
final | 継承制御 | メソッドを派生クラスでオーバーライドできなくなります。 |
required | 継承制御 | 派生クラスまたは実装クラスでメソッドのオーバーライドまたは実装が強制されます。 この属性は抽象クラスまたはインターフェイスのメソッドにしか設定できません。 |
abstract | 継承制御 | メソッドは実装を持たず、派生クラスでメソッドの実装が強制されます。 この属性を持つクラスメンバメソッドは特に「抽象メソッド」と呼びます。 この属性は抽象クラスのメソッドにしか設定できません。 |
optional | 継承制御 | 実装クラスでメソッドの実装が任意になります。 この属性はインターフェイスメソッドにしか設定できません。 |
override | オーバーライド | 基底クラスにある同名のメソッドをオーバーライドします。 メソッド宣言の外部インターフェイスはオーバーライド対象メソッドと同じでなければいけません。 この属性が設定されるとメソッド内でオーバーライド対象メソッドオブジェクトを示すsuperが使用可能になります。 この属性はオーバーライド対象がabstract属性を持つ場合は使用できません。 |
forced_override | オーバーライド | 基底クラスにある同名のメソッドを強制的にオーバーライドします。 メソッド宣言は基底クラスと異なっても構いませんが、 互換性のない形に変化させた場合は実行時に例外が発生する可能性があります。 この属性が設定されるとメソッド内でオーバーライド対象メソッドオブジェクトを示すsuperが使用可能になります。 この属性の使用は推奨されません。 |
implements | オーバーライド | 基底クラスにある同名の抽象メソッドを実装します。 メソッド宣言の外部インターフェイスは実装する対象メソッドと同じでなければいけません。 この属性は実装する対象がabstract属性を持たない場合は使用できません。 |
redefine | 再定義 | 既に存在する同名のメソッドを再定義します。 メソッド宣言の外部インターフェイスは既存のメソッドと同じでなければいけません。 再定義前のメソッドオブジェクトは消滅するため、 既存の同メソッドへの参照は無効になり、メソッドが実行中であった場合例外が発生します。 この属性はネイティブメソッドには適用できません。 |
super | 対象制御 | メソッドは基底クラスを対象クラスとしてコンパイルされます。 この属性が設定されたメソッドは基底クラスで使用できる名前のみが使用でき、 同じ基底クラスを持つ他のクラスのインスタンスをホストとしてこのメソッドを呼び出せるようになります。 この属性は多重宣言でき、宣言した回数分基底クラスへさかのぼります。 この属性は通常継承している基底クラスのみを目標とすることができます。 |
portable | 対象制御 | メソッドはAnyClassを対象クラスとしてコンパイルされます。 この属性が設定されたメソッドはあらゆるクラスのインスタンスをホストとして呼び出せるようになります。 その代わり、thisからの静的名前解決は型検証付きの動的解決に変更され、 所属クラスと同等の定義をthisが持っていると仮定してコンパイルされます。 (同等の定義とは、属性および型が同じ状態を指し、通常injectを使用して生成します) また、所属クラスのクラス共有変数への直接参照もSelfTypeを明示しなければいけません。 クラス共有変数の指定にthisを用いた場合、所属クラスではなくthisから見えている変数を示します。 |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> | interface B{ method void C(); } } class D{ class E:implements A::B{ method void A@@B@@C(); } } method void D::E::A@@B@@C(){} |
記述 | 意味 |
---|---|
editable | 引数オブジェクトを編集可能にします。 これを指定しない場合、引数は読み取り専用です。 |
depend | 引数オブジェクトのeditable/readable参照属性をthisと同じにします。 |
values | 値渡しを擬似的に行います。 |
< 1> < 2> | } |
< 1> < 2> < 3> < 4> | var Integer n; n=n_temp; } |
記述 | 意味 |
---|---|
(空欄) | 呼び出しのホストオブジェクトの内容を変更する可能性があります。 呼び出しのホストは編集可能(editable)参照でなければいけません。 |
const | 呼び出しのホストオブジェクトの内容を変更しません。 この属性が設定されるとthisが読み取り専用(readonly)参照になります。 |
depend | 戻り値型およびthisのeditable/readable参照属性が呼び出し元のホストオブジェクトの参照属性になり、 非const版とconst版のメソッドを多重定義しているように扱えます。 この属性が設定されると戻り値型およびthisは読み取り専用(readonly)参照としてコンパイルされますが、 実行時には呼び出し元の参照属性に設定されます。 この属性はコンテナクラスが保有する参照を返す時に便利です。 |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> | var int n; method int@ GetVar()depend{retref @n;}//実際にできる定義 } class overload_class{ var int n; method int@ GetVar(){retref @n;} method readonly int@ GetVar()const{retref @n;} //C++では上記のような定義ができるが、 //オーバーロードのないFGESではできないため、dependで対応している } |