昨日「MindmapModeling/SimpleModeler - トレイト」のトレイトを実際に使う場合の文法について説明します。
MindmapModelingの使い方は以下になります。
このモデルでは「特色」(トレイト)として以下のものを定義しています。
- タグ付け可能
- 画像貼付け可能
そして、この2つのトレイトをミックスインした道具(resouce entity)「ブログ記事」を定義しています。「ブログ記事」の構造枝「特色」の下に2つの特色「タグ付け可能」と「画像貼付け可能」を配置しています。このことによって「ブログ記事」に「タグ付け可能」と「画像貼付け可能」がミックスインされます。

このマインドマップモデルから以下のようにしてクラス図を生成することができます。
$ sm -diagram trait.xmind
生成されたクラス図は以下になります。2つのトレイト「タグ付け可能」と「画像貼付け可能」が定義されており、リソース「ブログ記事」がこの2つのトレイトをミックスインしています。

Java
SimpleModelerでは「トレイト・モデリング」で説明したモデリングのトレイトのJavaマッピングをサポートしています。
先ほどのMindmapModelingのモデルから以下のようにしてJavaプログラムを生成します。
$ sm -java trait.xmind
Javaにはトレイトがないので、インタフェースとして生成されます。トレイト「タグ付け可能」に対応するインタフェース(の先頭部分)は以下のものになります。
- public interface タグ付け可能 {
- public static final String PROPERTY_タグ = "タグ";
- public String getタグ();
- public void setタグ(String タグ);
- }
リソース「ブログ記事」に対応するJavaクラス「ブログ記事」(の先頭部分)は以下のものになります。
- @Entity
- public class ブログ記事 implements タグ付け可能, 画像貼付け可能 {
- public static final String PROPERTY_ID = "id";
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- private Long id;
- @Basic(fetch=FetchType.EAGER)
- @Column(nullable=false)
- protected String タグ;
- @Basic(fetch=FetchType.EAGER)
- @Column(nullable=false)
- protected String リンク;
トレイトの実装部がクラスの中に埋め込まれるのと同時に、インタフェース「タグ付け可能」と「画像貼付け可能」がインプリメントされています。このことによって、事実上トレイトをミックスインしたクラスとして使用することができるわけです。
SmartDox DSL
上のMindmapModeling文法に対応するSmartDox DSLは以下になります。一点だけ、データ型を指定しているところが異なります。
- #+title: 特色/Trait
- * 特色
- ** タグ付け可能
- #+caption: 属性
- | name | type |
- |------+-------|
- | タグ | token |
- ** 画像貼付け可能
- #+caption: 属性
- | name | type |
- |--------+------|
- | リンク | link |
- * 道具
- ** ブログ記事
- #+caption: 性質一覧
- | 項目 | 値 |
- |------+-----------------------------|
- | 特色 | タグ付け可能,画像貼付け可能 |
- #+caption: 属性
- | name | type |
- |----------+--------|
- | タイトル | string |
- | 内容 | text |
このDSLから以下のようにしてクラス図を生成することができます。
$ sm -diagram trait.org
このSmartDox DSLから生成されるクラス図は以下になります。

諸元
- SimpleModeler Version 0.4.0-RC5-SNAPSHOT (20121127)
SimpleModeler 0.4.0-RC4から少し手を入れたバージョンなので、0.4.0-RC4とは出力されるクラス図が若干異なります。
0 件のコメント:
コメントを投稿