モデルとは基本的に図のことである

あるETロボコン参加チームの進捗報告をちらちらと拝見させていただいているのですが、最近の進捗報告の中に「モデルとは基本的に図のことである」という記載をみつけたので、ちょっと放っておくことができずにマサカリを投げてみることにしました。 😉

class diagram

上の図は「Mindstorms NXTの光センサー」と「Mindstorms EV3のカラーセンサー」をモデリングしたクラス図です。

実はこの図は astah や Enterprise Architect, Microsoft Visio といったGUIツールは使わずに描いています。マウスもスタイラスペンも使っていません。キータイピングだけで生成しています。

class.dot

はじめて見るかたも多いと思いますが『DOT言語』というデータ記述言語でコーディングしています。

このDOT言語で記述した class.dot を dotコマンド(Graphviz)を使って以下のように変換すると最初のクラス図(画像ファイル)が生成されます。

 

最初に示したクラス図(Class Diagram)と次に示したDOT言語コード(Source code)は相互に自動変換可能です。今回は説明のためにDOT言語の記述を簡略化しているため、クラスの関連線が継承関係なのか依存関係なのか定義していませんし、プロパティーの区切りも改行文字使っています。実際のところは見た目だけクラス図らしきものを生成するなんちゃってDOTコードではあるのですが、「モデルは基本的に図である」を否定する傍証にはなるのではないかと思い例示しました。

 

クラス図を書くためにいちいちDOT言語で記述するメリットはありませんが、JavaやC++のソースコードからクラス図を自動生成(リバースエンジニアリング)する目的で、しばしばこのDOT言語が利用されています。

モデルは図(Diagram)で記述することもできるけれどもコード(Code)で記述することもできる。(共通のルールにしたがって記述した)図とコードは互いに等価で相互にプログラムで変換することもできるし、Javaで記述するコードもC++で記述するコードもモデルの記述方法の一つであるから(原理的には)相互に自動変換(コード自動生成)が可能である、ということが、たとえばモデル駆動開発(MDD:Model Driven Development)の重要な概念になっています。

 

では最初の進捗報告「モデルとは基本的に図のことである」は、どう書き直せばよいでしょうか? 私であれば「モデルは図で記述されることが多い」と書き直します。みなさんならどう書き直すでしょうか?


2015年6月5日 追記

saltheadsさんから、PlantUMLというソフトウェアを教えていただきました。

http://plantuml.com/

PlantUMLを使うと上記のコードが下記のクラス図に変換されます。

Class Diagram with PlantUML

PlantUMLもgraphvizを使っているので似たようなクラス図が出力されるのですが、コードも出力されたクラス図も、よりUMLのセマンティクスに厳密ですね。saltheadsさん、ありがとうございます。 😀

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください