ObjectSquare [2007 年 10 月号]

[オージス総研の本]




オブジェクトデザイン
ロール、責務、コラボレーションによる設計技法

レベッカ・ワーフスブラック / アラン・マクキーン 著
オージス総研 藤井 拓 監訳
辻 博靖 / 井藤 晶子/ 山口 雅之 / 林 直樹 著

株式会社翔泳社 3,990円(税抜き 3,800 円)
A5 判 488 ページ

ISBN4-7981-0903-3


 著者より 本書の構成
 「はじめに」より 訳者より
 対象読者 査読者より

本書の構成

本書は大きく2つの部分で構成されています。

前半の6章では、責務駆動設計の中心的原理とテクニックを紹介しています。これらの章を読むことによって十分な下地を得られるはずです。

第1章 「設計概念」
第2章 「責務駆動設計」
第3章 「オブジェクトを見つける」
第4章 「責務」
第5章 「コラボレーション」
第6章 「制御スタイル」

後半の4章では、設計を行う際に遭遇する課題を探求します。各章では、前半で示した設計概念や設計テクニックに基づいた特定のトピックを対象としています。

第7章 「コラボレーションの記述」
第8章 「信頼性の高いコラボレーション」
第9章 「柔軟性」
第10章 「設計について」

ページのトップへ戻る

訳者より

皆さんは、オブジェクト指向分析・設計において何が大事だと思いますか?

この質問には、いろいろな回答が返ってきそうですが、おそらく多くの方が責務の割り当てと考えられるのではないでしょうか?これはオブジェクト指向分析・設計の入門書として評判の高い 『 実践 UML 』 の著者 Craig Larman 氏も、その書籍の中で責務の割り当てがもっとも大事であると言っていますし、私の先輩である元編集長も、オブジェクト指向設計帖の記事で責務の大切さを熱く語っています。皆さんの近くにも、例えば、クラス図を先輩にレビューしてもらった際には、「このクラスは、責務が多すぎるんじゃないか?」といった形で、責務の観点から指摘をしてくる方が多いのではないでしょうか?

ところで、この責務とはいったいどういう意味なのでしょうか?責務が大事であると語られている書籍が多い割には、その意味についてしっかりと語られている書籍は少ないように思います。本書 『オブジェクトデザイン』 は、その責務について本格的に解説している非常にたぐいまれな書籍です。そもそも責務という用語をオブジェクト指向の世界に最初に持ち込んだ方こそ、本書の執筆者の一人である Rebecca Wirfs-Blocks さんであり、責務の視点でオブジェクトを設計していくという責務駆動設計 (Responsibility-Drivin Design:RDD) の考案者なのです。

前置きが長くなりましたが、本書は責務駆動設計の最新の解説本です。責務駆動設計という考え方は、Rebecca さんらの OOPSLA'89 の論文『Object-Oriented Design: A Resposibility-Driven Approach』で提案され、その翌年出版された『Designing Object-Oriented Software (通称 DOOS) 』で体系化されたものですが、本書は、その前作の DOOS 本を大幅に改訂した内容となっています。DOOS 本の責務駆動設計からの興味深い変更点の1つは、ロール(役割)という考えが新たに取り入れられたことです。本書では、オブジェクトが取りうる代表的なロール(ロールステレオタイプ)として以下の 6 つを提案しており、この 6 つの観点でアプリケーションを構成するオブジェクトを性格づけし、それらオブジェクトに、ロールに見合った責務を割り当てていくという考え方をとっています。

この考え方は、アプリケーション内のオブジェクトを3つのロールであるバウンダリ (Boundary)、コントロール (Control)、エンティティ (Entity) に分けて分析するヤコブソンのロバストネス分析に似ていますが、BCE だけで分析しにくかった複雑な業務システムの開発や製品開発、フレームワーク開発などの分野において威力を発揮するでしょう。本書の手法は責務駆動設計という名前がついていますが、責務よりもこのロールの考え方にフォーカスが当たっているので、個人的には、ロール駆動設計 (Role-Drivien Design) と捉えても、大きくははずしていないかなと思っています。

本書には、ロールステレオタイプの考え方以外にも、オブジェクトの発見の仕方、制御の配置方法(制御スタイル)など、オブジェクト指向の初心者にとって非常に役立つ考え方が事例とともに丁寧に解説されています。また、後半4章では、中上級者向けに役立つ、他の書籍では類を見ない内容が多く盛り込まれています。ここで、その内容について簡単に紹介したいと思います。

まず第7章の「コラボレーションの記述」。この章には成果物のまとめ方に関するノウハウが記載されています。UMLの表記について解説されている書籍は多くありますが、本書はそれら書籍と一線を画しており、UMLの表記の説明だけではなく、UMLの成果物をどのようなレベルでまとめて表現するか、また、どういったものを正式な成果物として維持していくべきかというガイドラインを示しています。コラボレーションに関するドキュメントの整理の仕方の説明が中心ですが、ここで得られる考え方は他のドキュメントの整理の仕方にも流用できるでしょう。

次に第8章の信頼性に関する設計。アプリケーションを不正な入力データや異常値から守るには、それをチェックするための責務をどこかのオブジェクトに割り当てることが必要です。その際にそれらチェックをどのオブジェクトに割り当てるか、また複数の箇所でチェックを行うべきかなど悩まれる方も多いのではないでしょうか?本章は、「信頼領域」という考え方をもとに、そういったチェックをどこにおくべきかというガイドラインを与えてくれます。他にも例外クラスの設計の考え方や、エラーと例外の区別の仕方など、異常ケースに対する設計の実践的なノウハウが詰まっています。ここは私自身、目から鱗の内容がたくさんありました。

そして、第9章の柔軟性。オブジェクト指向について熟知してくると、拡張性や再利用性を意識しすぎて無意味な汎用性を設計に持ち込んでしまいがちですが、この章を読めばそういった姿勢を改めてくれます。本章では、柔軟性を考えるタイミングや、柔軟性を検討する際に重要なホットスポットの捉え方などを扱っています。

そして、最後の第10章の設計について。設計は一般に「Simple is Best」がよいと言われますが、実際の開発現場ではいくらがんばってもシンプルに解決できないことが多いというのを感じておられる方もいるのではないでしょうか?Rebecca さんは、シンプルに解決できない設計上の問題があることを受け入れ、そういった設計問題に対してどのような姿勢で取り組んでいくべきかという1つの考え方を提案しています。ここでは、設計問題をコア設計問題、奥深い設計問題、残る設計問題に分類し、それぞれの対処の仕方を解説しています。

以上、本書のほんのさわりを紹介しましたが、本書は現場で得られたノウハウをもとに Rebecca さんが4年の歳月をかけてまとめあげた書籍だけであって、どの章を読んでも奥深いものがあります。一度読んだだけですべてを理解することは難しいかもしれませんが、繰り返し読むだけの価値ある書籍ですので、オブジェクト指向開発を行っておられる方は、ぜひ手にとって見ていただければと思います。

なお、本書の翻訳は、原書の不明点を適宜 Rebecca さんに確認をしながら行いました(延べ60通以上の確認をとっています)。その回答をもとに原書の文と異なる訳をしているところもいくつかありますので、もし原書をお持ちの方は本書と対比させながら読んでいただければより理解が深まるかと思います(そして、誤訳と思うところがあればぜひお知らせください)。

また、原書にはもともとありませんでしたが、翻訳本には、本書にでてくる題材の「Speak For Me」の詳細な説明を付録に掲載しました。これは、Rebecca さんのホームページに掲載されているものです。本書の題材がよりよく理解できるよう翻訳本につけたものですので、本付録によって理解がふかまればうれしく思います。

 

辻 博靖 (訳者のひとり)

ページのトップへ戻る

査読者より

本書を翻訳するにあたり、社内の多くの方々に査読のご協力をいただきました。査読者から本書に対するコメントをいただきましたので、最後にご紹介いたします。

きれいでわかりやすいオブジェクトを設計するためには、責務を適切にオブジェクトに割り振ることが大切ですが、最初のオブジェクトの候補をあげるヒントとして、本書で提唱されている「ロールステレオタイプ」と「制御スタイル」は使えると思いました。また、適切に責務がオブジェクトに割り振られたか確認する手段として、CRCカードという手法が紹介されています。 個人的には TDD やリファクタリングと通じる点もあるかなと感じたのですが、どうでしょう?設計・実装を始めてしばらくたった頃に、考え方を整理し、もう一歩上を目指したい人にお奨めしたいと思います。

ベテランのつもりが結構目から鱗だったモデラー

オブジェクト指向では、責務が大事とよく言われますが、責務に関して 本格的に記述した書籍は意外と少ないと感じています。 本書は責務に関して、その考え方、検討方法などを非常に丁寧に解説し ており、あらためて責務に対する理解が深まる内容になっています。 表面的な解説にとどまらず、より実践的なノウハウが記述され、自分の 設計の幅が広がると感じました。

最近、品質とは何かについて考え、悩み続けるエンジニア

この本はアプリケーションの責務をオブジェクトに割り当てるための手法であり、さまざまなノウハウが詰まった良書です。妥当なオブジェクトを導き出すことが難しいと感じている方にお勧めです。

最近はオブジェクト指向などの教育を担当している組み込みエンジニア

じっくり腰を据えて読みたい本です。 入門者が、小手先のテクニックではなく、オブジェクト指向設計の 『考え方』を理解するには最適と思います。 読めば読むほど味が出てくる感覚でしょうか? かと言って難しいことを並べているものではありません。 オブジェクトの責務、コラボレーションについて、より深く言及して いて、各ページの補足の多さからも著者の感覚をなるべく多く伝えよう としている親切さがあります。(それだけ翻訳は大変だった?) なるほどなるほど、と言いながら読みましょう。

去年の新人教育を実施したOOエンジニア(が、今は遠い過去?)

優れたオブジェクト設計というものは確かにあるのですが、それを言葉にしようとする となかなか難しい。直観的にはこれが正しいという判断があっても、その根拠はなにかを考えたり、人に説明したりしようとすると非常に苦労する。そんなときに、オブジェクト 設計の原典とも言える『オブジェクトデザイン』は、自分の判断が間違っていないことを再確認でき、人に説明する素材を見つけられるようなものだと思っています。

Evansの『Domain-Driven Design』を読んでから本書を読んだのですが、DDDがいかに忠実にRDDの思想を継承しているかが分かりました。本書を読むと、DDDの共鳴音を随所に発見することができます。

JavaによるWebアプリケーション開発が中心の4年目アーキテクト

設計は経験。でも経験は時と場所、運にもよります。経験だけに左右されない確実な設計の力を自分で学んで身につけていきたい…。そのような思いを持つ私にとっての『オブジェクトデザイン』の魅力は、卓越した設計者である著者らの経験に基づく事例が豊富にあり、事例に対する設計の最終型だけではなくその過程も綿密に記述されていることだと思います。設計に対する著者らの考え方や道具を繰り返し読み解き、事例を元に実践してみることで設計をより深く理解する、そのような使い方のできる1冊です。中上級者向けの位置づけですが、経験は未熟でも良い設計者を目指している初級者の方にこそ読んでいただきたい本だと思います。

アプリケーションアーキテクトを目指す5年目SE

ページのトップへ戻る

© 2007 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP