2010-12-16-01-SVG と UML の話 - 17
>> Site top >> weblog >> 月別アーカイブ >> 2010年12月のlog >> 2010-12-16-01-SVG と UML の話 - 17
最終更新日付:2010/12/16 01:00:00
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-2021 project-enigma.
Generated by CL-PREFAB.