From: murayama Date: 2006-08-13T12:25:22+09:00 Subject: [ruby-list:42683] Re: Javaの interfaceのようなもの 普段はROMの村山です。 > Ruby 上で Javaの interface のようなものものを実現するには、どうしたらよ > いのでしょうか? > > Rubyは型を宣言しないので機能的には interface は不要ですが。 > クラスを実装する人に、あるクラスに実装しなければいけないメソッドを伝える > (強制する)目的としての interface 的な使い方をしたいのです。 interfaceというよりはabstractクラスなのかも知れませんが、いずれにせよ Rubyではコンパイルという概念はないですよね?だからせいぜい次のような 対応しかできないのではないでしょうか。 ・「スーパークラス」で必要なメソッドを全部定義し、例外を投げるように記述する。 (それらのメソッドはサブクラスで適切にオーバーライドすることが前提。) 初回呼び出し時に例外が出ればいいというのであれば、これで終わり。 ・起動時に、そのクラスのサブクラス一覧を取得し(これの取得方法はアプリ依存? それともリフレクションとかで可能?)、それらサブクラス全てについて上記に該当する メソッドを全て呼び出し、例外が出ないことを確認させる。(コンパイルエラーに相当。) 或いはそれを確認するオプションを用意して、開発者にそのオプションを使用して 確認することを義務づけるなどする。 他にもっといい方法があるかもしれませんが、とりあえず思いつくのはこういうものです。 -- murayama