ObectSquare

[オブジェクト指向を学ぶための入門書ガイド]


4.入門書にしてOOのバイブル


オブジェクト指向入門、バートランド・マイヤー、二木厚吉監訳、酒匂寛・酒匂順子訳、アスキー出版、1990

この本は、オブジェクト指向の基礎(とは初歩のことではない)から上級技法までみっちりこってりと学びたい人のためのテキストとして最良のものです。
この本で学んでほしいことは3つあります。
オブジェクト指向とソフトウェア工学の交叉のあり方を基礎から見直しオブジェクト指向の概念を新たな言語の作成という斬新な切り口から交通整理している点、そしてその結果抽出されたオブジェクト指向にとって必要な概念の広く深い理論的考察、そして最後が「契約にもとづく設計」とそれを実行するための手段としての不変表明・事前条件・事後条件・例外処理の提案です。

特に、継承について深く考えたい人はぜひ本書の10、11章を手にとってみてください。いかに自分が継承についていいかげんなあいまいな考えしか持ってこなかったがわかるでしょう。平易な型理論的思考をとおして継承概念の整理をする場面は圧巻です。
また、継承とも絡みますが、本書の特徴すなわちEiffelの特徴の1つは、総称性(Genericity)の強調です。
いまでこそC++はテンプレートが使えますが、Eiffelではそれにとどまらず、パラメトライズドクラスもきちんと型チェックがされる点でC++のテンプレートよりも安全です。またこれはC++も同様ですが、パラメトライズドクラスが使える分、ArrayやListなどのコンテナ・クラスの要素に対するダウンキャストの必要がないのもうれしいですね。(さっさとJavaも見習ってパラメトライズドクラス導入してほしいモノです)、という意味でテンプレートとは一味違う強力さです。

>またオブジェクト指向の抽象データ型としての側面を強調しているのも本書の特徴です。
それによって、「契約」による設計概念がごく自然に導入できています。
契約とは、クライアント側オブジェクトとサービス提供側オブジェクトの間での「操作=サービス」実行に関しての仕様を与えるものです。
ひとことでいえば、「クライアント側が、XXXという状態(事前条件)を満たす状況で操作を呼び出してくれるならば、サービス提供側は対応する処理を実行することでYYYという状態を満たす状況で操作を終了してさしあげます」という内容の契約です。
この考え方によって、オブジェクトの振る舞いを、通常のインターフェースで既定される操作のシグニチャよりも正確に定義することができるわけです。
この技術は、今後、「コンポーネントウェア」を普及させるためのキーになるものです。
つまり、流通するコンポーネントの仕様はこの「契約」の概念を使って正確に記述しておき、必要な機能を提供してくれそうなコンポーネントを検索できるようにするというわけです。

そして本書を読むことのもう1つのメリットとして、Eiffelというかなり理想に近いOO言語も学べます。
ソフトウェア工学という観点から非常にピュアなオブジェクト指向言語であるEiffelを知ることは、みなさんのプログラマ人生、エンジニア人生を非常に豊かなものにすることを請け合います。ぜひ勉強しましょう。
これからはJavaがベストな言語だと信じている人、Smalltalk以上に美しい言語など有り得ないと思い込んでいる人、C++以上に現実的な言語など新たに作り出すことはできないだろうと思っているあなた、そんなみなさんはぜひこの本でEiffelの凄さに圧倒されてください。
ちなみにEiffelでは、先に挙げたソフトウェア概念、可視性の柔軟な制御、抽象クラス、多重継承、多重定義、多相性、総称型(パラメトライズドクラス)、例外処理、自動メモリ管理(並行ガーベジコレクション)、事前条件・事後条件・不変表明による操作の仕様記述と実行時チェックのオンオフ、等が非常に整合的な一貫した文法を通して言語自身によって提供されます。

ちなみに、わたしはこの本をきちんと読んで理解している人、あるいはEiffelで網羅されているソフトウェア概念すべてについて自分なりに考え抜いたことのある人を除いて、そのひとをオブジェクト指向の専門家とは認めないことにしています。
そういう意味で、この本はオブジェクト指向のバイブルなのです。

なお、この本は原書では現在第2版が出ており、なんと1,254ページと元の2倍近くの厚さになりさらにバイブルらしさを増しました。
持ち歩くの苦痛なので本文をハイパーテキスト化してCD-ROMも添付されている始末です。
それでもめげずに同じく酒匂さんがまたその翻訳に取り組んでいますが、まだ当分は出版されそうもありません(みなさん、声援してあげましょう。差し入れもしてあげましょう。でもお酒はお避けください。翻訳がますます滞りますから。日本語訳も電子テキスト化されて添付される可能性大です)。
ですから、みなさんは安心して第1版の翻訳でさっさと(次の訳が出るまでの数年以内に)勉強してください。
本質的に重要な部分はそれで十分です。
第2版では、並行性を契約概念を拡張して整合的に Eiffel に導入してやるという議論が追加になっていますので、そのテーマに興味のある人は原著第2版の第30章のみ読まれれば十分でしょう。

Object-Oriented Software Construction, Second edition, Prentice Hall, 1997

またこの本を読んでEiffelが好きになってしまったそこの困ったあなたは、ぜひ次に「Eiffel: The Language」を読みながら実際の処理系をいじってください(実はフリーのものも含めてさまざまなEiffel処理系が手に入ります。一番メジャーなバートランド・メイヤー氏の作成した処理系ISE Eiffelは今年初めにオープンソース化されて公開されています。https://www.eiffel.com/)。
こちらの本は今のところ英語版しかありませんが。

Eiffel:The Language, Bertrand Meyer, Prentice Hall, 1992



Prev.

Index