ObjectSquare

[技術情報]


エンタープライズモデリングへの誘い(いざない)
第5回 エンティティの中核 バリュー

(株)オージス総研
オブジェクトテクノロジーソリューション部
そして
事業模型倶楽部
山内 亨和

はじめに

 前回はエンタープライズモデル(特にエンティティ)の複雑性を軽減する概念として、エンタープライズモデリング(以後、EM)手法に登場する組織ロールとエンティティロールを紹介しました。今回はもう一歩進めて、エンティティを詳細に定義するための概念であるバリューについて説明します。

 前回の記事を公開してからだいぶ期間が経ってしまいましたので、バリューについて説明する前に組織ロール、エンティティ、エンティティロールについて復習しましょう。

組織ロール、エンティティ、エンティティロールの復習

 組織ロールとは組織内にある機能の分類です。例えば、会計ロール、マネジメントロール、製造ロール、プランニングロールなどが組織ロールになります。エンティティとはビジネス中に存在する資源や資産や人や会社とそれらにまつわる情報、振る舞いのことです。エンティティロールとはエンティティの情報や振る舞いを組織ロール単位に分離したものです。エンティティロールを定義することによってエンタープライズモデルの複雑性を軽減することができます。

 組織ロール、エンティティ、エンティティロールの関係をクラス図で表現したものが下の図です。


組織ロール・エンティティ・エンティティロールの関係

 組織ロール内では様々なエンティティが登場します(組織ロールからエンティティへの関連、多重度N)。エンティティは様々な組織ロール上に登場し、その組織ロールはエンティティをモデリングするためのコンテキスト(文脈、背景)となります(エンティティから組織ロールへの関連、多重度N)。あるエンティティがある組織ロール中に登場するとき、エンティティは組織ロール特有のエンティティロールを提供します。

SIドメインに登場するバリュー

 前回エンティティとエンティティティロールを説明するために、SIドメインを例題としてシステム開発者のエンティティロールのモデリングを行いました。下の図がそのときのクラス図です。

エンティティロールモデリングの例

 システム開発者はプロジェクトマネジメントの視点から見るとプロジェクトメンバです。この関係を組織ロール、エンティティ、エンティティロールに当てはめると、プロジェクトマネジメントが組織ロール、システム開発者がエンティティ、プロジェクトメンバがエンティティロールとなります。

 図中ではシステム開発者エンティティから進捗クラス、スキルクラス、成果クラス、単価クラスなどのクラスに関連が引かれています。これはシステム開発者エンティティは多くの情報や振る舞いを持っていることを示しています。

 と同時に、プロジェクトメンバエンティティロールはシステム開発者エンティティから関連が引かれているクラスのうち、進捗クラス、スキルクラス、成果クラスのみに関連が引かれています。これはプロジェクトメンバエンティティロールがシステム開発者エンティティの情報、振る舞いのうち進捗、スキル、単価のみを使用することを意味します。

 EM手法では進捗、スキル、成果などのエンティティの情報、振る舞いの定義をバリューと定義しています。

エンティティとエンティティロールとバリュー

 バリューとエンティティ、エンティティロールの関係をクラス図で表現したものが下の図です。

エンティティ・エンティティロール・バリューの関係

 エンティティ、エンティティロール、バリュー間でそれぞれ関連性があり、その関連性をクラス図の関連で表現しています。

 エンティティとバリュー間の関連は、エンティティがバリューを記録していることを意味しています。つまりエンティティにバリューを関連付けるということで、バリューを半永続的に管理でき、そのバリューの情報が何(エンティティ)に関する情報か識別できるわけです。図1のようにエンティティは複数種類のバリューを記録することができます(システム開発者は進捗とスキルを持っている)。また、図2のようにバリューは複数種類のエンティティによって記録されることもあります(システム開発者も営業もスキルを持っている)。

 エンティティロールとバリュー間の関連は、エンティティロールがその情報や振る舞いの具体的な内容をバリューで定義することを意味しています。図3のようにエンティティロールは複数種類のバリューで、自身の情報や振る舞いを定義することができます(プロジェクトメンバは進捗とスキルに関する情報、振る舞いを持っている)。図4のようにバリューは複数種類のエンティティロールの情報や振る舞いを定義するために使われることがあります(プロジェクトメンバも評価対象も成果に関する情報、振る舞いをもっている)。

 エンティティロールとエンティティ間の関連は、前述のようにエンティティの情報を組織ロール単位に分離した概念で、言い換えるとエンティティロールは組織ロール上でのエンティティの情報、振る舞いを意味しています。ただし、この情報、振る舞いの具体的な内容はバリューで定義しています。図5のようにエンティティは複数種類の組織ロール上では異なるエンティティロールを持ちます(システム開発者はプロジェクトマネジメント組織ロール上ではプロジェクトメンバとして振る舞い、人事評価組織ロール上では評価対象として振る舞う)。図6のように複数種類のエンティティが同じ組織ロール上で同じエンティティロールを持つこともあります(システム開発者もコード自動生成ツールもプロジェクトマネジメント組織ロール上ではプロジェクトメンバとして振る舞う?)。

なぜコード自動生成ツールがプロジェクトメンバなのか? - エンティティはpluggable -

 いま、コード自動生成ツールエンティティがプロジェクトマネジメント組織ロール上ではプロジェクトメンバとして振る舞うという、苦し紛れともとれる例を出しました。しかし、これは苦し紛れで出した例ではありません。この問題を整理していくことでエンティティとエンティティロールとバリューの重要な特徴と有用性を理解できるはずです。

 それでは、プロジェクトメンバがどのような意図をもって定義された概念なのか考えてみましょう。プロジェクトメンバはプロジェクトマネジメント組織ロール上に登場するエンティティロールです。システムを開発するスキルを持っています。与えられた作業に関する進捗を記録できます。進捗に対する成果も記録できます。プロジェクトメンバとして振る舞うことのできるエンティティとしてシステム開発者がいます。

 システム開発者もプロジェクトメンバがもつバリューと同様のバリューを持っています。システム開発者はシステムを開発するスキルを持ち、作業の進捗、作業の成果を記録できます。またシステム開発者には人月単位の単価も設定されています。

 ここまでいくとプロジェクトメンバとシステム開発者がほとんど同じバリューを持っていることが見て取れます。実はこのモデルは以下の式に従うように記述されたモデルなのです。

 エンティティがエンティティロールとして振る舞うには、そのエンティティロールに関連付けられているバリューをエンティティも持っていなければならないのです。この関係はクラスとインタフェースと操作の関係と似ています。クラスがインタフェースを実現(implement)するためにはインタフェースで定義されている操作をクラスで実装しなければなりません。

 ということで、システム開発者が持つバリューとプロジェクトメンバの持つバリューがほぼ一致しているのは偶然ではなく、そうしないとシステム開発者はプロジェクトメンバになれなかったということが分かったかと思います。

 システム開発者と同様にコード自動生成ツールもプロジェクトメンバの持つバリューを持っています。コード自動生成ツールはある決まった仕様に基づいたコードのみ自動生成することができます。これは限定的にコーディングスキルを持っているといえます。コード自動生成ツールの自動生成の進捗も記録することができます。コード自動生成ツールの自動生成の成果も記録することができます。このため、コード自動生成ツールはプロジェクトメンバとして振る舞っている、コード自動生成ツールエンティティのエンティティロールとしてプロジェクトメンバエンティティロールがあるという例を出したわけです。

 システム開発者とコード自動生成ツールの2つのエンティティがプロジェクトメンバとして振る舞うという事実はプロジェクトマネジメントの観点から非常に有用です。プロジェクト中のタスクの内容によってこの2つのエンティティのどちらにタスクを遂行させるかを臨機応変に変えることができるからです。

 この有用性は当然エンティティロールとエンティティの関係にも当てはまります。あるエンティティロールとして振る舞うエンティティはいくらあってもよいわけで、それぞれのエンティティで特徴が違う場合には状況に適したエンティティを選択し、適用できるわけです。もし既に定義したエンティティのパフォーマンスが優れない場合には、新しいエンティティを発見し、定義し、エンティティロールに適用することも許されます。エンティティはコンポーネントのように取り替え可能(pluggable)なのです。

注1:このクラス図はUML仕様のセマンティクスに従ったものではなく、あくまでイメージです。

エンティティの進化過程

 ここまではエンティティの静的構造についての説明でした。今度はエンティティの動的側面について着目します。

 エンティティはプロセス中のプロセスステップを実行するために使用されます。実際にはプロセスステップはエンティティを直接使用するのではなく、エンティティロールを使用します。プロセスステップは必要であればエンティティロールに対して、エンティティの持つバリューを取得するように問い合わせることもできます。またエンティティロールに対して、エンティティにバリューを追加、更新、削除するように問い合わせることもできます。

 エンティティはプロセス、プロセスステップで使用されていく過程で様々なバリューが追加、更新、削除されていきます。エンティティにバリューが記録されていく流れをシステム開発者エンティティを例にとって説明します。

 まず、人事評価組織ロールの採用プロセスステップでシステム開発者エンティティは生成されます。エンティティの生成は評価対象エンティティロールを介して行われます。採用プロセスステップで獲得した氏名、スキルなどのバリューや、決定した給料のバリューは評価対象エンティティロールを介して追加します。

 プロジェクトマネジメント組織ロールのアサインプロセスステップでプロジェクトメンバエンティティロールを介してシステム開発者エンティティを使用します。アサインプロセスステップでは、プロジェクトメンバエンティティロールを介して、システム開発者エンティティのスキル(バリュー)を取得します。取得したスキルからアサインするタスクを決定し、タスクの進捗(バリュー)をプロジェクトメンバエンティティロールを介してシステム開発者エンティティに追加します。

 開発組織ロールの設計プロセスステップで設計者エンティティロールを介してシステム開発者エンティティを使用します。設計プロセスステップでは、設計者エンティティロールを介して進捗(バリュー)を更新、成果(バリュー)を追加、更新します。

 このようにエンティティは様々なプロセスステップで使用される過程で、そのプロセスステップに応じたエンティティロールのバリューが追加されていきます。エンティティはエンティティロールによって進化していくわけです。

次回予告

 次回はEM手法の総復習としてこれまで説明してきたプロセス、組織ロール、エンティティの概念を使って学習塾モデルのエンタープライズモデルを構築します。
 どうぞお楽しみに!

参考文献、及び関連ホームページ

 本稿は以下の書籍やホームページを参考にして執筆しました。このリストがみなさんのエンタープライズモデリングの理解に役立てば幸いです。

参考文献

 [1] Chris Marshall 著 : "Enterprise Modeling with UML", Addison-Wesley, 1999 (邦訳:児玉公信 『企業情報システムの一般モデル―UMLによるビジネス分析と情報システムの設計』 , ピアソン・エデュケーション)


© 2002 OGIS-RI Co., Ltd.
Prev. Index
Prev. Index