2010-12-16-01-SVG と UML の話 - 17 - project-enigma

2010-12-16-01-SVG と UML の話 - 17

>> Site top >> weblog >> 月別アーカイブ >> 2010年12月のlog >> 2010-12-16-01-SVG と UML の話 - 17

最終更新日付:2013/12/31 07:35:19


SVG と UML の話 - 17

2010 年 12 月 16 日

そろそろ書くことがなくなってきた。今回はマクロ定義について。

もともと、このツールはできるだけ少ない記述量で SVG 形式の UML 図面を生成することが目的だった。UML 図面というからにはそれなりの表現ができなければならない。つまり、クラスに属性や操作を表示したり、関係にステレオタイプを表示したりといった必要があるのだ。そして、それらはなんだかんだで実現できた。

しかし、実際にツールを使ってみると、そういった表現を使うことはそれほどないことに気付く。名前だけを示したクラスや、単純に矢印だけの関連の方が多いわけだ。これは自分の使い方がデザインのスケッチ中心であり、厳密な仕様の記述には使用しないという理由もあるかもしれない。

で、そうなると現状の記述量でも多い気がしてくる。たとえば、単純な依存関係でも以下のように書く必要がある。

dependency
from:Foo
dest:Bar

これを以下のような感じで1行で書くことができたら、少しは楽になるだろう。

dependency( Foo, Bar )

このような要望に汎用の解決を与えるため、マクロ定義の機能を導入した。C 言語のマクロ関数と考え方は同じものだ。ただし、単純なシンボル展開と区別するために#defmacro というディレクティブを使用している。

#defmacro MAKE_DEPEND( FROM, DEST )  dependency\nfrom:FROM\ndest:DEST

このようなマクロを定義しておくことにより、先の依存関係は以下のように1行で記述できるようになる。先頭に付ける & はマクロ展開のための目印だ。

&MAKE_DEPEND( Foo, Bar )

マクロもシンボル展開同様、プリプロセスの段階で処理される。そのためsvgファイル生成の実処理(一応コンパイルと呼んでいる)がこういったマクロ定義を目にすることはない。

このマクロ機能、お世辞にも使い易いとは言えない。C/C++ のように \ を使った行継続ができないし、区切り文字がカンマであることからカンマを含む文字列をパラメータに指定できない。このことは、数式を含むposition属性をマクロ展開できないことを意味する。そんなマクロ機能だが、記述量を減らすという目的はひとまず達成できているため、ひとまずはこのまま存続することになりそうだ。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : 開発

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.