CIMap
(Last updated: 2014/09/10)
はじめに
考えをまとめたり、システムを設計したりするにあたって、図を使うことはとても有効です。特に以下のようなものは有名なので、実際に使われたこともあるかと思います。
マインドマップ
データフロー図
UML
自由度が高く,考えを発散・収斂させながらまとめていくことができます。ブレーンストーミングなどでも有効です。
データの流れに着目して,システムを設計していきます。少し古いですが、表現がシンプルでわかりやすいと思います。
今日、システム設計における標準に位置づけられています。ただ個人的には、プログラミング・レベルの設計にはとても有効ですが、表記が複雑だったり、きちんと定義しないといけなかったりして、あまり気軽に使えないような気がします。
CIMapとは
CIMapとは Component Interaction Mapの略で,作者が独自に考案したモデル化の方法です。
CIMapの構成要素はデータフロー図(Data Flow Diagram)にとてもよく似ています。
DFDの"プロセスとデータフロー"を"オブジェクトとオブジェクト間のインタラクション"に置き換えたものと考えていただければわかりやすいと思います。
データフローによる設計(表現)とオブジェクト指向による設計(表現)の違いを簡単な例で示します。
具体的な値を使った例
ダイアグラム上の表現
DFDの場合
CIMapの場合
"+"というプロセスは”2"と"3"を入力として"5"を出力する と考えます
"2"という値を持ったオブジェクトに"+3"というインタラクションを行うと
オブジェクトの値が"5"に変更される,あるいはインタラクションの戻り値として"5"が返される と考えます
CIMapはオブジェクト指向における以下のような基本的な考え方でモデル化を行います。
”データをカプセル化した複数のオブジェクトがメッセージをやりとり(インタラクション)しながら,全体として処理を行う”
オブジェクト指向における "クラス"という概念をあまり意識しないことも特徴と言えます。あえて言えば、インスタンスとしてのオブジェクトとその間でやりとりされるメッセージをモデル化するのが CIMapです。
CIMapの構成要素
次の4種類の<エレメント>がCIMapの構成要素となります。
コンポーネント
分析・設計対象のオブジェクト(インスタンス)です。角を丸めた四角形のエレメントで表現します。コンポーネントは階層構造を持ち,展開(ブレークダウン)していくことで設計を詳細化していきます。各コンポーネントは自身の中にデータを保持し、外部からのインタラクションに応じてそのデータを変更あるいは使用して、インタラクションにレスポンスします。あるいは、さらに別のオブジェクトに対しインタラクションを行う場合もあります。
ユーザー
コンポーネントにアクセスするユーザーです。楕円形のエレメントで表現します。
外部システム
コンポーネントとやりとりを行う外部システムです。四角形のエレメントで表現します。
インタラクション
オブジェクト(コンポーネント/ユーザー/外部システム)間でやりとりされるインタラクションです。インタラクションはサービス(処理)を要求する側からサービスを提供する側への矢印のエレメントで表現します。また,各インタラクションは Submitするデータと Receiveするデータを持つと考えます。
なお、ユーザーと外部システムはそれ自身の内部が分析・設計の対象外ということを表しています。すなわち、人や既存システムであっても、それ自身(その中でどのような処理や判断が行われているか)が分析・設計の対象であれば、コンポーネントとして扱います。
CIMapエディター
このCIMapを作成するための簡単なエディタを提供しています。
基本的に作者の使用法に合わせて作っていますので、人によって好き嫌いはあるかもしれません。
なお,このCIMapエディターの設計をCIMapで表現した図をサンプルとして添付しています。下の図はその一部です。
全体を俯瞰するためのCIMap
”プログラム”と ”ITシステム”の設計をサンプルとして付けていますが、CIMapによるモデル化対象は ”IT”に限りません。人や組織が行うワークフローや自然現象、社会現象なども、モデル化対象にできると思います。
CIMapは文字通り 地図のようなものです。全体を俯瞰していますが、特定の処理の流れを示しているわけではありません。特定の処理の道順は地図の上に個別に描くことになります。その際も全体の地図があれば迷いにくくなると思うのです。