インターフェイス指向設計

『インターフェイス指向設計』を読んだ。念の為に書き添えておくと、この本が指すインターフェイスというのは、いわゆるUIのことではなく、プログラミング部品としてのinterfaceのこと。

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

この本のいいところは

オブジェクト指向プログラミングの肝は 高凝集 で互いに 疎結合 なオブジェクトを用いてプログラムを構築することにある

という態度を一貫して保ち、その目的を達成するにはどうすべきかという観点からインターフェイスの利用について語っている点だと思う。

Bertrand Meyerが『オブジェクト指向入門』で提唱した「契約による設計」は、高品質なコードを実現するための重要な方針を示すものだが、本書ではMeyerが論じたメソッドと呼び出し側の間に成立させるべき契約の基準を議論の呼び水にして、インターフェイスの利用がいかに前述の目的の実現に有効であるかを論じる。特定の言語におけるinterfaceの使い方、のような込み入った話はほとんど出てこないのも良い。

オブジェクト指向にはインターフェイス以外にもクラスや継承、多態性などさまざまなキーワードがひしめき合っていて、「どれを使うか」ではなく、「何故それを使うべきか」「どうやって使うべきか」の方が余程大事だということは多くの人が感じていることだけど、WhyやHowを扱った書籍は全般的に重厚で手を出しにくい物が多い。そういう中で比較的薄くて読みやすいのも良かった。

これまで契約による設計という概念は知っていたがいまいち手に馴染みがないという人や、どういう時に継承とインターフェイスを使い分けるべきかが分からなかったり、良いインターフェイスとは何かをあまり考えたことが無いという人にオススメ。

そもそも本書を読んだのは、Qiitaのコードベースの見通しが悪いと感じていてそれをどうにかしたいと思ったからだった。QiitaはRubyで書かれているが、Rubyには型が存在しないので、インターフェイスの契約をちゃんと守っているかの確証を持てないという問題意識を最近感じてる。次はその間の橋渡しをするようなgemを作ろうと思う。