ログイン
検索
メインメニュー
ブログ一覧
Kotaさんのエントリ  Kotaさんのエントリ配信

2009/01/30
JUDE-C++ユーザーレクチャーシリーズ2[テンプレート]

執筆者: Kota (11:32 am)
C++ユーザー向けのレクチャーシリーズ2です。
今回は、テンプレート周りの説明で、C++ユーザーでなくとも、
Java、C#等でJUDEでどうテンプレートを設定していいかわからない人にも
参考になると思います。


5.5b1で追加されたテンプレートでのポインタの設定方法のご紹介です。
まず、プロジェクトを起動し、
クラス図にテンプレートにポインタを使用したバウンドクラスを
参照した属性を作成したいと思います。

(01)JUDE/Professional5.5b1以降のインストーラーをダウンロードし、インストール。
(02)JUDE/Professional5.5b1以降の起動
(03)プロジェクトの作成前に、新規作成したプロジェクトがC++プロジェクトになるように
  [ツール][システムプロパティ]メニューから[ファイル]で"プロジェクト新規作成時の言語"を"C++"に
  "新規作成モデルにプロジェクトの言語情報を設定する"を"ON"にします。
(04)[ファイル][プロジェクトの新規作成]でプロジェクトを作成します。
(05)構造ツリー上でプロジェクトを選択し、画面左下のプロパティビューで"プロジェクトの設定"タブを
  クリックして"C++"のチェックがONになっていることを確認。

以下のようなクラスを作成するにはどうしたらいいでしょう。
ちなみに、C++ではJavaと違い、テンプレートにプリミティブ型を指定することができます。






"Template<T5=BTemplate>"の作成は比較的簡単です。
(06)まず"BTemplate"のクラスを作成します。
(07)"DTemplate"クラスを作成し、図上のクラスを右クリックし、ポップアップメニューから
  "テンプレートパラメタの追加"で名前"T5"のテンプレートパラメタを作成
(08)"DTemplate"クラスのプロパティビュー[テンプレートパラメタ]タブで"デフォルト型"に"BTemplate"と入力します。
(09)"DTemplate"クラスに名前"attD"の属性を追加
(10)"attD"属性のプロパティビュー[ベース]タブで"型"に"T5"と入力するか、"T5 - DTemplate"を選択します
  これでひとまず完成しました。

次に"CTemplate"の一つの属性"- att1 : ATemplate<BTemplate>"に注目します。
1つのテンプレートパラメタをもつ"ATemplate"と"BTemplate"クラスの作成が必要そうです。
ただし、JUDE上では名前が"ATemplate<BTemplate>"のクラスを作成しても、
1つのテンプレートパラメタをもつ"ATemplate"と"BTemplate"クラスにはなんの依存関係も持たないクラスが作成されるだけです。
ここからがUMLのメタモデル的話になってくるのですが、
"ATemplate<BTemplate>"は名前でなく、無名バウンドクラスというものです。

無名バウンドクラス"ATemplate<BTemplate>"から1つのテンプレートパラメタをもつATemplateへは"テンプレートバインディング"で
依存関係を持ち、その実パラメタが"BTemplate"になります。
ではどういう手順で無名バウンドクラス"ATemplate<BTemplate>"を作成できるのでしょうか?

(11)まず"ATemplate"のクラスを作成します。
(12)"ATemplate"クラスを作成し、図上のクラスを右クリックし、ポップアップメニューから
  "テンプレートパラメタの追加"で名前"T4"のテンプレートパラメタを作成
(13)"ATemplate"クラスに名前"att0"の属性を追加
(14)"att0"属性のプロパティビュー[ベース]タブで"型"に"T4"と入力するか、"T4 - DTemplate"を選択します

(15)まず"CTemplate"のクラスを作成します。
(16)"CTemplate"クラスに名前"att1"の属性を追加
今は下のようになっているはずです。











(17)"att1"属性の図上の直接編集で"- att1 : ATemplate<BTemplate>"と入力し、
  "型になるATemplate<BTemplate>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  "att1"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<BTemplate>"と入力し、
  "型になるATemplate<BTemplate>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  新規クラスを作成し、そのクラスから"ATemplate<T4>"へクラス図や合成構造図のツールバーの依存ボタンのドロップダウン
  "テンプレートバインディング"で、テンプレートバインディングを作成し、
  そのプロパティビューの"テンプレートバインディング"タブの"実パラメタ"で"BTemplate"と入力。
  そして、新規作成したクラスの名前を空にすると図上の表示が"ATemplate<BTemplate>"になる
  "att1"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<BTemplate>"と入力するか、
  "ATemplate<BTemplate>"を選択します。

(18)作成した"ATemplate<BTemplate>"を図にドラッグアンドドロップすると
無名バウンドクラス"ATemplate<BTemplate>"から1つのテンプレートパラメタをもつATemplateへは
"テンプレートバインディング"で依存関係を持ち、その実パラメタが"BTemplate"になっていることがわかると思います。















次に"CTemplate"の一つの属性"- att2 : ATemplate<BTemplate*>"を作成したいと思います。
まず、ATemplate<BTemplate*>クラスを作成したいと思います。
(19)新規クラスを作成し、そのクラスから"ATemplate<T4>"へクラス図や合成構造図のツールバーの依存ボタンのドロップダウン
  "テンプレートバインディング"で、テンプレートバインディングを作成し、
  そのプロパティビューの"テンプレートバインディング"タブの"実パラメタ"で"BTemplate"と入力。
  そのプロパティビューの"テンプレートバインディング"タブの"型修飾子(実パラメタ)"で"*"と入力。
  そして、新規作成したクラスの名前を空にすると図上の表示が"ATemplate<BTemplate*>"になる
(20)"CTemplate"クラスに名前"att2"の属性を追加
(21)"att2"属性の図上の直接編集で"- att2 : ATemplate<BTemplate*>"と入力します。
   もしくは
  "att2"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<BTemplate*>"と入力します。

次に"CTemplate"の一つの属性"- att3 : ATemplate<int>"を作成したいと思います。
(22)"CTemplate"クラスに名前"att3"の属性を追加
(23)"att3"属性の図上の直接編集で"- att3 : ATemplate<int>"と入力し、
  "型になるATemplate<int>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  "att3"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<int>"と入力し、
  "型になるATemplate<BTemplate>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  新規クラスを作成し、そのクラスから"ATemplate<T4>"へクラス図や合成構造図のツールバーの依存ボタンのドロップダウン
  "テンプレートバインディング"で、テンプレートバインディングを作成し、
  そのプロパティビューの"テンプレートバインディング"タブの"実パラメタ"で"int"と入力。
  そして、新規作成したクラスの名前を空にすると図上の表示が"ATemplate<int>"になる
  "att3"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<int>"と入力するか、
  "ATemplate<int>"を選択します。

次に"CTemplate"の一つの属性"- att4 : ATemplate<int*>"を作成したいと思います。
まず、ATemplate<int*>クラスを作成したいと思います。
(24)新規クラスを作成し、そのクラスから"ATemplate<T4>"へクラス図や合成構造図のツールバーの依存ボタンのドロップダウン
  "テンプレートバインディング"で、テンプレートバインディングを作成し、
  そのプロパティビューの"テンプレートバインディング"タブの"実パラメタ"で"int"と入力。
  そのプロパティビューの"テンプレートバインディング"タブの"型修飾子(実パラメタ)"で"*"と入力。
  そして、新規作成したクラスの名前を空にすると図上の表示が"ATemplate<int*>"になる
(25)"CTemplate"クラスに名前"att4"の属性を追加
(26)"att4"属性の図上の直接編集で"- att4 : ATemplate<int*>"と入力します。
   もしくは
  "att4"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<int*>"と入力します。

次に"CTemplate"の一つの属性"- att5 : ATemplate<?>"を作成したいと思います。
(27)"CTemplate"クラスに名前"att5"の属性を追加
(28)"att5"属性の図上の直接編集で"- att5 : ATemplate<?>"と入力し、
  "型になるATemplate<?>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  "att3"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<?>"と入力し、
  "型になるATemplate<?>を新規作成しますか?"MSG表示で"はい"を選択。
   もしくは
  新規クラスを作成し、そのクラスから"ATemplate<T4>"へクラス図や合成構造図のツールバーの依存ボタンのドロップダウン
  "テンプレートバインディング"で、テンプレートバインディングを作成し、
  そして、新規作成したクラスの名前を空にすると図上の表示が"ATemplate<?>"になる
  "att5"属性のプロパティビュー[ベース]タブで"型"に"ATemplate<?>"と入力するか、
  "ATemplate<?>"を選択します。

ふー。
疲れましたか?

次回はこのプロジェクトをフォワードしてみます。
それでは。
Kotaさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (9794)
このエントリのトラックバックURL
http://astah-users.change-vision.com/ja/modules/weblog/weblog-tb.php?227
印刷用ページ 友達に送る