インターフェースにしたい理由

[id:lethevert:20050903:p1]

# soutaro 『私は「インタフェースになっていて欲しい理由」が理解できないのです。そこが理解できないので、見当違いかもしれない「インタフェースになっていて”欲しくない”理由」しか考えることができません。』 (2005/09/04 22:21)

これは、意外に深い質問かも。深い自己分析に入ってしまいそう。
まず、インターフェースは、継承よりも「軽く」て、「多態の用途に特化」できるところがよいと思っています。
ある処理があったときに、その処理に必要な振る舞いだけをインターフェースとして定義して、そのインターフェースを引数として受け取るようにしておくと、その処理を使う側は、最小限の制限しか受けなくてすむという利点があります。これは、RubyのDuck Typingの便利さを、静的プログラミング言語で実現する方法として、もっとも現実的な方法だと思っています。また、そのためには、一つの大きなクラスに対するインターフェースは、ある程度少なくない個数に分けられている方がよいと思っています。
また、[id:lethevert:20050904:p2]に書いたように、継承が、実装の共有と振る舞いの共有の両方の機能があって、それを区別できないという問題があるのに対し、インターフェースは、振る舞いの共有に特化している(=多態の用途に特化している)ということ。クラスの継承を禁止(あるいは適切に制限)すれば、インターフェースの継承だけでは菱形継承などの問題が起こらないことが、インターフェースが使いやすいと感じている理由です。