XDE は IBM/Rational の UML 統合開発ツールです。
UML
の各種ダイアグラムの作成からコード生成やリバースエンジニアリングが可能です。
XDE for Visual Studio.NET はマイクロソフトの Visual Studio.NET
で一体化して動作する XDE です。
同様のものとして、XDE for Eclipse があります。これもこの
Visual Studio.NET 版とほぼ同様に動作します。
XDE ではコード生成を行わずにモデリングだけを行うときと、コード生成とリバースエンジニアリ ングを行うときの両方で、使うことができます。
ここでは、コード生成とリバースエンジニアリングを行うときの XDE の使用方法について記述します。
Rational XDE モデリングから開始するときは以下にあります。
なお、操作は、ツールバーのプルダウンメニューからの操作か、右クリックによる ポップアップメニューでの操作で説明しています。 実際は頻度の高い操作はアイコンボタンをツールバーに表示してクリックするという方法が多 く使われています。
Visual Studio.NET を起動します。次に新規のプロジェクト(ソリューション)の作成または既存のプロジェクト (ソリューション)を開きます。ここでは新規プロジェクトを作成するときの例を示します。 但し、既存のプロジェクトのときでも同様に作成していくことができます。

Visual Studio.NET のプロジェクト作成
Visual Studio.NET はプロジェクトに応じたテンプレートコードを生成しますので、そのコードをリバースエンジニアリングして、UML クラス図を生成します。
以下に自動生成されるテンプレートコードを示します。
using System;
namespace XDETest
{
///
/// Class1 の概要の説明です。
///
class Class1
{
///
/// アプリケーションのメイン エントリ ポイントです。
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: アプリケーションを開始するコードをここに追加してください。
//
}
}
}
リバースエンジニアリングの UML クラス図
Visual Studio.NET で生成されるデフォルトのクラス名である Class1 のクラス図が表示されます。操作はデフォルトで生成される Main () が表示されます。
クラス図の追加や変更、削除は従来の ROSE の Look&Feel とほぼ同じ感覚で行えます。
もしツールボックスが表示されていなければ、[表示] [ツールボックス]
で表示します。

C# のクラス図の設定
3. モデルウィンドウに 3
でドラッグしたクラスが表示されます。
但し、この段階では基底クラスへの[汎化]関係の
矢印は表示されません。これは [ダイアグラム] [継承概要のリフレッシュ] を行うと表示される
ようになります。また、以下の手順にあるコード生成や同期を行うことにより表示されます。

Class2 の追加
(リフレッシュまたは同期をしない段階では汎化関係の矢印は表示されないことに注意)
クラス図からコード生成を行います。
namespace XDETest
{
public class Class2 : Class1
{
}
}
今後は、クラス選択して [右クリック] [同期] を行うとモデル(クラス図)とコードの同期が取れて、同一のものになります。
モデルオブジェクトから Class2 をドラッグしてモデルウィンドウへ持ってくると、汎化関係も表示されます。
このときに以前の Class2 を選択し、[右クリック] [ダイアグラムから削除] して1個にします。これが上記の Class2 の追加画面になります。
モデルウィンドウのタブをクリックしてクラス図に戻り、Class2 の操作を追加してみます。操作方法はUML クラス図の編集と同様です。[C# の追加] で [メソッド] を選択し Operation1 メソッドを追加し、[UML の追加] で [操作] を選択し、操作 Operation2 を追加してみます。そしてこれを右クリックで [同期] または [コード生成] を行います。生成されるコードは以下のようになります。
namespace XDETest
{
public class Class2 : Class1
{
public int Operation1(long arg1)
{
return 0;
}
public void Operation2()
{
}
}
}
既存プロジェクトの funado.lisp の C# の WindowsForm 版をリバースエンジニアリングしてみます。
新規プロジェクトのリバースエンジニアリングと同様に行います。

funado.lisp (WindowsForm by C#) の UML クラス図
XDE for Visual Studio.NET では、ダイアグラムには言語依存、例えば C# ダイア グラムか UML ダイアグラムが共存しています。UML ダイアグラムからでも、もちろん コード生成は可能です。
機能的には言語依存の設定を行うダイアログが出るか出ないかの差だけで、結果としての機能は同じです。例えば、UML のクラスを選んでも、class の属性に unsafe などの C# 特有のものをプロパティウィンドウで手動で設定することはできます。そのため、ダイアログウィンドウが出るのがうっとおしくなければ、言語依存のダイアグラムを使う方がいいでしょう。
C# ダイアグラムのクラス図には、C# 特有のものが用意されています。
例えば、ストラクチャ, enum、委譲やクラスの属性として abstract、sealed、new など、引数の属性 in, out, ref など C# 特有のものが使えるようになります。以下に C# のメソッド追加で指定できるパラメータ設定画面が示します。

C# ダイアグラムにおける C# メソッド追加の設定画面
本質的な問題ではありませんが、C# ダイアグラムではインタフェースはロリポップ表記 (○で表現するもの)になっています。
またリバースエンジニアリングするときのデフォルトは、言語依存ダイアグラムです。
具体的な問題を考えていきましょう。例えば、あるものをクラスで実装するか、構造体で実装する かをいつ判断するかです。これは同形ですので、後回しにしてもそれほど弊害は出ません。同じように enum で実装する場合もそうです。ここからは早期の段階では UML ダイアグラムを使用しても大きな 問題はないということになります。
次にクラス属性やメソッド属性をいつ決定するかです。例えば、メソッドを static にするか dynamic にするかの判断をいつするかです。これは比較的早期に決定すべき問題です。その理由は他への影響 が存在するためです。しかし UML ダイアグラムでこの表現が出来ないということではなく、UML ではステレオタイプを使用して表現が可能です。またはノートに表現する方法もあります。しかしス テレオタイプやノートはオプションですので、表記を忘れてしまう可能性が発生します。ここからは 言語依存のダイアグラムが早期に、つまり設計段階の早い時期に必要であることを示しています。
これらの情報を考慮して、プロジェクトで統一して、どのダイアグラムを使用するかを決定する 必要があります。
XDE では多くのデザインパターンが登録されています。以下は [ツール] [Patterns] [お気に入りのライブラリを開く] [GoF Library for CSharp v2_5] で表示されるパターンエクスプローラです。

パターンエクスプローラ
まず、モデルウィンドウを表示し選択しているときに、[ツールボックス][GoF
Pattern LIbrary for CSharp]をクリックし、適当なパターンを選択します。例えば、[FactoryMethod]
パターンを適用してみましょう。
(これは[ツール]
[Patterns] [お気に入りのパターンを適用]でもできます。)
一口メモ: デザインパターンには C++ 版と C# 版があります。ツールボックスの右側にその言語名が書かれていますので、ウィンドウ幅がないと表示されていませんが、 Patterns と複数形になっているのが C++、Pattern と単数形になっているのが C# ですので、ここで区別することができます。
この操作後には [パターン適用ウィザード] かまたは [パターン適用ダイアログ] かを選択する画面が表示されます。最初はウィザード形式のものを選びましょう。このウィザードでは名前などを設定することができます。[OK] ボタンをクリックしますとパターンがモデルウィンドウに挿入されます。"パターンの拡張に成功しました"といダイアログが表示されますので、[OK] ボタンをクリックします。
モデルウィンドウに以下の FactoryMethod のパターンが挿入されます。

FactoryMethod パターンのモデル図
モデルエクスプローラから、FactoryMethod パターンのクラスすべてをモデルウィンドウにドラッグ&ドロップします。
もしモデルエクスプローラが表示されていないときは、[表示] [その他のウィンドウ] [モデルエクスプローラ] で表示します。
以下に Creator クラスと ConcreteCreator クラスの図がモデルウィンドウに表示されている状態を示します。

FactoryMethod パターンの一部
モデルウィンドウでこれらのクラス図を選択し、右クリックでメニューを表示させ、[同期] をクリックします。これらに対するコードが生成されます。
例えば、ConcreteCreator クラス図をダブルクリックしますと、そのコードが表示されます。
以下にそれを示します。
namespace XDETest
{
///
/// -The ConcreteCreator overrides the FactoryMethod to return an instance of a ConcreteProduct.
///
public class ConcreteCreator : Creator
{
public ConcreteCreator()
{
}
///
/// -This operation returns an instance of the Product
///
///
///
///
public override Product FactoryMethod()
{
//TODO: The operation overrides the factory method to return an instance of a ConcreteProduct.
//You can customize the operation based on your application needs;
return new ConcreteProduct();
}
}
}
後は通常の UML クラス図と同様に操作できます。
XDE は、モデルファイルの分割/マージにより、複数メンバーでの分担開発をサポートします。
ここでは、チームでの分担開発を行う場合の、XDE の使用方法について記述します。
XDE のモデルは、パッケージまたはダイアグラムごとに分割またはマージすることが出来ます。分割したモデルは、分割した単位で個別のファイル(パッケージは拡張子 .pkx、ダイアグラムは拡張子 .dgx)として保存されます。
分担開発にあたっては、VSS や ClearCase などのバージョン管理ツールを用いると、共有化がしやすく便利です。
分割したモデルで複数作業者による変更の競合が発生した場合は、XDE の機能を使って差分を比較しながらマージすることが出来ます。ですがまずは、分割したファイル単位で排他的に取り扱う方が、手間やトラブルが少なくて済みます。
モデルの分割は、XDE のモデルエクスプローラで行います。
ここでは、バージョン管理ツールを使わない手順を書いています(使う場合については後述)。


マージは、分割した個々のユニットファイル(.pkx、.dgx)を一箇所に集めることで行います。
マージが必要になったときに、マージ役の人がファイルを受け取って自分のプロジェクトディレクトリにコピーするか、または共有ファイルサーバ上でファイルを集めます。ユニットファイルを排他的に運用すれば、ファイルを集めるだけでマージが完了します。
同じユニットファイルに対して変更の競合が発生した場合は、XDEの機能で比較とマージを行うことが出来ます。

バージョン管理ツールを使いますと、上記作業を楽に行う事が出来ます。
Visual Trace は、動作するプログラムから動的にシーケンス図を生成する機能です。
この機能を使うと、まず XDE 独自の「トレースシーケンス図」が生成されます。これにより、プログラムの動作を時系列で、実行時間とともに見ることが出来ます。さらにそこから、UML 標準のシーケンス図を生成することも出来ます。
Visual Trace を使うには、XDE の他に、Purify Plusのインストールが必要です。PurifyPlusもデバッグやテストで大変役に立ちますので、ぜひインストールしてください。
Visual Trace 機能は、動作するプログラムでなければ適用できません。下記のような使い方が有効です。
まず動作するプログラムから、トレースシーケンス図を以下の手順で作成します。


次にトレースシーケンス図から、UML のシーケンス図を以下の手順で作成します。
クラスやメソッド、属性に対して、実際の名前とは別にエイリアス(別名)を付ける事が出来ます。これを用いて、英語による実際の命名と、日本語による設計作業用の命名を使い分けると便利です。
やり方は、まずクラスやメソッド、属性のプロパティで、実際の名前となる「(Name)」の他に、「Alias」も入力します。あとは、ダイアグラムのプロパティの「UseAlias」を「True」にすれば、そのダイアグラムでの表示がエイリアスの方に切り替わります。

各種 UML 図(ダイアグラム)の位置を調整して、整列(レイアウト)します。操作方法は [ダイアグラム] [整列] です。
プロパティやコードの編集を繰り返し実行していますとダイアグラムに反映されて いるかどうかが分からなくなります。このときには、[ダイアグラム][ダイアグラムのリフレッシュ] で画面を再描画してください。
クラス図などのモデルを他へエクスポートすることや他のプロジェクトのモデルをインポートすることができます。
XMI 形式(XML形式)による汎用的な形式で交換する方法があります。この形式であれば、他の UML ツールとも互換性があります。
しかし、ファイルは大きくなり、変換時間も掛かります。また拡張されたレイアウト情報など一部の情報が失われます。
一方、XDE との交換であれば、モデルファイルそのもので交換が可能です。具体的には、mdx ファイルによる交換です。(この mdx ファイルは ROSE のモデルファイル mdl ファイルに相当します。)
[ファイル] [XDE のエクスポート] [XMI のエクスポート]として、生成する XML [ファイル名] を設定して [OK] を押します。
[ファイル] [XDE のインポート] [XMI のエクスポート]として、インポートする XML [ファイル名] を入力して [OK]を押します。次に 出力ウィンドウを[閉じます]。
これでインポートされましたので、今までと同様にモデルエクスプローラから、モデルウィンドウへインポートしたモデルをドラッグ&ドロップにより表示させます。
以下に クラス図をインポートした結果とその XMI ファイルの一部を紹介します。


インポートしたクラス図の XMI
XDE で記述した各種ダイアグラムを、他のツールで「図形」として利用する方法を記述します。
XDE のダイアグラムに「日本語を全く使用せずに英語で記述している場合」は以下になります。
そのままコピーができます。
コピーした図は GIF に変換されていますので、GIF を扱える他のツールへペーストが行えます。但し、ドラッグ&ドロップはできません。
日本語がある場合は文字化けをしてしまいます(2004-10-20 現在)。そこで以下のようにします。
ここは、貼り付けを行うときに
[形式を選択して貼り付け] [ピクチャ (拡張メタファイル)]
で行います。これにより、文字化けは起こりません。
また、以下の方法では、文字化けは起こりません。
Publish Model 機能 (PNG)
Generate Model Report 機能 (JPEG)
のどちらかを使って、出力結果のイメージデータをコピー&ペーストして利用します。
[ツール] [オプション] [テキストエディタ] [すべての言語] [全般] [行番号]
[ファイル] [ページ設定] [行番号]
実装するプログラミング言語が決定していなくて、モデリングから開始する場合については、以下のように行います。
但し、コード生成は行いませんので、コード生成するときにはコピーする必要があります。
[ファイル] [新規作成] [プロジェクト] [XDE
モデリングプロジェクト] [空のプロジェクト]
により、XDE の空のプロジェクトを生成します。
次に [ファイル] [新しい項目の追加] [Rational
XDE] [空のモデル]
により、モデルウィンドウを生成し、表示します。
後は、ツールボックスから、オブジェクトをドラッグ&ドロップして、UML の図を作成します。下の図ではクラスを2個をモデルに挿入しています。

XDEモデリング
前述のコード生成を行う「使用方法」と同様に作図します。
XDE for Visual Studio.NET に Rational 拡張ヘルプがあります。操作方法は [ヘルプ] [Rational 拡張ヘルプ] です。
ここには以下のような各種チュートリアルがありますので、詳細はこれを参照してください。
但し、RUP をベースにして記述されていますので、操作中心の記述は現時点ではないようです。また JavaApplet で動作しますので、JRE が必要になります。

拡張ヘルプ
XDE はさすがに「こなれた」感じのする UML
ツールです。違和感なく使えることが多いでしょう。
モデルエクスプローラからモデルウィンドウへドラッグすることを除けば・・・
また各種のデザインパターンが用意されているなど便利な機能がありますので、みなさん、楽しみながら、 プログラミングしていきましょう。