【オブジェクト倶楽部: 2004-41号】オブジェクト指向の再定義[2] - EoC

前回は、EoT(Ease of Testing: テスト容易性)によってよいオブジェクト指向
設計を再定義したい、という表明をした。今回は、二本目のナイフを抜きたい。
キーワードは、EoC(*1)(Ease of Changing)、変更容易性だ。

この記事では、

EoCの高い設計が、よいオブジェクト指向設計である。

と主張したい。設計品質の中で、「変更容易性(EoC)」を最上位と見る。

ここ20年のオブジェクト指向の最大の失敗は、「再利用性」をその最大の価値、
として説明しようとしてきたこと。そして分かったことは、再利用がその努力
コストに見合う効果がでることは極めて稀であること、また、テクノロジでは
なくソーシャルな活動が再利用に効くこと、さらに、コードの再利用ではなく、
ナレッジの再利用(例えばパターン)の方が、まだ可能性があるということ
(少なくとも2004年では)。

再利用性ではなく「変更容易性」に注目すべきだ。Kent Beckの "Embrace Change"
であり、Bertland Meyer の "Build Software for Change" である。変更容易
性を高くしてソフトウェアを作れば、再利用性よりもコスト削減できる可能性
が出てくる。

オブジェクトを切り出すときに、「責務」とか「凝集度」と従来言われている
「概念の輪郭と中心を決めるもの」を「変更要因」と呼びかえる。外部の変更
要因をカプセル化してクラスとするのだ。1つの変更要因が、1つのクラスに閉
じるように。変更を伝播させてはならない。

また、アーキテクチャは、変更の頻度、または、変更の安定度にしたがってク
ラス群の大域構造を決める活動だといえる。変更周波数を分析し、その順にパッ
ケージを並べる。こうして、変更周波数の高い方が低いほうに依存するように
する。MVCやBCEというアーキテクチャルな分割は、これに意味を付与したもの
だが、この本質は変更要因の(時間ドメインでの)周波数だ。

大きな外部の変更は大きな内部変更で、小さな外部の変更は小さな内部変更で
済ませられること(小さな外部の変更が、大きな内部の変更にならないこと=
Meyerのアーキテクチャ連続性)。この技術がオブジェクト指向設計であり、そ
のためには、ソフトウェアの外部の問題構造とソフトウェア内部の解構造がダ
イレクトマッピングされている必要がある。すなわち、外部の言葉で内部が設
計されており、外部の変更要因が、うまく内部の対応部分で吸収できる必要が
ある。

まとめよう。EoCにしたがってソフトウェア設計を捕らえると、

・ソフトウェア外部の変更可能性を分析して、ソフトウェアの大域構造を決める。
・ソフトウェア外部の個々の変更要因をクラスとして取り出す。(そのために、)
・ソフトウェア外部の問題領域の言葉で内部のモデルを構築する。

となる。(平鍋)

変更容易性とパフォーマンスは相反するかな・・特にDB絡むと。