モデリングと抽象化


※ 抽象化

 実世界のオブジェクトの全ての特性をコンピュータの世界に取り込むのは無駄です。
 そこで、システム対象領域(ドメイン)内で必要とする部分のみに注目してオブジェクトの特性を抽出し、コンピュータに取り込みます。これを抽象化といいます。
 システム対象領域は注目する視点を規定します。

※ モデリング

 ある世界の事象を違う世界に置き換えること、あるいは、色々なパターンから平均的なもので代表することをモデリングと言います。
 プラモデルは形をプラスチックでモデリングし、重さや大きさは抽象化により無視します。
 スーパーモデルは一般庶民を代表している・・かは疑問ですが・・?

 ただ、世の中の全てを同レベルのオブジェクトとしてモデリングして良いのか疑問があります。
 では、レベルの違うオブジェクトはどのようにモデリングするのでしょうか?
 私が気に入っているフレームワークとして、業務、処理、原子オブジェクトという3層型を推奨します。
 業務は世の中の変化に敏感で非常に複雑です。それを他のオブジェクトと同レベルのオブジェクトとして部品化するのには無理があります。
 オブジェクトはシンプルなほうが部品化しやすく本質に近いほど普遍的です。
 そして、業務と原子オブジェクトを結び付ける中間的な役割を担う処理を間に置きます。
 処理はビジネスルールとしてパターン化することによりある程度部品化できます。
 つまり、本質同士の関わり合い自体が業務であると考えます。
 1人称であれば関係が存在しないので業務も必要ありません。また2人称であれば関係は1本できますが、それは自分で把握できます。ところが3人称以上になると自分が把握できない関連ができてしまいます。
 ここで、管理が発生するのです。三角形型(メッシュ型)の管理では自分と関係していない1辺は把握できないので、集中型、つまり、スター型でなければ効率よく全体を管理できないのです。
 ただ、効率の良い管理と効率の良いシステムとは相反する特性があり、折り合いが付くところで妥協するしかありません。
 ファイヤーウォール(制限)とインターネット(開放)の関係に良く似ています。

 ここで、モデリングについて苦言を述べますが、私たちの最終目的はプログラムを作ることではありません。
 業務を効率的にすることが目的であるはずですから、まずは、業務の改善を考えるべきでしょう。
 とかく、プログラマーは全てをコンピュータにやらせたがりますが、コンピュータに適した仕事と人間に適した仕事を的確に見ぬく必要があります。
 人間もかなり性能は良いのです。あなどれませんよ・・。
 したがって、まずは、業務分析をしっかりやりましょう。それからBPR,コンピュータと人間の役割分担を的確に行い業務設計を行いましょう。
 いきなり、オブジェクト設計というのはちょっと疑問です。USE−CASEもちょっと物足りないので個人的には後述する改良DFDが良いかと考えます。

ホームページへ