「良いアプリケーション」とは?
ソフトウェア開発において、要件が一定であることはありえません。仕様の変更や拡張など、変更が常につきものです。変更の「コスト」がかさむと、費用対効果が低く、書いても楽しくないアプリケーションを開発しなければならなくなります。このような事態はぜひとも避けたいものです。
では、運用コストを下げ、生産性を上げるようなアプリケーションとは、どういったものなのでしょうか。
アプリケーションは、変更に耐えうるべきです。しかし、「どんな」変更が「いつ」起こるかなど、だれも予想がつかないため、ある特定の変更を予測してアプリケーションを設計すると、その開発は失敗する可能性が高まります。したがって、どんな変更が起こってもかまわないように、変更の選択肢を残しておくことが重要です。選択肢を残すことで、現時点での成果を出しつつ将来の変更にも対応できる柔軟さを持った、良いアプリケーションへと育てていくことができます。
設計の重要性
アプリケーションは、コードで構成されています。つまり、コードを構成することが「設計」といえます。
オブジェクト指向設計は、オブジェクト同士の依存を管理することです。オブジェクトが依存していると、それだけ変更しなければならないオブジェクトも増えます。
良いアプリケーションには、変更に耐えられる柔軟性が必要でした。しかし貧弱な設計では、変更に耐えられません。アプリケーションが成長するにしたがって、開発コストが高くなってしまいます。そのため、適切なオブジェクト指向設計を身につけることが、良いアプリケーション開発のための第一歩なのです。
オブジェクト指向設計の基本原則
オブジェクト指向設計には、よく知られている原則がいくつかあります。
「単一責任の原則」は、変更がかんたんでメンテナンスしやすいコードを書くための原則です。書くコードは、見通しが良く、合理的で、利用性が高く、模範的である、という性質を持つことで、変更が容易になります。このようなコードを書くためには、まず単一責任のクラスを設計すべきです。
「オープン・クローズド」は、継承を使った結果得られるコードです。階層構造を正しく書くことによって拡張が容易で、利用性の高いものになります。
「リスコフの置換原則」は、階層構造の派生型は上位型と置換可能であるべき、という暗黙の契約を定義します。Rubyらしく言うと、オブジェクトは自身が主張するとおりに振る舞うべき、ということです。
「インターフェース分離」や「依存性逆転」といった原則もあります。そのほかにも、「DRY原則」や「デメテルの法則」といったものも存在します。
「適切な設計視点」を身につけるために
本書『オブジェクト指向設計実践ガイド』は、オブジェクト指向設計の名著として高く評価され続けている書籍の翻訳版です。上記の原則を用いながら、良いアプリケーションを書くためのプログラミングルールを明確に示しています。
本書をとおして、いま一度設計のルールを考えてみませんか。