モノ・コト分析をパターン言語で表現オブジェクト指向の世界(16)

前回の「モノ・コト分析の段階的モデリング」は、クラスにステレオタイプ《mono》と《koto》を導入し、例題として注文から納品・請求までの簡単な業務フローを取り上げてモノ・コト分析でモデリングを行いました。ステレオタイプによりモデルの作成と理解が一層容易になったと思います。今回はモノ・コト分析の実践方法をパターン言語の形式で表現してみたいと思います。

» 2006年06月23日 12時00分 公開
[河合昭男,(有)オブジェクトデザイン研究所]

パターンとパターン言語

 「パターンとパターン言語」について第7回で簡単な解説を試みました。解説というよりも筆者なりの認識を語ったという方が正しいですが。今回はその1つの具体例としてモノ・コト分析実践方法のパターン言語化を試行してみましょう。ここに6つのパターンを抽出しました。パターンの名前にちょっと工夫をしてみました。この例のようにパターンには簡単で分かりやすく、かつインパクトのある名前を付けます。

(1)物事をわきまえよ

モノとコトを分離することがオブジェクト抽出の基本戦略

(2)具体例から始めよ

オブジェクト図から描き始めることがモデリングの基本戦術

(3)始めにモノありき

オブジェクト抽出の第1ステップはモノから始める

(4)コトは物事をつなぐ

コトはモノまたはコトの間のリンクとしてとらえる

(5)コトは物事を変える

モノまたはコトの状態遷移から新たなコトを発見する

(6)コトの詳細は下に

コトの内容はモノまたはコトの間のリンク属性で表す

 図1は、便宜上パターンをUMLのコラボレーションとして点線の楕円(だえん)で表現しています。デザイン・パターンなどはパターンをクラス図と相互作用図で表現できるのでこの表記法が使われますが、ここで述べるようなプロセスや実践などのパターンにこの表記法がふさわしいかどうかについては取りあえずここでは議論しません。またパターンは相互に関係し合ってパターン言語を形成していますが、特に関係を表す線は記述していません。

ALT 図1 モノ・コト分析パターン言語

 オブジェクト指向は便利です。何でもオブジェクトにできます。第1回「流れ去るものと不変なもの」にも記述しましたが、まず認識する主体が存在して次にその主体が認識する対象がオブジェクトです。認識とは五感で認識できるものだけではありません。目に見えないオブジェクトもあります。1人でモデリングしている分には勝手ですが、システム開発となると人により違うオブジェクトができて困ります。同じ対象へ人によって違う意味付けをしてしまいます。これが「何でもオブジェクト」のメリットでありデメリットです。オブジェクト指向がやさしいか難しいか、好きか嫌いかの議論になるところです。

 世界を構成しているオブジェクトには五感で感じられる「顧客」や「商品」などtangibleなモノと、そうではない「注文」などintangibleなコトがあります。これを分離するだけでぐっと分かりやすくなります。そこでモデリングの基本戦略としてオブジェクトをモノとコトに分けてとらえましょう(物事をわきまえよ(1))。

 モノがあってコトがある。コトだけでは存在できない(始めにモノありき(3))。モデリングにはコトから入った方が分かりやすいことがありますが、コトに関係するモノが必ずあるはずです。コトはモノの状態を変えます(コトは物事を変える(5))。それは属性の値またはほかのモノ・コトとのつながり(コトは物事をつなぐ(4))に表れてきます。コトの結果生じたつながりの状態は関連クラスとして表現できます(コトの詳細は下に(6))。

 モデリングは抽象的なクラス抽出・クラス図より具体的なオブジェクト抽出・オブジェクト図から入った方が分かりやすいです(具体例から始めよ(2))。またクラス図を読むときにオブジェクト図を描けるかどうかが正しく理解できたかどうかというチェックポイントです。

ALT 図2 モノ・コト分析パターン言語実践の例

モノ・コト分析パターン言語

 パターン言語の具体的表記法はさまざまです。ここでは提唱者のクリストファー・アレグザンダーのスタイルに近いシンプルな形にしました。パターンとは問題と解決策の組であり、そこに問題が発生する状況、解決策の選択肢を規定するフォース(制約)があります。それらを、「状況−問題―制約−解法」という形式で以下にまとめてみました。

(1)物事をわきまえよ

状況:本来取り扱いの異なるリソース系のオブジェクトとイベント系のオブジェクトがともにオブジェクトという概念で統一的に扱われ、便利な半面ドメイン・モデルの作成と理解を困難にしている。オブジェクト指向初心者の阻害要因の1つ。

問題:本来取り扱いの異なるモノとコトが同列に扱われ、モデル上区別できない。

制約:オブジェクト指向では、識別可能なものはほぼ何でもオブジェクトにできてしまう。UMLではモノもコトも同じクラス。

解法:モノとコトをステレオタイプで分離する(基本戦略)。例:《mono》《koto》。

(2)具体例から始めよ

状況:クラス図は抽象的で理解困難。本当は正しく理解できていないのに、分かった気持ちにさせてしまう危険性を含む。

問題:クラス図の作成・理解が容易でない。正しくないクラス図や間違った解釈がないように確認する方法が必要。

制約:本来人間には抽象概念の理解は容易ではない。これはコミュニケーションの難しさの原因でもある。

解法:まず、オブジェクト図を描く(基本戦術)。クラス図を描く前に、またクラス図を正しく理解するためにもその1つの具体例としてオブジェクト図を描く。

(3)始めにモノありき

状況:対象領域に混在しているモノとコトを抽出したい(物事をわきまえよ(1))。しかし目に見えるモノは抽出しやすいが、目に見えないコトは抽出が容易ではない……。

問題:コトの抽出は容易ではない。

制約:対象領域から主要オブジェクトの抽出が必要。

解法:モノの抽出から始める。

(4)コトは物事をつなぐ

状況:対象領域から主要なモノは抽出した(始めにモノありき(3))。次にコトの抽出とクラス図としての関連を見つけたい……。

問題:関連の見つけ方が分からない。

制約:主要なモノは抽出済み。

解法:関連はイベントから発見する。イベントはオブジェクトの属性値の変化になる場合(コトは物事を変える(5))とオブジェクト間のリンクとして現れる場合がある。

(5)コトは物事を変える

状況:モノ・コトの状態は時間がたつにつれて変化していく。あるときは生成し、また消滅する。状態はオブジェクトの属性の値で表される場合と、他オブジェクトとのリンクで表される場合(コトは物事をつなぐ(4))がある……。

問題:状態変化のモデリングが難しい。

制約:主要なモノは抽出済み。

解法:モノ・コトの状態を変化させるイベントを発見する。そのイベントによりオブジェクトの属性値が変化するのか、リンクが生成・消滅する(コトは物事をつなぐ(4))のか検討する。

(6)コトの詳細は下に

状況:イベントによりモノまたはコトの間にリンクが生成された(コトは物事をつなぐ(4))。イベントにより発生する属性はどのオブジェクトが持つべきか……。

問題:イベントにより発生する属性はどのオブジェクトが持つべきか。

制約:イベントはリンクとして抽出されている。イベントはまだ独立したオブジェクトになっていない。

解法:イベントの属性はリンク属性(関連クラスのインスタンス)としてモデリングする。


 今回はモノ・コト分析の実践方法をパターン言語(第7回「パターンとパターン言語」参照)の視点でとらえてみました。例えば開発プロセスのRUPやXPなどアジャイル系のベストプラクティスもこのようにパターン言語としてとらえることができます。これについてはまた稿を改めて考えてみたいと思います。


最近ロングテール現象に注目が集まっています。これは従来さまざまな分野で観測でき、実践できるパレートの法則(80‐20の法則)の一種のアンチテーゼです。筆者も早速体験してみようとGoogle AdSenseをホームページに適用してみましたが、あらためてGoogleのすごさを垣間見ました。筆者のホームページの各ページに小さな広告が出ますが、ページを開いた時点でそのページに最もふさわしい広告が自動的に割り振られるのです。次回はロングテールについて考えてみたいと思います。お楽しみに。


筆者プロフィール

河合 昭男(かわい あきお)

大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。 オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立、理論と実践を目指し現在に至る。ビジネスモデリング、パターン言語の学習と普及を行うコミュニティ活動に参画。ホームページ:「オブジェクト指向と哲学



「オブジェクト指向の世界」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ