UML から C++ への変換の記述

UML から C++ への変換により、UML モデル要素が C++ コードに変換されます。

コード生成およびフォーマットのプリファレンス

UML から C++ への変換に対して、以下のプリファレンスを設定することができます。
  • 変換によって生成されるファイルの開始位置と終了位置に、変換が挿入するコメントのフォーマット
  • タブ余白、クラス属性と操作の表示順序、インデント・スタイル
  • 標準テンプレート・ライブラリー (STL) クラスに関連するインクルード・ディレクティブの生成
  • ソース UML モデル要素を生成された要素へのポインターで置き換えるときの警告の表示

変換プリファレンスの設定法について詳しくは、このトピックの最後にある、関連する「変換モデル」タスクのトピックへのリンクを参照してください。

有効な変換ソース

次の表に、変換の構成で指定した DCMP (design contract management protocol) に応じて、C++ コードに変換できる UML のソース・オブジェクトを示します。
DCMP UML ソース・オブジェクト
具象モデルをシードする概念モデル 現在のワークスペースで、1 つ以上の UML プロジェクトから次の要素を選択できます。
  • モデル
  • パッケージ
  • ネストされていない分類子
    • クラス
    • 列挙型
    • インターフェース
    • コンポーネント
概念モデル駆動型開発
調整されたモデリング 前出のリストで 1 つ以上の要素を選択できます。

複数のパッケージまたはネストされていない分類子を UML から C++ への変換のソースとして選択するには、それらが同じ UML モデルに含まれている必要があります。

1 つ以上のネストされていない分類子を UML から C++ への変換のソースとして選択すると、その後方変換 (C++ から UML への変換) により、後方変換が処理する最初のネストされていない分類子のルート・レベル・パッケージが判別されます。後方変換では、このルート・レベル・パッケージに出力が生成されます。

変換構成を作成または編集することにより、またはモデル内でモデル要素を直接選択することにより、C++ コードに変換するモデル要素を指定できます。 選択されたモデル要素が、変換のソースになります。 この変換では、コンテナーおよびそのモデル要素を両方選択した場合、または同一のモデル要素を 2 回選択した場合にエラー・メッセージが生成されます。

コンポーネントを使用して、C++ コードに変換するモデルの要素を編成できます。 コンポーネントを選択し、コンポーネントにパッケージおよびクラスへの使用関係がある場合は、UML から C++ への変換により関連するパッケージおよびクラスが、C++ コードに変換されます。

変換ソースで有効な名前

UML ソースの各要素の名前は、小文字、大文字、または下線 (_) で開始できます。 後続の文字には、小文字、大文字、または数値を使用できます。 オペレーション名内でコロン (:) を使用し、フレンド関数の完全修飾名を指定できます。 変換では、数値または無効文字で開始される名前に対して、下線 (_) を前につけます。 変換では、該当する名前空間における名前が固有であるかどうかを検査します。 その名前が固有でない場合は、変換により重複名に対して、下線文字とインクリメンタル数値 (例: _1) とからなる接尾部が割り当てられます。

生成されるコードをより読みやすくし、UML モデルと生成されたコードとの差異を最小限にするため、変換を実行する前に、ソースの UML モデルにある無効な名前を訂正してください。

有効な変換ターゲット

有効な変換ターゲットは C++ プロジェクトです。ターゲット・コンテナーを作成する場合は、スタンダード Make C++ プロジェクト (ユーザーが makefile を作成するか、または既存の makefile を利用する) の作成、あるいは、管理 Make プロジェクト (makefile は自動作成される) の作成かの、いずれかを選択することができます。

UML から C++ への変換が実行されると、ターゲットの C++ プロジェクトに出力が生成されます。この出力はソース UML モデルの要素と同じ階層を持っています。 変換構成で 調整されたモデリング DCMP を選択すると、C++ から UML への変換 (後方変換) では、C++ プロジェクトと同じ階層に UML 要素が生成されます。

変換出力のロケーション

変換では、変換のターゲットとして指定した C++ プロジェクトおよび C++ プロジェクト・フォルダー内に C++ コード・ファイルが生成されます。

UML モデル要素と C++ コードの同期

UML 要素と C++ コード要素の間に、追跡可能な関係と呼ばれる一種のリンクが変換により定義されるよう指定して、C++ コードと UML モデル要素を容易に同期させることができます。調整されたモデリングまたは概念の設計規約管理プロトコル (DCMP) を使用するように C++ から UML への変換または UML から C++ への変換を構成している場合は、このオプションを指定できます。変換を実行すると、生成された要素に注釈および ID が追加されて、追跡可能な関係が作成されます。 追跡可能な関係を生成すると、C++ から UML への変換により UML モデルで重複した要素が生成されることを防げます。

変換によって追跡可能な関係が生成されるのは以下の要素です。

生成された C++ コードのカスタマイズ

UML から C++ への変換では、JET 変換を呼び出して C++ コードを生成します。オーバーライドの JET 変換を作成し、その変換でテンプレートを変更することで、組織固有のコメントなどのコード要素を、 生成済みコードに組み込むことができます。 UML から C++ への変換の構成を作成する場合、オーバーライドの JET 変換の ID を指定する必要があります。

UML モデル要素の変換

以下の表には、UML から C++ への変換により、どのように UML モデル要素が C++ コードに変換されるかがリストされています。

UML モデル要素 C++ コード要素
関連 クラス属性
クラス クラス (.h ファイルおよび .cpp ファイル)
依存関係 包含、下方参照、またはなし
注: ヘッダー・ファイルと実装ファイルの中に生成されるものは、プロパティー・ウィンドウの「C++ プロパティー」ページでの設定値によって決まります。
列挙 Enum (.h ファイル)
汎化関係 クラス継承
操作 操作
パッケージ フォルダー
パラメーター 操作引数
プロパティー クラス属性
テンプレート・バインド関係 インスタンス化されたクラス (.h ファイル)
テンプレート・クラス UML テンプレート・クラスと同じ名前を持つヘッダー・ファイル (.h ファイル)
注: メソッド本文コードもヘッダー・ファイルに生成されます。
テンプレート・パラメーター パラメーター化されたクラス用のパラメーター

変換によりどのように UML モデル要素が変換されるかについて詳しくは、このトピックの末尾にある関連リファレンスのトピックを参照してください。

C++ グローバル変数およびメソッドのサポート

C++ グローバル変数およびメソッドをモデル化するには、«cpp_globals» が適用されたステレオタイプを持つ UML クラスにこれらの要素を追加します。 グローバル・メソッドおよび調整されたモデリングについて詳しくは、以下の関連タスクのトピックを参照してください。

ソース・モデル要素と変換出力の間のトレース関係

ソース・モデルの要素がターゲット・プロジェクトの要素とどのように関係しているかを理解するには、変換でソース・モデル要素からターゲット・プロジェクト内に生成された要素へのトレース関係を作成します。その後、モデル照会を作成および実行して、トピック図内にそのトレース関係を表示することができます。

トレース関係の作成は、複数のモデルおよび複数の変換構成を持つような大規模なプロジェクトの場合に便利です。 また、変換出力がソフトウェアの仕様やモデル要素とどのように関係しているかを表示する、追跡可能性照会を作成および実行することもできます。

ソース・モデルと変換出力との間のトレース関係を生成するように構成された変換を実行すると、@generated タグをサポートする各 UML 要素に対して、変換は、 変換出力にソース・コード・コメントが追加されます。コメントは //@uml.annotations から始まり、そのモデル要素の固有 ID を含みます。ソース UML モデル内の要素の名前を変更すると、この固有 ID によりマージ機能で適切な要素のリファクタリングとマージが可能になります。また、ソース UML モデルの要素を名前変更、移動、または削除した場合に、これらの要素に対応する C++ ビジュアル表示が含まれていると、UML から C++ への変換を再実行した場合に、変換により C++ ビジュアル表示への参照が更新されます。
注: UML 要素をそのトップレベルのクラスの範囲外に移動すると、要素の範囲が変更されるため、変換を再実行したときに、マージ・アルゴリズムでは名前変更された要素がリファクタリングまたはマージされません。

変換によってトレース関係を生成するように指定した場合には、ソース・モデルは変換によって変更されません。

ソース・モデル要素と変換出力の関係を表示するには、ソース・モデル要素を図にして可視化し、変換によって生成されたコード要素をその図の中にドラッグします。以下の表は、attribute1 という名前の整数属性が含まれる Class1 という名前のソース・モデル要素の UML 表現と、パラメーターを持たない 2 つのオペレーション Operation1 と Operation2、変換によって生成されるコード、および要素間のトレース関係を示すクラス図をリストしています。
UML 要素 変換出力 クラス図に示される派生関係
このイメージは、整数属性 があり、入力パラメーターや出力パラメーターがない操作が 2 つある、Class1 という名前の UML クラスを示しています。
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了

//@uml.annotationsderived_abstraction="platform:/resource/MyModels/UMLModel.emx#_biwQUHdCEduVaMk1fL7Qcw"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1 {

    //Class1 のセクションの開始
    //TODO: 保持する属性を追加します
    //Class1 のセクションの終了

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation2();

};  //クラス Class1 の終了

#endif
このイメージは、Class1 とそのビジュアル表示との間の、派生ステレオタイプを適用した、抽象化関係を表しています。

C++ 標準操作

標準操作は、コンストラクター、コピー・コンストラクター、仮想および非仮想のデストラクター、代入演算子、および getter および setter の各メソッドです。 UML から C++ への変換によって UML モデルのクラス、構造体、および共用体で生成される標準操作を指定できます。また、標準操作の 1 つであるステレオタイプをモデル内のクラスの操作に追加することもできます。UML - C++ 変換は、生成された標準操作に UML 操作の可視性を適用しますが、UML 操作の名前および パラメーターを無視します。

チーム・サポートとの統合

変換は、ファイルの自動チェックアウトや新規ファイルの追加を可能にする IBM® Rational® Team Concert、CVS、Rational ClearCase®、および Rational ClearCase LT バージョン管理システムとの統合機能を提供します。構成管理システムを使用するには、チーム機能を有効にする必要があります。


フィードバック