CIMapとは

はじめに

考えをまとめたり、システムを設計したりするにあたって、図を使うことはとても有効ですよね。特に以下のようなものは有名なので、実際に使われたこともあるのではないかと思います。

マインドマップ自由度が高く、考えを発散・収斂させながらまとめていくことができます。ブレーンストーミングなどでも有効です。
データフロー図データの流れに着目して、システムを設計していきます。少し古いですが、表現がシンプルでわかりやすいと思います。
UML今日、システム設計における標準に位置づけられています。ただ個人的には、プログラミング・レベルの設計にはとても有効ですが、表記が複雑だったり、きちんと定義しないといけなかったりして、あまり気軽に使えないような気がします。

CIMapとは

CIMap とは Component Interaction Map の略で、作者が独自に考案したモデル化の方法です。

CIMapの構成要素はデータフロー図(Data Flow Diagram)にとてもよく似ています。 DFDの"プロセスとデータフロー"を"オブジェクトとオブジェクト間のインタラクション"に置き換えたものと考えていただければわかりやすいと思います。

データフローによる設計(表現)とオブジェクト指向による設計(表現)の違いを簡単な例で示します。

DFDの場合CIMapの場合
具体的な値を使った例DFDの例

"+"というプロセスは”2"と"3"を入力として"5"を出力する と考えます

CIMapの例

"2"という値を持ったオブジェクトに"+3"というインタラクションを行うと オブジェクトの値が"5"に変更される、あるいはインタラクションの戻り値として"5"が返される と考えます

ダイアグラム上の表現DFDの表記CIMapの表記

CIMapはオブジェクト指向における以下のような基本的な考え方でモデル化を行います。

”データをカプセル化した複数のオブジェクトがメッセージをやりとり(インタラクション)しながら、全体として処理を行う”

オブジェクト指向で重要視される "クラス"という概念をあまり意識しないことも特徴と言えます。あえて言えば、インスタンスとしてのオブジェクトとその間でやりとりされるメッセージをモデル化するのが CIMapです。

CIMapの構成要素

次の4種類の<エレメント>がCIMapの構成要素となります。

コンポーネント
分析・設計対象のオブジェクト(インスタンス)です。角を丸めた四角形のエレメントで表現します。コンポーネントは階層構造を持ち、展開(ブレークダウン)していくことで設計を詳細化していきます。 各コンポーネントは自身の中にデータを保持し、外部からのインタラクションに応じてそのデータを変更あるいは使用して、インタラクションにレスポンスします。あるいは、さらに別のオブジェクトに対しインタラクションを行う場合もあります。
ユーザー
コンポーネントにアクセスするユーザーです。楕円形のエレメントで表現します。
外部システム
コンポーネントとやりとりを行う外部システムです。四角形のエレメントで表現します。
インタラクション
オブジェクト(コンポーネント/ユーザー/外部システム)間でやりとりされるインタラクションです。インタラクションはサービス(処理)を要求する側からサービスを提供する側への矢印のエレメントで表現します。また、各インタラクションは Submitするデータと Receiveするデータを持つと考えます。たとえば、”検索”インタラクションにおける”検索キー”(Submit)と "検索結果”(Receive)、”登録”インタラクションにおける”登録データ”(Submit)と”処理結果”(Receive) などです。

なお、ユーザーと外部システムはそれ自身の内部が分析・設計の対象外ということを表しています。すなわち、人や既存システムであっても、それ自身(その中でどのような処理や判断が行われているか)が分析・設計の対象であれば、コンポーネントとして扱います。

CIMapエディター

このCIMapを作成するための簡単なエディターを提供しています。使い方の詳細は "CIMapエディターの使用方法" を参照。 基本的に作者の使用法に合わせて作っていますので、人によって好き嫌いはあるかもしれません。

なお、このCIMapエディターの設計をCIMapで表現した図をサンプルとして添付しています(sample1.cimap)。下の図はその一部です。

CIMapサンプル

全体を俯瞰するためのCIMap

”プログラム”と ”ITシステム”の設計をサンプルとして付けていますが、CIMapによるモデル化対象は ”IT”に限りません。人や組織が行うワークフローや自然現象、社会現象なども、モデル化対象にできると思います。

CIMapは文字通り 地図のようなものです。全体を俯瞰していますが、特定の処理の流れを示しているわけではありません。特定の処理の道順は地図の上に個別に描くことになります。その際も全体の地図があれば迷いにくくなると思うのです。

分析・設計などを進めて行くと、”木を見て森を見ず” になってしまいがちですが、常にコンポーネントの階層構造を意識して、全体と部分の整合性を維持することが重要だと考えています。そういう意味で、このエディターのアイコン(3重の角丸四角形)はコンポーネントの階層構造を表現したものになっています。