rename と redefineとは? わかりやすく解説

rename と redefine

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/15 09:32 UTC 版)

Eiffel」の記事における「rename と redefine」の解説

Eiffel特徴一つとして継承における細かい指定が可能ということ挙げられる例えclass A feature method1 is io.put_string("Hello from A") io.new_line end end class B inherit A feature method1 is io.put_string("Hello from B") io.new_line end end というコードがあるとする(io標準入出力を扱うインスタンスで、ANYクラスメンバである)。これは A というクラス継承した B というクラスに同じ名前のメソッドがある場合である。このとき class C creation make feature a : A b : B make is do !!b a := b b.method1 a.method1 end end というコード実行したとき。b.method1 はおそらく B で定義されメソッドが動くと誰もが期待するだろうが、a.method1 で実行されるメソッドは A と B どちらで定義されたものだろうか?この場合の処理は言語によって異なっており例えC++の場合は A で定義されメソッド実行されJavaの場合は B のメソッド実行される。すなわち言語によって動作が違うため作成者勘違いなどによって混乱を招くおそれがあるEiffelでは実のところ、どちらが実行される以前上記のような例ではコンパイルすることができないことになっている。すなわち Eiffelメソッド全てデフォルトでは継承不可である。しかしこれではあまりに制約が強すぎるため、同名メソッド定義する必要性があるときは、継承クラス作成者がどちらを実行するかを指定することが出来る。 具体的には rename と redefine という機能があり、上記の例では A で定義されメソッド実行したい場合class B inherit A rename method1 as method2 end とする。この場合クラス B では A のメソッドを method2 という名前に改名させて、名前の衝突防いでいる。B のインスタンスでも、クラス Aインスタンスとして扱われ場合上記例のような場合)は A の method1 が実行されクラス Bインスタンスとして扱われ場合は B のmethod1 が実行される。B のインスタンスとして扱われた状態で A の method1 を実行するには上記の例では b.method2 とすればよい。これらの改名による効果継承先と継承元の他、多重継承時のメソッド同士衝突にも使用できる逆に A のインスタンスとして扱われる場合でも B の method1 を実行したい場合は以下のようにする。 class B inherit A redefine method1 end この場合クラス Bクラス A の method1 を継承時に破棄しクラス B で再定義することを示している。クラス Bインスタンスは A、B どちらで扱われても method1 はクラス B のものが実行されクラス A の method1 はもはや実行されることは無い。なお再定義を宣言された method1 は必ずクラス B で再定義しなければならず、再定義してない場合コンパイルエラーとなる。 このようにEiffel ではクラス継承時に継承クラス作成者メソッド扱い自由に設定することができる。

※この「rename と redefine」の解説は、「Eiffel」の解説の一部です。
「rename と redefine」を含む「Eiffel」の記事については、「Eiffel」の概要を参照ください。

ウィキペディア小見出し辞書の「rename と redefine」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「rename と redefine」の関連用語

rename と redefineのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



rename と redefineのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのEiffel (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS