見出し画像

『オブジェクト指向入門』ガイド(1) ソフトウェアの品質

『オブジェクト指向入門』の名を冠した、鈍器のような書籍があります。しかも「原則・コンセプト」編と「方法論・実践」編の二冊構成。入門書にしてこの厚さ。初心者に手に取ってもらうことを意図しているとは到底思えません。しかしその内容は、まさしくオブジェクト指向プログラミングに入門するために必要な理論や考察に満ちています。世に溢れるオブジェクト指向の入門書はたしかに取っつきやすいのですが、読み終えても「なんとなくわかった気がする」という域を出ないのではないかと思います。バートランド・メイヤー博士の著したこの本はその真逆の存在です。苦労して読み進めるほどに、地に足がついた基礎が身についていくことを実感させてくれます。

オブジェクト指向の方法論は、数学のように厳密な定義が遍く共有されたものではありません。論者によってオブジェクト指向の解釈が微妙に異なるのはそのためだと思います。この二冊の本にまとめられているのは、バートランド・メイヤー博士が提唱するオブジェクト指向の理論体系です。メイヤー博士はJavaやC#に影響を与えたオブジェクト指向言語、Eiffel(エッフェル)の産みの親としても知られています。古い本なので時代にそぐわない部分もありますが、あなたがこれから出会う様々なオブジェクト指向に対して、確固たる足場、視点が得られることと思います。これから書いていくのは、その理論体系から現代のプログラミング環境でも役に立つエッセンスを抽出したものです。オブジェクト指向のすべてを語るには遠く及びませんが、あなたが書店で『オブジェクト指向入門』を手に取るきっかけになれたなら幸いです。

オブジェクト指向はソフトウェアのモジュール性を向上させる

オブジェクト指向プログラミングが広く使われている技術である以上、そこにはなんらかの価値があるはずです。メイヤー博士曰く、それは端的に言えば「ソフトウェアの品質を向上させること」にあります。

ソフトウェアの品質にもいろいろな観点がありますが、オブジェクト指向が主に影響を与えるのは内的品質要因と呼ばれるものです。内的品質要因はソフトウェアのユーザーからは見えません。ソースコードが読める専門家にしか認識されない品質ですが、ユーザーが認識する外的品質要因に大きな影響を与えます。作られたソフトウェアを使ってみてオブジェクト指向か否かを判別することは困難ですが、だからといってオブジェクト指向で作ることの意義が失われるわけではありません。この本で特に焦点が当てられている内的品質要因は二つあります。

まず一つ目は拡張性です。拡張性とは仕様の変更や機能追加のしやすさのことです。ソフトウェア開発に変更はつきものです。巨大な一枚岩のようなコードは変更が困難になります。原因は様々ですが、コード間の依存関係が認識できないほど複雑になっていること、コードの重複が多いことなどが挙げられると思います。「似ているけれど微妙に違う」、そんなコードが必要なとき、コピー&ペーストでコードを増やしてしまいがちです。そうして更にコードの肥大化が加速するのです。

拡張性の問題は規模の問題である。小さなプログラムの変更は普通 あまり難しい問題ではないが、ソフトウエアの規模が大 きくなるにつれて適応は困難になる。プログラムの保守を担当する人にとって、大規模なソフトウェアシステムは、トラ ンプで作った城のようにカードを 1枚引き抜くと全体が崩壊しそ うに見える。(原則・コンセプト p.7)

コードを小さな部品に分解することで、規模の問題を軽減することができます。小さな部品は責務(やるべきこと)が単純になります。単純な部品は簡単に理解できるので、変更も容易です。既存の部品の代わりに、新たに別の部品を差し込むようなことも可能です。

また、小さな部品から成るコードであれば、以前に作ったコードを再び利用できるチャンスが生まれます。これが二つ目の品質要因である再利用性です。再利用性と聞いて、「前回のプロジェクトで作ったコードをそのまま流用できる」という魔法のようなイメージを持つ人も居るかもしれませんが、汎用性を突き詰めたライブラリでもない限りはそこまでの効果は見込めないでしょう。再利用性とはすなわち、コピー&ペーストスタイルのプログラミングから脱却し、無用な重複を無くしたコードが備える内的品質要因のことなのです。

メイヤー博士は、拡張性と再利用性をまとめてモジュール性と呼んでいます。モジュール性とは、コードの分解しやすさと組み合わせやすさと言い換えることもできるでしょう。しかし巨大なプログラムを、小さく単純で、しかも再利用可能なモジュールに分解するのは「何となく」で出来ることではありません。オブジェクト指向のアプローチは、この作業に道筋を与えるものなのです。

ソフトウェアの信頼性を追求することがオブジェクト指向の使命である

外的品質要因のほうについては、オブジェクト指向プログラミングが目指すべきものとして、正確さ頑丈さの二つが挙げられています。

正確さとは仕様によって定義されているとおりに仕事を実行するソフトウェア製品の能力である。(原則・コンセプト p.4)
頑丈さとは異常な条件に対して適切に対応するソフトウェアシステムの能力である。(原則・コンセプト p.6)

ソフトウェア開発の経験があれば、どちらも意識したことがあるはずです。メイヤー博士はこの二つをまとめて信頼性と呼んでいます。オブジェクト指向の型付け例外機構は、信頼性の高いソフトウェアを構築するための強力なツールです。この本では更に、表明を用いた契約による設計について詳細に述べられています。これはコードの書き手の意図を明確にするとともに、バグの検知と原因究明を加速させるアプローチです。この本の主題の一つと言っても過言ではないでしょう。これについては後日改めて書く予定です。

オブジェクト指向プログラミングは選択肢の一つに過ぎない

恐らく上にあげたような品質を向上させることに異論のある人は少ないと思います。ですが、そこに至るアプローチはいくつも存在しています。例えば関数型プログラミングを正しく実践すれば、モジュール性と信頼性は間違いなく向上するでしょう。これからの時代、プログラマには様々なアプローチを用いて良いコードを書く技術が求められると思います。道具の取捨選択には正しい知識が必要です。マルチパラダイムの時代だからこそ、オブジェクト指向の古典に触れて、道具への理解を深めておくのは価値のあることなのではないでしょうか。


この記事が気に入ったらサポートをしてみませんか?