english japanese german

UML2Cプラグイン

astahで描いたクラス図のモデルから、C言語のスケルトンコードを出力するプラグインです。
Google C++ Mocking Framework (Google Mock)のコード出力も可能です。

download plugin

  • バージョン: 0.9.0 (2016/3/29公開)
  • 対応エディション: astah* professional、UML、community 7.0 以降
  • Githubリポジトリ
  • 参照ガイド:「組込みソフトウェア開発 ノウハウ集
    • By プラグイン原作者 清水靖博様 at 永和システムマネジメント
    • UMLとC言語概念のマッピングルール定義や、組み込みソフトウェア特有の概念をUMLで表現するルールなど
  • プラグイン作者インタビュー
    "C言語を主に使用している組込みソフトウェアの開発者の方々に使ってもらいたいです。このプラグインを使うことで、設計モデルをしっかり描くメリットを実感していただけるとうれしいです"

astah uml2cプラグイン

インストール方法

  1. ページ上部の[Download]ボタンからプラグインファイル(astah-uml2c-plugin-x.x.x.zip)をダウンロードします。
  2. ダウンロードしたファイルを適当なフォルダに解凍します。
  3. 解凍したフォルダが含むuml2c-x.x.x.jarファイルuml2cフォルダ(拡張子.vmの全ファイルを含む)を、下のディレクトリにコピーします。
    [ホームフォルダ]/.asta/[astahエディション名]/plugins
    astah uml2cプラグイン
  4. astah*を再起動します。メインメニュー[ツール]配下に[UML2Cプラグイン]メニューが追加されていれば、インストールは完了です。 astah uml2cプラグイン

テンプレートファイルについて

  • - 拡張子.vmのファイルは、コード出力に必要なテンプレートファイルであり、次のパスへの配置が必要です。
    • Windows: %USERPROFILE%\.astah\[astahのエディション名]\plugins\uml2c\header.vm
    • Mac or Linux: $HOME/.astah/[astahのエディション名]/plugins/uml2c/header.vm
  • - テンプレートファイルの文字コードは、UTF-8 としてください。


使い方

  1. クラス図を開き、出力対象のクラスを選択します。(サンプルモデルを使ったコード出力例は、こちら)
  2. メインメニュー[ツール] - [UML2C プラグイン] - [Cスケルトンコード生成] (または[GoogleMock コード生成])を選択します。 astah uml2cプラグイン
  3. コードの出力先フォルダを選択します。
    astah uml2cプラグイン
  4. 指定したフォルダ、もしくはプロジェクトファイルが存在するフォルダに出力されます。


サンプルモデルを使った出力例

  • ~/plugins/astah-uml2c-plugin/sampleフォルダ内にあるサンプルファイル「uml2c-plugin-sample.asta」を使った出力例です。
    astah uml2cプラグイン

  • シングルインスタンスモジュール

    < < SingleInstance > >ステレオタイプをもつクラスを、シングルインスタンスモジュールとしてコード生成します。 (詳細はこちら)

    Fooクラスの出力例

    astah uml2cプラグイン
    Foo.c

    #include "Foo.h" static EnumSample enumSample[ /* TODO */ ]; static Bar bar; static Abstract *abstracts[ /* TODO */ ]; static Concrete concretes[ /* TODO */ ]; void Foo_Create(void) { /* TODO */ } void Foo_Destroy(void) { /* TODO */ } uint32_t Foo_Operation(const char *arg) { /* TODO */ }

    Foo.h

    #ifndef _FOO_H_ #define _FOO_H_ #ifdef __cplusplus extern "C" { /* } */ #endif void Foo_Create(void); void Foo_Destroy(void); uint32_t Foo_Operation(const char *arg); #ifdef __cplusplus } #endif #endif /* _FOO_H_ */


  • マルチインスタンスモジュール

    通常のクラスを、マルチインスタンスモジュールとしてコード生成します。(詳細はこちら)

    Barクラスの出力例

    astah uml2cプラグイン
    Bar.c

    #include "Bar.h" void Bar_Create(Bar self, uint64_t id, const char *name) { /* TODO */ } void Bar_Destroy(Bar self) { /* TODO */ } uint16_t Bar_Operation(Bar self) { /* TODO */ }

    Bar.h

    #ifndef _BAR_H_ #define _BAR_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct BarStruct *Bar; void Bar_Create(Bar self, uint64_t id, const char *name); void Bar_Destroy(Bar self); uint16_t Bar_Operation(Bar self); #include "BarPrivate.h" #ifdef __cplusplus } #endif #endif /* _BAR_H_ */

    BarPrivate.h

    #ifndef _BAR_PRIVATE_H_ #define _BAR_PRIVATE_H_ #ifdef __cplusplus extern "C" { /* } */ #endif struct BarStruct { uint64_t id; char *name; }; #ifdef __cplusplus } #endif #endif /* _BAR_PRIVATE_H_ */


  • 型による動的インターフェイス(スーパークラス)

    Abstractなクラスを、型による動的インターフェイスとしてコード生成します。(詳細はこちら)

    Abstractクラスの出力例

    astah uml2cプラグイン
    Abstract.c

    #include "Abstract.h" void Abstract_Destroy(Abstract self) { /* TODO */ } uint8_t Abstract_Operation(Abstract self) { /* TODO */ }

    Abstract.h

    #ifndef _ABSTRACT_H_ #define _ABSTRACT_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct AbstractStruct *Abstract; void Abstract_Destroy(Abstract self); uint8_t Abstract_Operation(Abstract self); #include "AbstractPrivate.h" #ifdef __cplusplus } #endif #endif /* _ABSTRACT_H_ */

    AbstractPrivate.h

    #ifndef _ABSTRACT_PRIVATE_H_ #define _ABSTRACT_PRIVATE_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct AbstractInterfaceStruct *AbstractInterface; struct AbstractStruct { AbstractInterface vtable; uint64_t id; char *type; }; typedef struct AbstractInterfaceStruct { void (*Destroy)(Abstract self); uint8_t (*Operation)(Abstract self); }; #ifdef __cplusplus } #endif #endif /* _ABSTRACT_PRIVATE_H_ */


    プラグイン一覧へ戻る