村山さん、
回答ありがとうございます。

> ・「スーパークラス」で必要なメソッドを全部定義し、例外を投げるように記
述する。
> (それらのメソッドはサブクラスで適切にオーバーライドすることが前提。)

たしかに、そのような abstract class が Rails のソースにはありますよね。

ただし、Javaの interface は機能の定義なので、abstract class より module
に近いものかと思います・・・


ありがとうございます。



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


-- 

♪  吉田 裕美 (Yuumi Yoshida)
♪    Blog      http://d.hatena.ne.jp/yuum3/
♪    HomePage  http://www.ey-office.com/