JP2005530238A - 動的モデル/コード結合を提供するシステム、方法、および媒体 - Google Patents
動的モデル/コード結合を提供するシステム、方法、および媒体 Download PDFInfo
- Publication number
- JP2005530238A JP2005530238A JP2004513930A JP2004513930A JP2005530238A JP 2005530238 A JP2005530238 A JP 2005530238A JP 2004513930 A JP2004513930 A JP 2004513930A JP 2004513930 A JP2004513930 A JP 2004513930A JP 2005530238 A JP2005530238 A JP 2005530238A
- Authority
- JP
- Japan
- Prior art keywords
- code
- model
- source code
- elements
- modified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 238000010586 diagram Methods 0.000 claims description 94
- 230000000694 effects Effects 0.000 claims description 18
- 238000012545 processing Methods 0.000 claims description 17
- 230000004048 modification Effects 0.000 claims description 9
- 238000012986 modification Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 8
- 239000012634 fragment Substances 0.000 claims description 7
- 230000001172 regenerating effect Effects 0.000 claims description 5
- 230000006870 function Effects 0.000 description 39
- 230000008859 change Effects 0.000 description 34
- 239000011800 void material Substances 0.000 description 24
- 238000013459 approach Methods 0.000 description 22
- 230000003068 static effect Effects 0.000 description 22
- 230000009471 action Effects 0.000 description 17
- 230000000875 corresponding effect Effects 0.000 description 15
- 239000002131 composite material Substances 0.000 description 14
- 230000008901 benefit Effects 0.000 description 13
- 238000013507 mapping Methods 0.000 description 12
- 230000007704 transition Effects 0.000 description 12
- 230000006399 behavior Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 239000003471 mutagenic agent Substances 0.000 description 10
- 230000008929 regeneration Effects 0.000 description 10
- 238000011069 regeneration method Methods 0.000 description 10
- 230000018109 developmental process Effects 0.000 description 9
- 238000012360 testing method Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000004519 manufacturing process Methods 0.000 description 7
- 238000013515 script Methods 0.000 description 7
- 238000003860 storage Methods 0.000 description 7
- 241000509228 Thalasseus maximus Species 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000008878 coupling Effects 0.000 description 6
- 238000010168 coupling process Methods 0.000 description 6
- 238000005859 coupling reaction Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000002195 synergetic effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000007935 neutral effect Effects 0.000 description 2
- 239000000700 radioactive tracer Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 201000002569 3-methylglutaconic aciduria type 5 Diseases 0.000 description 1
- 239000010749 BS 2869 Class C1 Substances 0.000 description 1
- 239000010750 BS 2869 Class C2 Substances 0.000 description 1
- VCBRBUKGTWLJOB-UHFFFAOYSA-N Chloranocryl Chemical compound CC(=C)C(=O)NC1=CC=C(Cl)C(Cl)=C1 VCBRBUKGTWLJOB-UHFFFAOYSA-N 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- JLQUFIHWVLZVTJ-UHFFFAOYSA-N carbosulfan Chemical compound CCCCN(CCCC)SN(C)C(=O)OC1=CC=CC2=C1OC(C)(C)C2 JLQUFIHWVLZVTJ-UHFFFAOYSA-N 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000000825 pharmaceutical preparation Substances 0.000 description 1
- 229940127557 pharmaceutical product Drugs 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
- G06F8/355—Round-trip engineering
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Transition And Organic Metals Composition Catalysts For Addition Polymerization (AREA)
- Devices For Executing Special Programs (AREA)
- Dental Preparations (AREA)
- Adhesives Or Adhesive Processes (AREA)
- Auxiliary Devices For Music (AREA)
Abstract
Description
1.ファイルの生成が必要かもしれないという通知を、DMCAマネージャ(Manager)が取得する。この通知は、
1.1.コード・ビューがフォーカスを取得したか、コード・ビューが開いた場合は、コード・ビューが実行する。
2.DMCAマネージャ(Manager)が、ファイル内の実装されているすべての要素をアクティブ・コンポーネントに照会する。このコンポーネントは、実装ファイルとモデル要素との間のマッピングを保持している。
3.DMCAマネージャ(Manager)がIMCAを使用して、ファイル内の実装されている要素の中に修正されたものがないかどうかを調べる。
4.修正された要素がある場合は、DMCAマネージャ(Manager)がコード・ジェネレータに指示して、そのファイルを再生成させる。
5.ファイルが再生成されたら、DMCAマネージャ(Manager)がコード・ビューに、コード・ビューを更新するよう通知する。アクティブ・コード・ビューの場合は、アクティブ・コード・ビューが、コード内の要素の行番号を位置ファインダに照会して、当該行までスクロールする(CおよびC++では、アクティブ・コードはヘッダ・ファイルおよび.c\.cppファイルを表示するので、複数の行が呼び出される場合がある)。
1.コード・ビューがフォーカスを失ったか、ユーザが修正後にその内容を保存した場合は、DMCAマネージャ(Manager)がコード・ビューから通知を受け取る場合がある。コード・ビューがフォーカスを失い、そのビューの内容が修正された場合、コード・ビューはそのファイルを保存し、DMCAマネージャ(Manager)に通知する。
2.そのファイルの内容が変更された場合は、そのファイルに対してリポジトリ更新(RoundTrip)を実行し、関連する要素を更新する。
3.コード生成マッピングは複雑な場合があるので(たとえば、getterおよびsetterを含む属性)、DMCAマネージャ(Manager)は、コードがコード生成規則に適合するように、修正された要素に対してコード生成を実行する(本願発明者らの例では、属性を実装しているデータ・メンバの名前を変更すると、getterおよびsetterの名前も同様に変更される)。
a.ユーザが、モデル内でクラスを選択し、そのクラスに属性を追加する。
2.ユーザが、クラスの名前を変更し、変更したクラスと関係があるクラスのビューにフォーカスを置く:
a.ユーザが、モデル内のクラスを選択し、その名前を変更する。
a.ユーザがモデル要素を選択する。
a.ユーザがクラスを選択し、「Edit Class(クラスを編集)」を選択する。
a.コード・ビューが、そのファイルを保存し、そのファイルを保存したことをDMCAマネージャ(Manager)に通知する。
以下では、たとえばスタンドアロン・コンピューティング・マシン、コンピュータ、またはコンピュータ・ネットワークなどのコンピューティング・システムや処理システムで実行されるプログラム手順の点で詳細を説明する場合がある。そうした手順上の説明および表現は、いわゆる当業者が成果の内容を他の当業者に最も効率的に伝えるために用いる手段である。
ラウンドトリップできることである。このため、手動で実行したコード変更が、コードの再生成によって失われることがない。DMCAにより、ユーザは、標準的なコード生成機能およびラウンドトリップ機能を利用してシステムの実装を即座に表示し、直接制御することができるので、動的モデル/コード結合は、前述のアプローチの優位性を押し進める重要な要素の1つである。
ユーザ・ガイド
アイ−ロジックス(I−Logix)
ラプソディ(Rhapsody(登録商標))
ユーザ・ガイド
リリース4.2
アイ−ロジックス(I−Logix)
ラプソディ(Rhapsody)は、UMLモデルから実装コードを生成する。コンフィグレーション全体に対しても、選択したクラスに対しても、コードを生成することができる。コード・ジェネレータへの入力は、モデルと、コード生成(<lang>_CGおよびCG)プロパティである。コード・ジェネレータからの出力は、ターゲット言語でのソース・ファイル(仕様ファイル、実装ファイル、およびメイクファイル)である。
・概要 15−2頁
・コードを生成する 15−4頁
・ターゲットを樹立(ビルド)する 15−6頁
・実行可能ファイルを実行する 15−7頁
・個々の要素のコードを生成する 15−8頁
・コード生成の結果 15−9頁
・コードを表示および編集する 15−10頁
・ラウンドトリップ 15−12頁
・重複したコード・ファイルを削除する 15−22頁
・アクタのコードを生成する 15−22頁
・コンポーネント図のコードを生成する 15−23頁
・クロスパッケージの初期設定 15−25頁
・クラス・コード構造 15−26頁
・#ifdef−#endifでコードをラップする 15−36頁
・演算子をオーバーロードする 15−36頁
・匿名インスタンスを使用する 15−41頁
・関係を使用する 15−43頁
・静的アーキテクチャのサポート 15−45頁
・標準操作を用いる 15−48頁
ラプソディ(Rhapsody)は、コード・ジェネレータと、1組のライブラリとして提供されるリアルタイムOXF(オブジェクト実行フレームワーク(Object Execution Framework))との間に、最低レベルの設計判断をユーザに代わって実装できる。この判断には、関連、関係オブジェクトの多重度、スレッド、状態マシンなどの設計要素の実装方法が含まれる。
・精緻的(elaborative)方法 関係、状態マシン生成、その他のすべてを無効にした状態で、ラプソディ(Rhapsody)を単にコード・ブラウザとして使用することができる。インスタンスの初期設定やリンクは生成されない。すべてを手動で行う。
・変換的(translative)方法 コンポーネント、リンク、および状態マシンを有するコンポジットを描き、ボタンをクリックして、アプリケーションを実行することができる。作成するコードは最小限でよい(少なくともいくつかのアクションをステートチャートに書く必要がある)。
コードを生成する前に、アクティブ・コンフィグレーションを設定しなければならない(詳細については、第12章の「アクティブ・コンフィグレーションの設定(Setting the Active Configuration)」の項を参照されたい)。コード・ジェネレータは、自動的にチェッカを実行して、コードの生成やコンパイルにおいて問題を引き起こすおそれのある不整合性がないかどうかをチェックする。チェッカが実行するチェックのうちのいくつかは、コード生成前に修正されていないとコード生成が中断されるおそれのある潜在的に致命的な状況を検出する。実行するチェックの選択については、第14章「チェック(Checks)」を参照されたい。
・Code > Generate > <アクティブ・コンフィグレーション>を選択する。
・Ctrl+F7キーを押す。
長いコード生成セッションを終了するには、Code > Stop Xを選択する。たとえば、コードをビルドしている途中の場合のオプション名はStop Buildである。
ラプソディ(Rhapsody)は、コンフィグレーションのための初期コード生成の後、最後に生成された後に変更された要素についてのみコードを生成する。これにより、コード生成に要する時間が減り、性能が大幅に向上する。
場合によっては、変更した要素だけでなく、モデル全体の生成が必要になる。
モデルからクラスまたはパッケージを削除したり、パッケージに第1グローバル・インスタンスを追加したりした場合は、コンフィグレーション・ファイル(メイン・ファイルとメイクファイル)を再生成する必要がある。
コンフィグレーション・ファイルの再生成を強制するには、次のいずれかを行う。
・Code > Re Generate > Configuration Filesを選択する。
・ブラウザでアクティブ・コンフィグレーションを右クリックし、ポップアップ・メニューからGenerate Configuration Main and Makefilesを選択する。
ラプソディ(Rhapsody)は、パッケージに意味のある情報(インスタンス、型、関数など)が含まれている場合のみ、そのパッケージのコードを生成する。この動作は、不要なパッケージ・ファイルを生成しないことによって、コード生成プロセスを合理化する。
コードを生成する際には、以下の点を考慮されたい。
・非リアクティブ・クラスから継承したリアクティブ・クラスは、インストルメンテーション・モードでコンパイル警告を発生させる可能性がある。この警告は無視してよい。
・トリガされる操作を自己(循環)起動することは、フラットな(再利用不可の)ステートチャートでのみ可能である。これを再利用可能なステートチャートで行うと、生成されたアプリケーションはそれらを無視する。コード・ジェネレータは、こうした状況をチェックしない。
・コンポーネントの範囲外にある別のクラスに依存するクラスがある場合、ラプソディ(Rhapsody)は、その外部クラスに対する#include文を自動生成しない。その依存クラスのSpecIncludeプロパティを<lang>_CG::Classの下に設定しなければならない。
Code > Dynamic Model Code Associativity(BidirectionalまたはOnline Code Generation設定)を選択した場合は、要素が変更され、その再生成が必要になると、ラプソディ(Rhapsody)が自動的にコードを生成する。この変更には以下のものが含まれる。
・要素自体の変更(要素の名前やプロパティの変更、要素の一部の追加または削除による変更など)
・要素の所有者、関連する要素、プロジェクト、選択されたコンポーネント、またはコンフィグレーションの変更
・Add to Model機能による、モデルへの要素の追加
・CMツールによる要素のチェックアウト
・要素の編集中のUndoコマンドの使用
次のいずれかのことを行うと、要素のコードが自動的に生成される。
・内部テキスト・エディタまたは外部エディタを使用して、要素のCode Viewウィンドウを開く。「コードを表示および編集する」の項を参照されたい。
・その要素の既存のCode Viewウィンドウにフォーカスを置く。
ラプソディ(Rhapsody)は、コンパイルおよびリンクするファイル、それらの依存、およびコンパイルとリンクのコマンドの、それぞれのリストを含む簡単(プレーン)なメイクファイルを生成する。
コードが正しく生成されたら、ターゲット・コンポーネントをビルドできる。次のいずれかの方法を用いる。
・Code > Build <ターゲット名(targetname)>.exeを選択する。
・CodeツールバーのBuild Targetアイコンをクリックする。
場合によっては、リンカが古いオブジェクトを使用してアプリケーションをリンクする可能性がある。
・Code > Cleanコマンドを使用して、現在のコンフィグレーションに関するすべてのコンパイル済みオブジェクト・ファイルを削除する。推奨されるのは、この方法である。
・毎回、Code > Rebuildコマンドを使用する。複雑なシステムの場合は時間がかかる場合がある。
・etc/msmake.bat内でメイクの開始を変更し、/Iオプションを外す。これにより、最初にエラーがあったソースでビルドが中止される。
・site.prpファイル内で、CPPCompileCommandプロパティをStringからMultiLineに変更し、その内容を、ファイルがコンパイルされる前に既存の.objファイルが削除されるように変更する。
CPPCompileCommandプロパティ
メタクラスMicrosoft:
Property CPPCompileCommand MultiLine
" if exist $OMFileObjPath
erase $0MfileObjPath
$ (CPP)
$OMFileCPPCompileSwitches
/Fo\"$OMFileObjPath\"
\"$OMFileImpPath\" "
Metaclass VxWorks:
Property CPPCompileCommand MultiLine
" @echo Compiling
$OMFileImpPath
@$(RM) $OMFileObjPath
@$(CXX) $ (C++FLAGS)
$OMFileCPPCompileSwitches-o
$OMFileObjPath
$OMFileImpPath"
ターゲット・ファイルをビルドしたら、次のいずれかの方法で実行できる。
・Code > Run <コンフィギュレーション(config)>.exeを選択する。
・CodeツールバーのRunツールをクリックする。
コードおよびメイクファイルを生成し、ターゲットをビルドし、そのすべてを1つのステップで実行するには、次のいずれかを行う。
・Code > Generate/Make/Runを選択する。
・CodeツールバーのGenerate/Make/Runツールをクリックする。
コードにアニメーション・インストルメンテーションを含めた場合は、コードを実行すると、Animationツールバーが表示される。コードにトレース・インストルメンテーションを含めた場合は、コードを実行すると、Traceウィンドウが表示される。コンフィグレーションのパラメータを設定するときに、アニメーション・インストルメンテーションまたはトレース・インストルメンテーションを選択できる。第12章の「コンフィグレーション(Configurations)」の項を参照されたい。
進行中のモデル実行を中止するには、次のいずれかの方法を用いる。
・Code > Stopを選択する。
・CodeツールバーのStop Make/Executionツールをクリックする。
パッケージとそのすべてのクラスのコード、またはパッケージ内の選択したクラスのコードを生成することができる。コードの生成は、Codeメニュー、ブラウザ、またはOMDから行うことができる。
Codeメニューを用いてコードを生成するには、以下を行う。
1.ブラウザからクラスを選択するか、OMDで1つまたは複数のクラスを選択する。
2.Code > Generate > Selected Classesを選択する。
1.ブラウザからクラスを選択するか、OMDで1つまたは複数のクラスを選択する。
2.Code > Re Generate > Selected Classesを選択する。
ブラウザからコードを生成するには、以下を行う。
1.ブラウザで、パッケージまたはクラスを右クリックする。
2.パッケージの場合は、ポップアップ・メニューからGenerate Packageを選択して、該パッケージ内のすべてのクラスのコードを生成する。
OMDでクラスのコードを生成するには、そのクラスを右クリックし、ポップアップ・メニューからGenerate Classを選択する。
コード生成が完了すると、ラプソディ(Rhapsody)が結果を表示する。コード生成メッセージがOutputウィンドウに表示される。メッセージをクリックすると、モデル内の該当位置が表示される。
コードを生成し、ターゲットをビルドすると、操作の正常終了を伝えるメッセージか、エラーを知らせるメッセージがOutputウィンドウに表示される。
ラプソディ(Rhapsody)では、メイク処理中にコンパイル・エラーを表示できる。コンパイル・エラーの原因を知るには、そのエラー・メッセージをダブルクリックする。エラーの原因に応じて、次のいずれかの結果が発生する。
・ステートチャート・エディタが開き、遷移または状態が強調表示されている。これは、その遷移または状態に正しくない表現を入力したことを意味する。ステートチャート・エディタでエラーを修正する。
・ブラウザが開き、属性または操作が強調表示されている。これは、属性または操作の定義に正しくない表現を入力したことを意味する。ブラウザでエラーを修正する。
・ソース・ファイルが開き、ある行が強調表示されている。これは、修正する必要がある設計内のアイテムをラプソディが表示できなかったことを意味する。この場合は、手動開発サイクルの場合のように、以下に示す方法でエラーの原因を識別する必要がある。
Code View機能により、クラスや選択したパッケージ(ただし、コンフィグレーションではない)のコードを編集できる。1つまたは複数のクラスを選択し、好みのテキスト・エディタを起動して、そのコード・ファイルを直接編集することができる。
コードを表示および編集するためには、コード・ビュー・エディタの範囲を設定しなければならない。以下を行う。
1.表示したいコードを有するパッケージまたはクラスを含むコンポーネントを右クリックする。
2.ポップアップ・メニューからSet as Active Component領域を選択する。
3.Current Configuration領域(フィールド)で、使用したいコンフィグレーションを選択する。
生成されたコードを編集するには、次のいずれかを行う。
・要素を強調表示し、Code > Edit > Selected classesを選択する。
・要素を右クリックし、Edit <要素(element)>を選択する。
<ファイル名(filename)>:このファイルはソース・エディタ以外で変更されています。リロードしますか?
Yesをクリックすると、コード・ビューが新しいファイル内容で更新される。実装ファイルが古い情報で置き換えられることはない。
エディタで現在開いているファイルのコードを再生成するには、Code > Re Generate > Focused Viewsを選択する。
特定のエディタを、ソース・ファイルの拡張子に関連付けることができる。以下を行う。
1.(General::Modelの下の)ClassCodeEditorプロパティをAssociateに設定する。
2.OKをクリックして変更を適用し、ダイアログ・ボックスを消す。
3.OKをクリックして変更を適用し、ダイアログ・ボックスを消す。
1.Windowsエクスプローラから、View > Options > File Typesを選択する。
2.ファイル・タイプ(たとえば、ファイル拡張子Hに関連付けられたC Header File)を選択し、Editを選択する。
3.Newをクリックし、「Open」アクションを追加し、そのOpenアクションを好みのエディタ・アプリケーションに関連付ける。
4.「Open with MSDEV」アクションを削除する。
コードの編集の際に外部エディタを指定するには、以下を行う。
1.File > Project Propertiesを選択する。
2.Propertiesタブを選択する。
3.General::Model::EditorCommandLineプロパティに移動する。
4.右カラムのプロパティ値呼び出しをクリックしてそのフィールドをアクティブにし、省略符号(...)をクリックしてBrowse for Fileダイアログ・ボックスを開く。
5.使用したいエディタ(たとえば、Notepad)の場所まで移動し、そのエディタを選択する。OKをクリックしてダイアログ・ボックスを消す。ラプソディによりプロパティ値フィールドにそのパスが入る。
6.OKをクリックしてダイアログ・ボックスを消す。
ラプソディ(Rhapsody)は、モデルごとに、属性および関係に対するsetter操作とgetter操作、イニシャライザ操作とクリーンアップ操作、およびstartBehavior()と呼ばれる操作を提供する。ただし、ラプソディ(Rhapsody)がこれらの自動生成された操作をブラウザに表示するのは、(CG::CGGeneralの下の)GeneratedCodeInBrowserプロパティがTrueに設定されている場合だけである。このプロパティを変更し、コードを再生成すると、自動生成された操作をブラウザに表示することができる。
ラウンドトリップは、ラプソディ(Rhapsody)が以前に生成したUMLコードが変更されたときに、その変更に基づいてモデルを更新する処理である。ラウンドトリップをバッチ・モードでアクティブにするには、ファイル・システム内でコードを更新し、モデルを明示的に同期させる。また、ラウンドトリップをオンライン(オン・ザ・フライ)・モードでアクティブにするには、いずれかのラプソディ(Rhapsody)指定ビューの中でモデルを変更する。
ラプソディ(Rhapsody) UIを介してモデルを変更すると、その変更に対応するように動的モデル/コード結合(DMCA)がモデルのコードを変更する。逆に、モデルのコードを直接編集すると、その編集結果に対応するようにDMCAがモデルを再描画する。このようにして、ラプソディ(Rhapsody)は、モデルとコードとの間の緊密な関係およびトレーサビリティ(追跡可能性)を維持する。つまり、コードはモデルの別の姿である。
・Bidirectional(双方向性)−変更が双方向で自動的に処理される。すなわち、モデルを変更すると、新しい、更新されたコードが生成され、コードを直接編集すると、その編集結果がラプソディ(Rhapsody)モデルに自動的に反映される。
・Code Generation(コード生成)−モデルを変更すると新しいコードが自動的に生成されるが、コードを編集してもモデルは自動的には変更されない。
・Roundtripping(ラウンドトリップ)−コードを直接変更するとその結果がラプソディ(Rhapsody)モデルに反映されるが、モデルを変更しても新しいコードが自動的には生成されない。ラウンドトリップできるのは、ラプソディ(Rhapsody)によって以前に生成されたコードだけである。すなわち、ラプソディ(Rhapsody)によって以前に生成されたコードに限り、そのコードを編集して、その変更をモデルに組み込むことができる。詳細については、「ラウンドトリップ処理」の項を参照されたい。
・None(否)−DMCAが無効である。
・rhapsody.iniファイルのModelCodeAssociativityMode
・General::Modelの下のModelCodeAssociativityFineTune
ソース・ファイルを直接変更し、Code > Generate Codeを選択すると、ラプソディにより、コードをラウンドトリップするよう求められる。このセクションでは、ラウンドトリップ手続きにおけるオプションについて説明する。
自動ラウンドトリップ(Bidirectional設定またはRoundtripping設定)を選択した場合は、次のいずれかを行うと、コードの変更に合わせてモデルが自動的に更新される。
・フォーカスをCode Viewウィンドウから別のウィンドウに移す。
・編集中のファイルを保存する。
・Code Viewウィンドウを閉じる。
・Code > Roundtripを選択する。変更した要素についてコードがラウンドトリップされる。
・Code > Force Roundtripを選択する。すべての要素についてコードがラウンドトリップされる。
コンフィグレーション内の変更されたすべてのクラスをラウンドトリップするには、Code > Roundtrip > <現在のコンフィグレーション(current_config)>を選択する。
1.OMDで、それらのクラスを左クリックする。
2.Code > Roundtrip > Selected classesを選択するか、それらのクラスを右クリックして、ポップアップ・メニューからRoundtripを選択する。
ステートチャートで操作およびアクションとして入力された手続き的な振る舞いであるラウンドトリップのために、コード・セグメントを変更することができる。
... generated code
//#[ セグメント型 セグメント識別子
C++ code you entered
//#]
... generated code continues
これらのコード・セグメントはすべて、実装ファイル内にある。
・静的リアクション
//#[ リアクション リアクションID
// このコードは修正可能
someReactionCode();
// //#] 記号の先は修正しない
//#]
・出口アクション
//#[ exitAction ROOT.idle.(入力)
someExitAction();
//#]
・入口アクション
//#[ entryAction ROOT.idle.(入力)
someEntryAction();
//#]
・遷移アクション
//#[ 遷移 遷移ID
someTransitionCode();
//#]
プリミティブ操作(手続き的な振る舞い)
//#[ operation doit()
someOperationCode();
someMoreOperationCode();
//#]
ラプソディ(Rhapsody)では、コードをラウンドトリップするために、コード・ジェネレータが実装ファイルに挿入した特別な注釈を使用する。これらの注釈には、プレフィックス「//#」が含まれる。これらの注釈を編集または削除すると、ラプソディ(Rhapsody)はコードをトレースしてモデルに反映することができない。
1.損なわれたファイルの名前を変更する。
2.このクラスのコードを再生成する。これにより、正しい注釈を有する新しいファイルが生成される。
3.損なわれたファイルから、新しく生成されたファイルに変更内容をコピーする。
4.ラウンドトリップを再試行する。
ファイル<ファイル名>が外部から変更されています。ラウンドトリップしますか?
ファイルの内容を変更した場合は、ラウンドトリップにより、修正内容をモデルに加えなければならない。Yesを選択すると、ラウンドトリップが確定される。モデルが更新され、生成されたコードは、手動の変更内容を反映したものになる。
一般に、ラウンドトリップできるコンポーネントは以下のとおりである。
・クラスおよびクラスの集約(テンプレート・クラス、型、ネストされたクラス)
・クラス要素(属性、プリミティブ操作の本体、引数、型)
・クラス・メンバ関数(名前、戻り型、引数)
・グローバル要素(関数、変数、型、テンプレート関数)
・パッケージ
・遷移ラベル上に配置されたアクション
・状態内部に配置されたアクション:入口に、出口に、または静的リアクションとして)
・注釈内のコード
・あらかじめコンパイルされた命令、#define
依存、継承、ステレオタイプ、状態、遷移、あらかじめコンパイルされた命令(#pragma、マクロ)、ファイルのヘッダ情報及びフッタ情報、およびファイル・マッピングに対して行われた変更については、ラウンドトリップがサポートされない。また、ラプソディ(Rhapsody)識別子でサポートされていないデータ(たとえば、可変データや揮発性データ)に対して行われた変更についてもサポートされない。
次の表は、クラス実装ファイルでの、ラウンドトリップが可能な変更のリストである。
ラプソディ(Rhapsody)は、パッケージ実装ファイル内の関数の引数名の変更をラウンドトリップする。ただし、引数型の変更はラウンドトリップされない。この名前を変更すると、この引数の記述が失われる。
1..hファイルまたは.cppファイルからその要素を削除する。
2.<Shift>キーを押したまま、フォーカスを.cppファイルまたは.hファイルに切り替える。
3.2番目のファイルから要素を削除する。
1..hファイルまたは.cppファイルからその要素を削除し、このファイルを保存する。
2..cppファイルまたは.hファイルからその要素を削除し、このファイルを保存する。
ラプソディ(Rhapsody)は、ラウンドトリップを制御するプロパティを多数含む。それらは、<lang>_Roundtripで指定される(<lang>はプログラミング言語)。
たとえば、Rhapsody in Cでは、これらのプロパティはC_Roundtripにある。Rhapsody in C++では、CPP_Roundtripにある。
以下の理由でファイルが重複する場合がある。
・ファイルにマッピングされた要素が削除されたか、名前変更された。
・コンポーネントの範囲内で変更が行われた。
・ファイルへの要素のマッピングが変更された。
コンフィグレーションの作成のときに、アクタのコードを生成するよう選択できる(第12章の「コンフィグレーションの機能の定義(Defining Features of a Configuration)」の項を参照されたい)。アクタのコードを生成するようアクティブ・コンフィグレーションを設定すると、ラプソディ(Rhapsody)がアクタ・コードを、システムの他の部分と同じライブラリまたは実行可能ファイルに生成、コンパイル、およびリンクする。これにより、システム・テストの間じゅうアクタを使用して、システムに対する入力および応答をシミュレートできるようになる。
クラスには、ラプソディ(Rhapsody)がアクタとクラスとの間の関係および依存についてコードを生成すべきかどうかを決定するコード生成プロパティがある。
1.ブラウザでそのコンポーネントを右クリックし、ポップアップ・メニューからFeaturesを選択する。
2.Initializationタブを選択する。
3.Initial Instancesで、そのコンポーネントに関与させるアクタを選択する。
4.Generate Code for Actorsが選択されていることを確認する。
アクタの作成方法にはいくつかの制限があり、これがコード生成に影響を及ぼす。その制限は以下のとおりである。
・OMD上では、アクタをコンポジットとして指定できない。したがって、ラプソディ(Rhapsody)は、そのコンポーネント間の関係を初期設定するコードを生成しない。
・アクタのベースは別のアクタでなければならない。クラスのベースは別のクラスでなければならない。
・アクタは、ネストされたアクタだけを埋め込むことができる。クラスは、ネストされたクラスだけを埋め込むことができる。
・アクタの名前は、クラス名のコード標準に適合していなくてもよい。ただし、アクタ名が不正な場合(すなわち、コンパイル可能な名前でない場合)は、コード生成の際にエラーが生成される。
コンポーネント図には、以下のコード生成セマンティクス(意味論)が適用される。
・コード生成は、ライブラリ・ビルド・タイプおよび実行可能ビルド・タイプのコンポーネントに対して行われる。
・コード生成は、フォルダ・コンポーネントおよびファイル・コンポーネントに関連するメタタイプに対して行われる。
・コードは、バイナリ・コンポーネント(ライブラリおよび実行可能ファイル)間の関係に関してのみ生成される。
・コンポーネント図の以下の部分はコード生成を行わない。
−コンポーネントによって実現されるインターフェース
−ステレオタイプ化された<<Library>>または<<Executable>>ではない、他のすべてのコンポーネント・タイプ
・コンポーネント間の依存は、以下の規制および制限の下で、<<Usage>>ステレオタイプを有する場合のみコードを生成する。
・関連コンポーネント内で要素のファイル名を探す(要素が現在のコンポーネントの範囲内にない場合)。
・関連コンポーネントをメイクファイルのインクルード・パスに追加する。たとえば、component_1メイクファイル内で、component_2の場所を含むインクルード・パスに対して新しい行が追加される。
・現在のコンポーネントのビルド・タイプが実行可能ファイルであり、関連コンポーネントのビルド・タイプがライブラリの場合は、現在のコンポーネントのビルドにライブラリを追加する。たとえば、component_1のビルド・タイプが実行可能ファイルであり、component_2のビルド・タイプがライブラリであれば、component_1メイクファイルは、component_2のライブラリをそのビルドに含める。
ラプソディ(Rhapsody)の、いくつかのプロパティでは、パッケージ・インスタンスの初期設定後で、かつ、これらのインスタンスがイベントに反応する前に、パッケージ関係を初期設定するコードを指定することができる。より一般的に言うと、これらのプロパティにより、モデル内のパッケージごとに、他の任意の初期設定コードを特定することができる。それらのプロパティにより、パッケージ関係に関与している任意のパッケージや、パッケージ関係に関与していないパッケージによるクロスパッケージ関係を初期設定することができる。
・CG::Package::AdditionalInitializationCode−パッケージinitRelations()メソッドの実行後に実行する追加的初期設定コードを指定する。
・CG::Component::InitializationScheme−初期設定を行うレベルを指定する。とりうる値は以下のとおりである。
class DefaultComponent {
private:
P1_OMInitializer
initializer_P1;
P2_OMInitializer
initializer_P2;
};
P1パッケージ・コードは以下のとおりである。
P1_OMInitializer::P1_OMInitializer() {
P1_initRelations();
< P1 AdditionalInitializationCode value>
P1_startBehavior();
}
以下は、InitializationSchemeプロパティがByComponentに設定されている場合に生成されたC++コンポーネント・コードの例である。
DefaultComponent::DefaultComponent() {
P1_initRelations();
P2_initRelations();
< P1 AdditionalInitializationCode value>
< P2 AdditionalInitializationCode value>
P1_startBehavior();
P2_startBehavior();
}
このセクションでは、モデルがどのようにコードにマッピングされるか、およびモデル・マッピングをどのように制御できるかを含め、生成されたコードの構造について説明する。生成されたソース・コードは、モデル要素のほかに、注釈と、インストルメンテーション・マクロ(装備されている場合)を含む。
クラス・ヘッダ・ファイルには以下のセクションが含まれる。
・プロローグ
・前方宣言
・インストルメンテーション
・仮想継承とプライベート継承
・ユーザ定義の属性および操作
・可変長引数並び(リスト)
・関係情報
・ステートチャート実装
・イベント・インターフェース
・シリアル化インストルメンテーション
・状態クラス
プロローグ・セクションは、フレームワーク・ファイルと、ヘッダ・ファイルまたはフッタ・ファイル(適用可能な場合)を含む。
<lang>_CG::Class/Package::SpecIncludesプロパティを使用して新たなインクルード・ファイルを追加することができる。これは、ラプソディ(Rhapsody)設計に含まれないモジュールへの依存を作成するときに必要になる場合がある。
例:
#ifndef class_H
#define class_H
#include <oxf/oxf.h> // フレームワーク・ヘッダ・ファイル
//------------------------------------------------------
// class.h
//------------------------------------------------------
ヘッダ・ファイルのこのセクションは、すべての関連クラスに対する前方宣言を含む。これらは、モデル内で指定された、クラスと他のクラスとの関係に基づく。
class forwarded-class1;
class forwarded-class2;
class class : public OMReactive {
// クラス定義、およびフレームワーク・クラスからの継承(必要な場合!)
//
インストルメンテーションを用いてコンパイルした場合は、システムのランタイム状態に関する情報がインストルメンテーション・マクロからアニメーションにもたらされる。
DECLARE−META // クラスのインストルメンテーション
仮想継承を用いると、サブクラスは、複数の継承を経て、共通アンセスタから1組のメンバだけを継承する。
class B : virtual public A {...};
プライベート継承を用いると、サブクラスは、スーパクラスのパブリック・メンバだけを継承する。継承されたメンバは、サブクラス内でプライベートになる。
class B : private A {...};
このセクションでは、すべての操作および属性データ・メンバが定義される。このセクションのコードは、クラスの操作および属性の直接変換である。これを制御するには、モデルに対して操作および属性を追加または削除する。
//// ユーザの明示的なエントリ ////
public :
//## operation
op1() // 操作の注釈
void
op1();
// 操作の定義
protected :
// 属性:
//## attribute
attr1 // 属性の注釈
attrType1
attr1; // 属性の定義
//// ユーザの暗黙的なエントリ
////
public :
// コンストラクタとデストラクタ:
class(OMThread* thread =
theMainThread);
virtual〜class();
// 生成されたデストラクタ
可変長引数並び(...)を、操作の最後の引数として追加するには、その操作のPropertiesダイアログ・ボックスを開き、CG::Operation::VariableLengthArgumentListプロパティをTrueに設定する。
void foo(int i,...) ;
ヘッダ・ファイルのこのセクションは、モデル内で定義されているクラスのすべての関係を含む。必要に応じて、データ・メンバや、関係を操作する1組のアクセッサ関数およびミューテータ関数を含む。
OMIterator<rclass1*> getrelation1()const;
void
addrelation1(rclass* p);
void removerelation1(rclass*
p);
void clearrelation1();
protected :
//
OMCollection<rclass*> relation1;
attrType1
getattr1()const;
void
setattrType1(attrType1 p);
ヘッダ・ファイルのこのセクションは、クラスのステートチャート動作のデータ・メンバおよび関数定義を含む。このセクションの内容は、ステートチャートの実装ストラテジによって異なる。このセクションは、以下のいずれかの方法で制御できる。
・ステートチャート実装ストラテジを再利用可能からフラットに変更する。
・ステートチャートのコード生成を無効にする。
//// フレームワーク・エントリ
////
public :
State*
state1; //状態変数
State* state2;
void
rootStateEntDef(); //初期遷移メソッド
//
int
state1Takeevent1(); //イベント・テイカ
int state2Takeevent2();
private :
void
initRelations(); //フレームワーク・メンバを初期設定
//するためにInitRelations
//またはInitStatechart
//が生成される。
void
cleanUpRelations(); //破壊されたフレームワーク・メンバを
//クリーンアップするために
//CleanupRelationsまたは
//CleanupStatechartが
//生成される。
コードのこのセクションは、クラスで消費されたイベントを示す。これはドキュメンテーション専用である。イベントはすべて、OMReactiveにある共通インターフェースを介して処理されるからである。このセクションは、イベント処理を自力で実装したい場合に有用である。
//// 消費されたイベント
////
public :
// イベント群:
// event1
// event2
コード生成がイベント内の配列タイプをサポートすることに注意されたい。次のGEN()を作成することが可能である。
この呼び出しにおいて、Eは次のように定義される。
class E : public OMEvent {
Char message[13];
};
インストルメンテーションを含めると、次のインストルメンテーション・マクロがヘッダ・ファイルに含まれる。
DECLARE_META_EVENT
};
これは、アニメーションのシリアル化サービスを実装するメソッド定義まで拡張される。
この状態は、クラスのステートチャートを構成する状態クラスを定義する。状態クラスは、再利用可能な状態実装ストラテジで生成される。
class state1 : public ComponentState {
public :
// 状態クラス実装
};
class state2 : public Orstate {
public :
// 状態クラス実装
};
#endif
フラットな実装ストラテジを選択することによって状態クラスを排除できる。この場合、状態は列挙型としてマニフェストされる。
クラス実装ファイルは、仕様ファイルで定義されたメソッドの実装を含む。さらに、クラス実装ファイルは、インストルメンテーション・マクロ及び注釈を含む。前述したとおり、インストルメンテーション・マクロと注釈のいずれかを排除または変更すると、モデルとコードとの間のトレースおよび機能性を妨げる可能性がある。
生成されたファイルに対し、独自のヘッダおよびフッタを定義できる。詳細については、「プロパティ参照ガイド(Properties Reference Guide)」を参照されたい。
実装ファイルのプロローグ・セクションは、すべての関連クラスのヘッダ・ファイルを含む。C_およびCPP::Class/Package::ImpIncludesプロパティを用いて、新たな#includeファイルを追加できる。このプロパティの詳細については、「プロパティ参照ガイド(Properties Reference Guide)」を参照されたい。
//## package package
//## class class
#include "class.h"
#include <package.h>
#include <rclass1.h>
#include <rclass2.h>
//-------------------------------------------------------
//class.cpp
//-------------------------------------------------------
DECLARE_META_PACKAGE(Default)
#define op1_SERIALIZE
各クラスに対し、デフォルトのコンストラクタとデストラクタが生成される。新たなコンストラクタ(群)を明示的に指定したり、新たなコンストラクタ(群)をモデルに明示的に追加してデフォルトのコンストラクタまたはデストラクタを無効にしたりできる。
class::class(OMThread* thread) {
NOTIFY_CONSTRUCTOR(class, class(), 0,
class_SERIALIZE);
setThread(thread);
initRelations();
};
状態を定義する場合は、initRelationsの代わりにinitStatechartを用いる。
class::〜class() {
NOTIFY_DESTRUCTOR(〜class);
cleanUpRelations();
};
同様に、状態を定義する場合は、cleanUpRelationsの代わりにcleanUpStatechartを用いる。
以下のコード・パターンは、すべてのプリミティブ(ユーザ定義)操作に対して作成される。
void class::op1() {
NOTIFY_OPERATION(op1,
op1(), 0, op1_SERIALIZE);
//インストルメンテーション
//#[ operation
op1() // 入力した、操作の注釈本体
//
//#]
};
アクセッサとミューテータは、クラスの各属性および関係に対して自動的に生成される。それらの内容および生成は、関係プロパティと属性プロパティを設定することによって制御できる。
attr1Type class::getattr1()const {
return attr1;
};
void class::setattr1(attr1type p) {
attr1 = p;
};
OMIteratorrclass*
class::getItsrclass()const {
OMIteratorrclass*
iter(itsrclass);
return iter;
};
void Referee::_addItsRclass(Class* p_Class)
{
NOTIFY_RELATION_ITEM
ADDED("itsRClass",p_Class,
FALSE, FALSE);
itsRclass->add(p_Class);
};
void class::removeItsrclass(rclass* p) {
NOTIFY_RELATION_ITEM_REMOVED();
rclass.remove(p);
};
void class::clearItsPing() {
};
このセクションは、アニメーションで使用されるインストルメンテーション・マクロとシリアル化ルーチンを含む。
void class::serializeAttributes()const {
// 属性をシリアル化する
};
void class::serializeRelations()const {
// 関係をシリアル化する
};
IMPLEMENT_META(class, FALSE)
IMPLEMENT_GET_CONCEPT(state)
これらのメソッドは、状態、イベント、および遷移の動作を実装する。これらは、ステートチャートに基づいて合成される。クラスのCG::Attribute/Event/File/Generalization/Operation/Relation::Generateプロパティをfalseに設定すると、それらは生成されない。
int class::state1Takeevent1() {
int res = eventNotConsumed;
SETPARAMS(hungry);
NOTIFY_TRANSITION_STARTED("2");
Transition code
NOTIFY_TRANSITION_TERMINATED("2");
res = eventConsumed;
return res;
};
これらのメソッドは、フレームワーク関連の初期設定およびクリーンアップを実装する。
void class::initRelations() {
state1 = new
state1Class(); //状態を作成する
};
void class::cleanUpRelations() {
};
このセクションは、各状態オブジェクトのディスパッチ・メソッドとコンストラクタを実装する。これは、状態クラスを生成しない、フラットな実装ストラテジを選択することによって変更できる。
class_state1::class_state1(class* c, State*
p,
State* cmp) :
LeafState(p, cmp) {
// 状態コンストラクタ
};
int class_state1::takeEvent(short id)
{
int res =
eventNotConsumed;
switch(id) {
case event1_id: {
res = concept->state1Takeevent1();
// 遷移メソッドのディスパッチ
break;
};
};
};
操作を#ifdefと#endifのペアでラップするか、コンパイラ固有のキーワードを追加するか、#pragma命令を追加する必要がある場合は、その操作のSpecificationProlog、SpecificationEpilog、ImplementationProlog、ImplementationEpilogの各プロパティを設定できる。
・SpecificationPrologを#ifdef _DEBUGに設定する。
・SpecificationEpilogを#endifに設定する。
・ImplementationPrologを#ifdef _DEBUGに設定する。
・ImplementationEpilogを#endifに設定する。
ラプソディ(Rhapsody)で作成されたクラスに対する演算子をオーバーロードできる。たとえば、Stackクラスに対しては、「+」演算子を、自動的にpush()操作を実行するようにオーバーロードでき、「−」演算子を、自動的にpop()操作を実行するようにオーバーロードできる。
Attributes:
double imag;
double real;
Operations:
Complex()
//単純なコンストラクタ
Body:
{
real = imag = 0. 0;
}
Complex(const
Complex& c) //コピー・コンストラクタ
Arguments:const
Complex& c
Body:
{
real = c.real;
imag = c.imag;
}
Complex(double r, double
i) //変換コンストラクタ
Arguments: double
r
double i = 0.0
Body:
{
real = r;
imag = i;
}
operator-(Complex
c) //減算
Return type: Complex
Arguments: Complex c
Body:
{
return Complex(real -c.real, imag - c.imag);
}
operator[](int
index) //配列サブスクリプト
Return type:
Complex&
Arguments: int
index //ダミー演算子(インストル
//メンテーション・チェック
//専用)
Body:
{
return *this;
}
operator+ (Complex&
c) // 値の追加
Return type: Complex
Arguments: Complex&
c
Body:
{
return Complex(real + c.real,imag + c.imag);
}
operator+(Complex*
c) // 参照の追加
Return type: Complex*
Arguments: Complex *c
Body:
{
cGlobal = new Complex (real + c->real,
imag + c->imag);
return cGlobal;
}
operator++()
// プレフィックスのインクリメント
Return type:
Complex&
Body:
{
real += 1.0;
imag += 1.0;
return *this;
}
operator=(Complex&
c) // 値の代入
Return type:
Complex&
Arguments: Complex&
c
Body:
{
real = c.real,
imag = c.imag;
return *this;
}
operator=(Complex*
c) // 参照の代入
Return type: Complex*
Arguments: Complex *c
Body:
{
real = c->real;
imag = c->imag;
return this;
}
以下、これらのオーバーロードされた演算子の生成されたコードの例をいくつか示す。
Complex& Complex::operator++() {
NOTIFY_OPERATION(operator++,
operator++(), 0,
operator_SERIALIZE);
//#[ operation
operator++()
real += 1.0;
imag += 1.0;
return *this;
//#]
};
これは、オーバーロードされた+演算子の生成されたコードである。
Complex Complex::operator+(Complex& c)
{
NOTIFY_OPERATION(operator+,
operator+(Complex&), 1,
OM_operator_1_SERIALIZE);
//#[ operation
operator+(Complex&)
return Complex(real +
c.real, imag + c.imag);
//#]
};
これは、最初のオーバーロードされた代入演算子の生成されたコードである。
Complex&
Complex::operator=(Complex& c) {
NOTIFY_OPERATION(operator=, operator=(Complex&), 1,
OM_operator_2_SERIALIZE);
//#[ operation
operator=(Complex&)
real = c.real;
imag = c.imag;
return *this;
//#]
};
ブラウザには、3つのComplexクラスをインスタンス化するコンポジットであるMainClassがリストされる。
Complex* c1
Complex* c2
Complex* c3
その操作は以下のとおりである。
〜MainClass()
// デストラクタ
Body
{
delete c1;
delete c2;
delete c3;
}
e()
// イベント
ストリーム出力演算子<<は、これを用いようとするクラスに対するフレンドとして宣言されなければならないグローバル関数である。これは以下のように定義される。
operator<<
Return type: ostream&
Arguments: ostream& s
Complex& c
Body:
{
s << "real
part = " "<< c.real<<
"imagine part = " << c.imag << "\n" <<
flush;
return s;
}
種々のコンストラクタおよびオーバーロードされた演算子を、それらが呼び出されるときに監視するには、以下を行う。
1.Code > Set Configuration > Edit > Setting tabを選択して、プロジェクトにアニメーション・インストルメンテーションを割り当てる。
2.DefaultConfig.exeを作って実行する。
3.アニメータを用いて、MainClassとインスタンスComplex [0]:Complex、Complex [1]:Complex、およびComplex [2]:Complexを含む、アニメートされたシーケンス図(ASD)を作成する。
4.AnimationバーのGoをクリックして、MainClassとそのパート・インスタンスとの間で渡される、コンストラクタおよびオーバーロードされた演算子のメッセージを監視する。
ラプソディ(Rhapsody)では、ユーザが自分で管理する匿名インスタンスを作成したり、コンポジット・フレームワークで管理されるコンポジット・インスタンスのコンポーネントとしてインスタンスを作成したりできる。
匿名インスタンスを作成し、従来の任意のC++プログラムと同様に、C++の新しい演算子を適用することができる。ラプソディ(Rhapsody)は、システム内のすべてのクラスについて、デフォルトのコンストラクタ(ctor)を生成する。ユーザは、ブラウザを用いて、新たなコンストラクタを追加できる。
A *a = new A();
リアクティブ・クラスおよびコンポジット・クラスの場合、デフォルトのコンストラクタは、デフォルトでシステムのメイン・スレッドに設定されるスレッド・パラメータをとる。インスタンスを、システムのメイン・スレッドではなく特定のスレッドに関連付けるには、このパラメータを明示的にコンストラクタに渡す必要がある。
A *a = new A(T);
新しいインスタンスを作成したら、通常は、その関係ミューテータを呼び出して、それをそのピアに接続することになる(「関係を使用する」の項を参照されたい)。クラスがリアクティブであれば、通常は、そのstartBehavior()メソッドを次に呼び出すことになる。
Philosopher *pPhil = sys−>newPhil();
新しいインスタンスを作成したら、通常は、その関係ミューテータを呼び出して、それをそのピアに接続することになる。クラスがリアクティブであれば、通常は、そのstartBehavior()メソッドを次に呼び出すことになる。
ラプソディ(Rhapsody)では、ユーザが自分で匿名インスタンスを管理する。したがって、それらを削除するのもユーザの責任である。コンポジット・インスタンスのコンポーネントは、コンポジットによって管理される。それを削除するには、コンポジット・オブジェクトの明示的な要求を行う必要がある。
delete aB;
コンポジットの各コンポーネントに対し、そのコンポーネントのインスタンスを削除する専用操作が存在する。
C−>deleteCompB(aB);
関係は、他のオブジェクトを参照するための基本的な手段である。関係は、コンテナ・クラスを用いてコードに実装される。ラプソディ(Rhapsody)フレームワークは、デフォルトで使用される1セットのコンテナ・クラスを含む。プロパティを用いて、このデフォルトを、たとえば、Standard Template Library (STL)(商標)コンテナを使用するように変更できる。詳細については、「プロパティ参照ガイド(Properties Reference Guide)」を参照されたい。
対1関係は、単純なポインタとして実装される。これらの扱いは、属性の扱いと非常によく似ている。すなわち、対1関係にもアクセッサ関数とミューテータ関数がある。
B* role;
これは次のメソッドを含む。
B* getRole();
void setRole(B* p_B);
これらのデフォルトは、そのロールのプロパティによって変更できる。詳細については、「プロパティ参照ガイド(Properties Reference Guide)」を参照されたい。
対多関係は、OMCollectionテンプレートを用いるポインタのコレクションによって実装される。
OMCollection<F*> role;
この関係を操作するために、次のメソッドがE内に生成される。
・この関係を最初から最後まで繰り返すには、次のアクセッサを用いる。
OMIterator<F*> getRole() const;
たとえば、関連付けられたFオブジェクトのそれぞれにイベントxを送るには、以下のコードを用いる。
OMIterator<F*>
iter(anE->getRole());
while(*iter)
{
*iter->GEN();
iter++;
}
このコードでは、anEがEのインスタンスである。
・コレクションにインスタンスを追加するには、次の呼び出しを用いる。
void addRole(F* p_F);
・コレクションからインスタンスを削除するには、次の呼び出しを用いる。
void removeRole(F* p_F);
・コレクションをクリアするには、次の呼び出しを用いる。
void clearRole();
これらのデフォルトは、そのロールのプロパティによって変更できる。詳細については、「プロパティ参照ガイド(Properties Reference Guide)」を参照されたい。
順序付き対多関係は、OMListテンプレートを用いるポインタのコレクションによって実装される。
好適化された対多関係は、関連クラス内の属性によって好適化された対多関係である。好適化された対多関係は、OMMapテンプレートを用いるポインタのコレクションによって実装される。
F* getRole(type key) const;
void addRole(type key, F* p_F);
void removeRole(type key);
ランダム・アクセス対多関係は、コレクション内のアイテムへのランダム・アクセスが可能であるよう拡張された対多関係である。
F* getRole(int i) const;
メモリに制約があり、過酷で、リアルタイムかつ安全性重視のアプリケーションでは、静的なアーキテクチャがよく用いられる。メモリ管理を行わないアプリケーションや、非決定性およびメモリ・フラグメンテーションによって問題が発生するアプリケーションを、ラプソディ(Rhapsody)は、(初期設定後の)実行中に汎用メモリ管理(即ち、ヒープ)機能をまったく用いないことによってサポートする。これは、安全性重視システムの典型的な要件である。
・イベント生成(暗黙的)−任意選択でローカル・ヒープによって解決される
・関係の追加−静的配列を用いて実装することにより解決される(動的コンテナは動的のまま)
・新しい演算子によるアプリケーション・オブジェクトの明示的作成−アプリケーションが実際にはオブジェクトを動的に作成する場合に、ローカル・ヒープによって解決される。
以下の表は、生成されたコードに対する静的アロケーションのコンフィグレーションを行うことができるいくつかのプロパティのリストである。これらのうちのいずれかのプロパティを、個々のインスタンスより高いレベルで設定すると、すべてのインスタンスについてデフォルトが設定される。たとえば、クラス・プロパティをコンポーネント・レベルで設定すると、すべてのクラス・インスタンスについてデフォルトが設定される。いずれの場合でも、インスタンスの実際の数が、宣言されている最大数を超えると、動作が定義されない。
ラプソディ(Rhapsody)は、ローカル・ヒープを用いる各イベントおよびクラスについてnew演算子とdelete演算子を再定義することによって、静的メモリ・アロケーションを実装する。メモリ・アロケータは、特定要素のn個のインスタンスを保持するのに十分なメモリを割り当てる(アロケートする)(nは、BaseNumberOfInstancesプロパティの値である)。メモリ・アロケーションは、システム構築中に実行され、動的メモリを使用する。メモリ・アロケータは、次のようなLIFO(スタック)アルゴリズムを用いる。
・要求されたメモリはスタックの最上位から取り出され、最上位ポインタが次のアイテムをポイントするよう移動する。
・返されたメモリはスタックの最上位に格納され、最上位ポインタが、返されたアイテムをポイントするよう移動する。
通常、ラプソディ(Rhapsody)は、1−to−MAX関係については、関係の種類(図で設定される)にかかわらず、値による束縛ではなく、参照による束縛を生成する。ただし、静的アーキテクチャ機能を用いれば、クラス・インスタンスおよびイベント・インスタンスの最大数を静的アーキテクチャ・プロパティで定義し、したがって、デフォルトの非決定的なnew()演算子を使用しないことによって、値による束縛の効果を実現することができる。
アプリケーションが静的メモリ・アロケーションを用いる場合は、チェッカが、以下の条件が満たされるかどうかを検証する。
・クラス・インスタンスの最大数がゼロでない。
・ステートチャート実装がフラットである。
・ローカル・ヒープを用いる各イベントおよびクラスについて、new演算子とdelete演算子が明示的に指定されている。
以下の制限が静的メモリ・アロケーションに適用される。
・配列のアロケーションはまだサポートされていない。インスタンスは1つずつアロケートされなければならない。これは、配列のアロケーションに関連するメモリ・オーバーヘッド(が不明)のためである。
・tm()タイムアウト関数はまだサポートされていない。
標準操作は、特定のフレームワークまたはプログラミング・スタイルによって標準化されたクラス操作である。顕著な例は、分散フレームワークの一部であるシリアル化メソッド(「例」の項を参照)と、コピー・コンストラクタまたは変換コンストラクタである。このような操作は、一般に、(属性、操作、スーパクラスなどの)クラス機能に集約関数を適用する。以下のセクションでは、クラスおよびイベントについて生成されたコードに標準操作を追加する方法を説明する。
以下のことを行うために標準操作を用いることができる。
・イベントをシリアル化するメソッドを作成する。
・クラスの標準形式をサポートする。
・クラスを永続的にする。
・特定のフレームワークをサポートする。
イベントは、通常、次の2つのステップで生成され、これらのステップは、ラプソディ(Rhapsody)フレームワークのGENマクロ内でカプセル化される。
1.Eventクラスがインスタンス化され、イベントへのポインタが生成される。
2.その新しいイベント・ポインタを受け側のイベント・キューに追加することによって、そのイベントがキューイングされる。
・同じホストにある、異なるプロセス間でイベントを送る場合。
・分散アプリケーション間でイベントを送る場合。
・送り側と受け側が、異なるメモリ・パーティションにマッピングされている場合。
すべてのクラスに含めるべき操作のリストが、多くのスタイル・ガイドや作成規約によって指定されている。よくある例は、コピー・コンストラクタ、変換コンストラクタ、代入演算子などである。ラプソディ(Rhapsody)では、これらのような標準操作をすべてのクラスに対して定義できる。
クラスを永続的にすることは、通常、あらかじめ定義されたシグネチャを有する操作をすべてのクラスに追加することによって実現される。これは、標準操作を用いて行うことができる。
多くのオブジェクト指向フレームワークは、基本クラスからサブクラスを抽出し、仮想操作を無効にすることによって、用いられる。たとえば、MFCコンストラクトは、CObjectクラスから継承され、次のような操作を無効にする。
virtual void Dump(CDumpContext& dc) const;
これは、標準操作を用いて行うことができる別の例である。
フレームワーク基本クラスの追加は、<lang>_CG::Class::AdditionalBaseClassesプロパティを用いて行うことができる。
標準操作はすべて、論理名に関連付けられている。標準操作の論理名を定義するには、StandardOperationsプロパティを無効にする。
・<論理名(LogicalName)>Declaration−操作宣言のテンプレートを指定する
・<論理名(LogicalName)>Definition−操作実装のテンプレートを指定する
たとえば、myOpという論理名に対し、(site.prpファイルまたはCOM API(VBA)を用いて)次のプロパティを追加できる。
Subject CG
Metaclass Class
Property myOpDeclaration MultiLine ""
Property myOpDefinition MultiLine ""
end
標準操作に関連付けられるすべてのプロパティを、それぞれのCGサブジェクトおよびメタクラスの下にあるsite.prpファイルに追加する。これらのプロパティはすべて、MultiLine型を含んでいなければならない。
テンプレートは、以下のキーワードを含むことができる。
・$Attributes−クラス内のすべての属性について、このキーワードは、その属性のプロパティCG::Attribute::<論理名(LogicalName)>で特定されるテンプレートの内容に置き換えられる。たとえば、<lang>_CG::Attribute::myOp。
・$Relations−クラス内のすべての関係について、このキーワードは、その関係のプロパティCG::Relation::<論理名(LogicalName)>で特定されるテンプレートの内容に置き換えられる。たとえば、<lang>_CG::Relation::myOp。
・$Base (visibility(視認性))−すべてのスーパークラス/イベントについて、このキーワードは、そのスーパークラス/イベントのプロパティCG::Class/Event::<論理名(LogicalName)>Baseで特定されるテンプレートの内容に置き換えられる。たとえば、CG::Class::myOpBase。
・$Arguments−クラス内のすべてのイベントについて、このキーワードは、そのイベントのプロパティCG::Event::<論理名(LogicalName)>Argsで特定されるテンプレートの内容に置き換えられる。たとえば、<lang>_CG::Event::myOpArgs。
・$Name−キーワードのコンテキスト(文脈)に応じて、クラス(属性、関係、操作、または基本クラス)のモデル名を指定する。適用可能であれば、$Typeは、このモデル要素に関連付けられた型となる。
・$ImplName−(生成された)コピーの名前を指定する。通常、これは、このモデル要素に関連付けられたデータ・メンバである。
これは、生成されたコードにおいて論理名をより複雑な名前に置き換えることができるRiCで有用である。
特定パッケージ内のすべてのイベントについてイベントのシリアル化を実装する必要がある場合は、そのパッケージのCG::Event::StandardOperationsプロパティに「serialize, unserialize」を含める。strstreamの内部にイベント引数値を配置してシリアル化を行うと、対応するプロパティとその値は以下のようになる。
CG::Event::SerializeDeclaration
public:
strstream & serializer(strstream & theStrStream) const;
CG::Event::SerializeDefinition
strstream & $Name::serialize(strstream
& theStrStream) {
$Base
$Arguments
return theStrStream;
}
CG::Event::SerializeArgs
theStrStream << $Name;
CG::Event::SerializeBase
$Name::serialize(theStrStream);
2つの引数であるseverityおよびpriorityを有するイベントVoiceAlarmを定義し、VoiceAlarmをAlarmから継承した場合、結果として、そのテンプレートのコードは以下のようになる。
strstream &
VoiceAlarm::serialize(strstream &
theStrStream) {
Alarm::serialize
(theStrStream);
theStrStream <<
severity;
theStrStream <<
priority;
return theStrStream;
}
unserialize部分についても同じ処理が行われる。
Java初期設定ブロックは、クラスをインスタンス化する前に、クラスで使用するネイティブ・ライブラリをロードするなどの初期設定を実行するために使用される。標準操作を用いると、以下のように、この言語コンストラクトにとって便利なエントリ・ポイントを備えることができる。
1.site.prpファイルを開き、以下のプロパティを追加する。
Subject CG
Metaclass Class
Property StandardOperations String "InitializationBlock"
end
end
2.siteJava.prpファイルを開き、以下のプロパティを追加する。
Subject JAVA_CG
Metaclass Class
Property InitializationBlockDeclaration MultiLine ""
end
end
3.初期設定ブロックを必要とするすべてのクラスについて、そのクラスのInitializationBlockDeclarationプロパティにテキストを入力する。たとえば、次のようになる。
static {
System.loadLibrary("MyNativeLib");
}
このテキストは、クラス宣言の下に入力される。
ラウンドトリップできることである。このため、手動で実行したコード変更が、コードの再生成によって失われることがない。DMCAにより、ユーザは、標準的なコード生成機能およびラウンドトリップ機能を利用してシステムの実装を即座に表示し、直接制御することができるので、動的モデル/コード結合は、前述のアプローチの優位性を押し進める重要な要素の1つである。
102 ソース・コード
108 インクリメンタル・コード・エディタ
401 モデル・コード・マネージャ
402 コード・ジェネレータ
403 リポジトリ更新/ラウンドトリップ
404 要素位置ファインダ
405 モデル要素
406 コンポーネント
407 リポジトリ
408 IMCA
409 生成されたファイル
410 アクティブ・コード・ビュー
411 コード・ビュー
412 テキスト・ファイル
413 ソース・ファイル
414 メイク・ファイル
415 スクリプト
700 コンピュータ
702 CPU
704 フロッピー・ドライブ
706 CD−ROM
708 ディスプレイ
710 キーボード
712 マウス
812 ROM
814 RAM
816 ディスク・コントローラ
818 ハード・ドライブ
820 ディスプレイ・インターフェース
822 通信ポート
824 インターフェース
Claims (29)
- コンピュータに実装され、ソース・コードを、該ソース・コードを表している、複数のモデル要素に関連付ける方法において、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成するステップと、
前記モデルの前記複数の要素に対応する前記ソフトウェア・ソース・コードを生成するステップと、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付けるステップと、
前記複数の要素の少なくとも1つが修正されていることを確認するステップと、
前記ソフトウェア・ソース・コードの一部分および前記ソフトウェア・ソース・コード全体のうちの少なくとも一方を修正して、前記修正されている複数の要素の前記少なくとも1つまたは複数に対応させるステップと
を具備することを特徴とする方法。 - 前記修正されているソース・コードの、少なくとも一部分を表示するステップをさらに具備することを特徴とする請求項1記載の方法。
- 前記モデル要素の少なくとも一部分がブラウザの第1の表示領域に表示され、前記修正されたソース・コードの少なくとも一部分が前記ブラウザの第2の表示領域に表示されることを特徴とする請求項1記載の方法。
- 前記ソース・コードの特定の行番号が前記モデル要素に関連付けられることを特徴とする請求項3記載の方法。
- 前記第1および第2の表示領域がフレームを具備することを特徴とする請求項3記載の方法。
- 前記ソース・コードの特定の行番号が前記モデル要素に関連付けられることを特徴とする請求項1記載の方法。
- 前記モデル要素が統一モデリング言語(UML)モデル要素であることを特徴とする請求項1記載の方法。
- 前記UML要素が、クラス図、オブジェクト図、ユースケース図、状態図、シーケンス図、アクティビティ図、コラボレーション図、コンポーネント図、および配置図のうちの少なくとも1つを含むことを特徴とする請求項7記載の方法。
- コンピュータに実装され、ソース・コードを、該ソース・コードを表している、複数のモデル要素に関連付ける方法において、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成するステップと、
前記モデルの前記複数の要素に対応する前記ソフトウェア・ソース・コードを生成するステップと、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付けるステップと、
前記ソフトウェア・ソース・コードの少なくとも一部分が修正されていることを確認するステップと、
前記複数のモデル要素の前記少なくとも1つを修正して、前記修正されているソフトウェア・ソース・コードに対応させるステップと、
前記ソフトウェア・ソース・コードが前記修正されたモデルと合致するように、所定の規則に従って前記ソフトウェア・ソース・コードの一部分および前記ソフトウェア・ソース・コード全体のうちの少なくとも一方を再生成するステップと
を具備することを特徴とする方法。 - 前記修正されているソフトウェア・ソース・コードの、少なくとも一部分を表示するステップをさらに具備することを特徴とする請求項9記載の方法。
- 修正されている前記モデルの前記複数の要素の少なくとも1つを表示するステップをさらに具備することを特徴とする請求項10記載の方法。
- 前記複数のモデル要素の少なくとも1つがブラウザの第1の表示領域に表示され、前記修正されたソフトウェア・ソース・コードの少なくとも一部分が前記ブラウザの第2の表示領域に表示されることを特徴とする請求項11記載の方法。
- 前記ソフトウェア・ソース・コードの特定の行番号が前記複数のモデル要素の少なくとも1つに関連付けられることを特徴とする請求項12記載の方法。
- 前記第1および第2の表示領域がフレームを含むことを特徴とする請求項12記載の方法。
- 前記ソース・コードの特定の行番号が前記モデル要素に関連付けられることを特徴とする請求項11記載の方法。
- 前記モデル要素が統一モデリング言語(UML)モデル要素であることを特徴とする請求項11記載の方法。
- 前記UML要素が、クラス図、オブジェクト図、ユースケース図、状態図、シーケンス図、アクティビティ図、コラボレーション図、コンポーネント図、および配置図のうちの少なくとも1つを含むことを特徴とする請求項16記載の方法。
- コンピュータ可読媒体上に存在するコンピュータ・プログラム製品において、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成することと、
前記モデルの前記複数の要素に対応するソフトウェア・ソース・コードを生成することと、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付けることと、
前記モデルの前記複数の要素の少なくとも1つが修正されていることを確認することと、
前記ソース・コードの一部分とソース・コード全体の少なくとも一方を修正して、前記1つまたは複数の修正されたモデル要素に対応させることと
をコンピュータに実行させる命令を具備することを特徴とするコンピュータ・プログラム製品。 - 前記修正されているソース・コードの、少なくとも一部分を前記コンピュータに表示させる命令をさらに具備することを特徴とする請求項18記載のコンピュータ・プログラム製品。
- コンピュータ可読媒体上に存在するコンピュータ・プログラム製品において、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成することと、
前記モデルの前記複数の要素に対応するソフトウェア・ソース・コードを生成することと、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付けることと、
前記ソフトウェア・ソース・コードの少なくとも一部分が修正されていることを確認することと、
前記複数のモデル要素の前記少なくとも1つを修正して、前記修正されているソフトウェア・ソース・コードに対応させることと、
前記ソフトウェア・ソース・コードが前記修正されたモデルと合致するように、所定の規則に従って前記ソフトウェア・ソース・コードの一部分および前記ソフトウェア・ソース・コード全体のうちの少なくとも一方を再生成することと
をコンピュータに実行させる命令を具備することを特徴とするコンピュータ・プログラム製品。 - 前記修正されているソース・コードの、少なくとも一部分をコンピュータに表示させる命令をさらに具備することを特徴とする請求項20記載のコンピュータ・プログラム製品。
- ソフトウェア・プロジェクトにおいて、ソース・コードのドキュメントを生成するためのデータ処理システムにおいて、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成する手段と、
前記モデルの前記複数の要素に対応するソフトウェア・ソース・コードを生成する手段と、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付ける手段と、
前記モデルの前記複数の要素の少なくとも1つが修正されていることを確認する手段と、
前記ソフトウェア・ソース・コードの一部分とソフトウェア・ソース・コード全体の少なくとも一方を修正して、1つまたは複数の前記修正されたモデル要素に対応させる手段と
を具備することを特徴とするデータ処理システム。 - 前記修正されているソース・コードの、少なくとも一部分を表示する手段をさらに具備することを特徴とする請求項22記載のデータ処理システム。
- コンピュータに実装され、ソース・コードを、該ソース・コードを表している、モデルの複数の要素に関連付ける方法において、
ソフトウェア・ソース・コードとして実装できる、モデルの複数の要素を生成するステップと、
前記モデルの前記複数の要素に対応するソフトウェア・ソース・コードを生成するステップと、
前記ソフトウェア・ソース・コードの部分を、前記モデルの前記複数の要素の少なくとも1つに関連付けるステップと、
前記ソフトウェア・ソース・コードの少なくとも一部分が修正されていることを確認するステップと、
前記複数のモデル要素の前記少なくとも1つを修正して、前記修正されているソフトウェア・ソース・コードに対応させるステップと、
前記ソフトウェア・ソース・コードが前記修正されたモデルと合致するように、所定の規則に従って前記ソフトウェア・ソース・コードの一部分とソフトウェア・ソース・コード全体の少なくとも一方を再生成するステップと
を具備することを特徴とする方法。 - 前記修正されているソース・コードの、少なくとも一部分を表示するステップをさらに具備することを特徴とする請求項24記載の方法。
- ソース・コードを、該ソース・コードを表している、モデルの複数の要素に関連付けるためのシステムにおいて、
モデル・リポジトリに保存されている要素と、要素に関連付けられているソース・コードとのうちの少なくとも一方に対する変更を検出または決定するためのモデル・コード・マネージャと、
前記モデル・リポジトリに保存されている修正された要素及び関連付けられたすべての要素のうちの少なくとも一方に対応するコードを生成するコード・ジェネレータと、
既存の関連付けられた要素を更新することと、修正されたソース・コードに対応する新しい要素を少なくとも1つ生成することとの、少なくとも一方を行うモデル更新ジェネレータと
を具備することを特徴とするシステム。 - 特定の要素に対応する、少なくとも一部のソース・コードを検出する要素ファインダをさらに備えることを特徴とする請求項26記載のシステム。
- 選択された要素の対応するコード・フラグメントを表示するためのアクティブ・コード・ビュー・モジュールをさらに備えることを特徴とする請求項27記載のシステム。
- コード更新が最後に行われてから少なくとも1つの要素が修正されているかどうかを調べるインクリメンタル・モデル・コード結合モジュールをさらに備え、前記モデル・コード・マネージャが前記修正を反映するために1つまたは複数のファイルの作成もしくは更新を行わせることを特徴とする請求項26記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US38758102P | 2002-06-12 | 2002-06-12 | |
PCT/US2003/018217 WO2003107180A1 (en) | 2002-06-12 | 2003-06-12 | Providing dynamic model-code associativity |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005530238A true JP2005530238A (ja) | 2005-10-06 |
Family
ID=29736334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004513930A Pending JP2005530238A (ja) | 2002-06-12 | 2003-06-12 | 動的モデル/コード結合を提供するシステム、方法、および媒体 |
Country Status (7)
Country | Link |
---|---|
US (2) | US20040034846A1 (ja) |
EP (1) | EP1552385B1 (ja) |
JP (1) | JP2005530238A (ja) |
AT (1) | ATE411559T1 (ja) |
AU (1) | AU2003239209A1 (ja) |
DE (1) | DE60324171D1 (ja) |
WO (1) | WO2003107180A1 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008269273A (ja) * | 2007-04-20 | 2008-11-06 | Meidensha Corp | ソフトウェア開発支援システム、開発支援方法およびプログラム |
JP2011510418A (ja) * | 2008-02-15 | 2011-03-31 | サムスン エレクトロニクス カンパニー リミテッド | コンポーネント・モデル基盤の仮想ソフトウェア・プラットホームを生成する方法、これを利用してソフトウェア・プラットホーム・アーキテクチャを検証する方法及びその装置 |
US8370781B2 (en) | 2006-11-21 | 2013-02-05 | Fujitsu Limited | Computer product for supporting design and verification of integrated circuit |
KR101565666B1 (ko) * | 2010-10-04 | 2015-11-03 | 미쓰비시덴키 가부시키가이샤 | 소프트웨어 생성 장치, 소프트웨어 생성 방법 및 프로그램 기억매체 |
JP2016206962A (ja) * | 2015-04-23 | 2016-12-08 | 株式会社明電舎 | ソフトウェア開発支援システム、ソフトウェア開発支援方法 |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8095413B1 (en) | 1999-05-07 | 2012-01-10 | VirtualAgility, Inc. | Processing management information |
US8522196B1 (en) | 2001-10-25 | 2013-08-27 | The Mathworks, Inc. | Traceability in a modeling environment |
US8104017B2 (en) | 2001-10-25 | 2012-01-24 | The Mathworks, Inc. | Traceability in a modeling environment |
DE60324171D1 (de) * | 2002-06-12 | 2008-11-27 | Telelogic North America Inc | Bereitstellung einer dynamischen modellcodeassoziativität |
US8458164B2 (en) * | 2003-07-15 | 2013-06-04 | International Business Machines Corporation | Query model tool and method for visually grouping and ungrouping predicates |
US20050015368A1 (en) * | 2003-07-15 | 2005-01-20 | International Business Machines Corporation | Query modelling tool having a dynamically adaptive interface |
US20050015361A1 (en) | 2003-07-15 | 2005-01-20 | International Business Machines Corporation | Model content provider with reusable components for supporting a plurality of GUI API's |
US8219968B2 (en) * | 2003-07-17 | 2012-07-10 | Raytheon Company | Designing computer programs |
US20050114832A1 (en) * | 2003-11-24 | 2005-05-26 | Microsoft Corporation | Automatically generating program code from a functional model of software |
US7823122B1 (en) * | 2003-12-16 | 2010-10-26 | The Mathworks, Inc. | Model and subsystem function signatures |
JP2005196291A (ja) * | 2003-12-26 | 2005-07-21 | Fujitsu Ltd | ユーザインタフェースアプリケーション開発プログラム、および開発装置 |
US7533365B1 (en) * | 2004-02-03 | 2009-05-12 | Borland Software Corporation | Development system with methodology for run-time restoration of UML model from program code |
US7849440B1 (en) * | 2004-04-16 | 2010-12-07 | The Mathworks, Inc. | Real-time code preview for a model based development process |
US7856621B2 (en) * | 2004-05-19 | 2010-12-21 | International Business Machines Corporation | Method for synchronization of concurrently modified interdependent semi-derived artifacts |
US20050262485A1 (en) * | 2004-05-19 | 2005-11-24 | International Business Machines Corporation | Duplicate merge avoidance in parallel development of interdependent semi-derived artifacts |
US7376933B2 (en) * | 2004-10-22 | 2008-05-20 | International Business Machines Corporation | System and method for creating application content using an open model driven architecture |
US20060101387A1 (en) * | 2004-10-22 | 2006-05-11 | Gerken Christopher H | An Open Model Driven Architecture Application Implementation Service |
US8024703B2 (en) * | 2004-10-22 | 2011-09-20 | International Business Machines Corporation | Building an open model driven architecture pattern based on exemplars |
US20060101385A1 (en) * | 2004-10-22 | 2006-05-11 | Gerken Christopher H | Method and System for Enabling Roundtrip Code Protection in an Application Generator |
US20060130007A1 (en) * | 2004-12-01 | 2006-06-15 | International Business Machines Corporation | Computer method and apparatus for automating translation to a modeling language |
US7689969B1 (en) | 2005-01-18 | 2010-03-30 | The Mathworks, Inc. | Obfuscation of automatically generated code |
WO2006087728A1 (en) * | 2005-02-15 | 2006-08-24 | Codito Technologies | System for creating parallel applications |
US7882116B2 (en) * | 2005-05-18 | 2011-02-01 | International Business Machines Corporation | Method for localization of programming modeling resources |
US8719716B2 (en) | 2005-09-15 | 2014-05-06 | The Mathworks, Inc. | Locked element for use in a graphical modeling environment |
US8316386B2 (en) * | 2006-02-17 | 2012-11-20 | Microsoft Corporation | Multiple application integration |
US20070234278A1 (en) * | 2006-03-02 | 2007-10-04 | Microsoft Corporation | Managing source code in a model-based development environment |
US20070220481A1 (en) * | 2006-03-20 | 2007-09-20 | Microsoft Corporation | Limited source code regeneration based on model modification |
US20080046858A1 (en) * | 2006-08-15 | 2008-02-21 | Zeligsoft Inc. | Method and apparatus for merge condition detection |
US8719766B1 (en) * | 2006-10-16 | 2014-05-06 | The Math Works, Inc. | System and method for identifying and adding files to a project manifest |
US8082301B2 (en) * | 2006-11-10 | 2011-12-20 | Virtual Agility, Inc. | System for supporting collaborative activity |
US8196100B2 (en) * | 2007-04-06 | 2012-06-05 | International Business Machines Corporation | Content management system for computer software with dynamic traceability between code and design documents |
JP4412674B2 (ja) * | 2007-04-18 | 2010-02-10 | インターナショナル・ビジネス・マシーンズ・コーポレーション | モデル駆動型開発を支援する装置及び方法 |
WO2009011056A1 (ja) * | 2007-07-19 | 2009-01-22 | Fujitsu Limited | アプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置 |
US8307334B2 (en) * | 2007-09-17 | 2012-11-06 | International Business Machines Corporation | Method for assisting a user in the process of creating software code |
US8307333B2 (en) * | 2007-09-17 | 2012-11-06 | International Business Machines Corporation | System and computer program product for assisting a user in the process of creating software code |
US8996349B2 (en) * | 2007-10-11 | 2015-03-31 | Microsoft Technology Licensing, Llc | Synchronizing an abstract model and source code |
US20090144695A1 (en) * | 2007-11-30 | 2009-06-04 | Vallieswaran Vairavan | Method for ensuring consistency during software development |
US9274753B1 (en) * | 2007-12-23 | 2016-03-01 | Sprint Communications Company L.P. | Application diagram tool |
US8166449B2 (en) * | 2008-01-17 | 2012-04-24 | Microsoft Corporation | Live bidirectional synchronizing of a visual and a textual representation |
US20090204939A1 (en) * | 2008-02-13 | 2009-08-13 | Yuliya Kimovna Lavrova | Methods for visual representation of macros language |
US8635593B2 (en) * | 2008-05-13 | 2014-01-21 | Hewlett-Packard Development Company, L.P. | Dynamic autocompletion tool |
US20100023922A1 (en) * | 2008-07-23 | 2010-01-28 | International Business Machines Corporation | Linking uml activity diagram nodes to uml class diagram nodes by using properties from applied stereotypes |
US8943482B2 (en) * | 2009-05-15 | 2015-01-27 | International Business Machines Corporation | Incrementally constructing executable code for component-based applications |
GB0908913D0 (en) * | 2009-05-26 | 2009-07-01 | Univ Dundee | Software development tool |
US20140033167A1 (en) * | 2009-08-28 | 2014-01-30 | Adobe Systems Incorporated | Method and system for generating a manifestation of a model in actionscript |
US8584080B2 (en) * | 2010-03-22 | 2013-11-12 | International Business Machines Corporation | Modeling and generating computer software product line variants |
CA2706747A1 (en) * | 2010-06-29 | 2010-09-08 | Ibm Canada Limited - Ibm Canada Limitee | Scoped code fly-out editor for domain languages |
US9069559B2 (en) * | 2010-06-30 | 2015-06-30 | International Business Machines Corporation | Modularizing steps within a UML user model interaction pattern |
US8978018B2 (en) * | 2010-12-02 | 2015-03-10 | International Business Machines Corporation | Reversibly instrumenting a computer software application |
US8364725B2 (en) * | 2011-03-24 | 2013-01-29 | International Business Machines Corporation | Bidirectional navigation between mapped model objects |
US8689184B2 (en) | 2011-03-30 | 2014-04-01 | The Procter & Gamble Company | Apparatus, system, and method for managing industrial software configurations |
US9460224B2 (en) * | 2011-06-16 | 2016-10-04 | Microsoft Technology Licensing Llc. | Selection mapping between fetched files and source files |
US9753699B2 (en) | 2011-06-16 | 2017-09-05 | Microsoft Technology Licensing, Llc | Live browser tooling in an integrated development environment |
US9563714B2 (en) | 2011-06-16 | 2017-02-07 | Microsoft Technology Licensing Llc. | Mapping selections between a browser and the original file fetched from a web server |
US9383973B2 (en) * | 2011-06-29 | 2016-07-05 | Microsoft Technology Licensing, Llc | Code suggestions |
US9110751B2 (en) | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
US9176937B2 (en) * | 2012-04-05 | 2015-11-03 | International Business Machines Corporation | Ensuring user interface specification accurately describes user interface after updates to user interface |
US9158504B2 (en) * | 2012-10-12 | 2015-10-13 | Baker Hughes Incorporated | Method and system to automatically generate use case sequence diagrams and class diagrams |
GB2528453A (en) * | 2014-07-21 | 2016-01-27 | Aptitude Software Ltd | Multi-format editors |
US10191726B2 (en) * | 2015-04-17 | 2019-01-29 | Battelle Memorial Institute | Biosequence-based approach to analyzing binaries |
JP7105683B2 (ja) * | 2018-12-07 | 2022-07-25 | 株式会社東芝 | 電子計算機、方法及びプログラム |
US11625228B2 (en) * | 2020-09-30 | 2023-04-11 | Palo Alto Research Center Incorporated | System and method for facilitating efficient round-trip engineering using intermediate representations |
EP4089525A1 (en) * | 2021-05-12 | 2022-11-16 | Siemens Aktiengesellschaft | System and method for generating program code for an industrial controller |
CN115202732B (zh) * | 2022-06-27 | 2023-08-08 | 苏州唐人数码科技有限公司 | 一种智能软件开发辅助系统及使用方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01116729A (ja) * | 1987-10-30 | 1989-05-09 | Fujitsu Ltd | 仕様記述のためのエディタ |
JPH09152965A (ja) * | 1995-11-29 | 1997-06-10 | Hitachi Ltd | クラスライブラリ再構築方法 |
JP2000242479A (ja) * | 1999-02-23 | 2000-09-08 | Matsushita Electric Works Ltd | ソフトウェアプログラム作成支援方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6212672B1 (en) * | 1997-03-07 | 2001-04-03 | Dynamics Research Corporation | Software development system with an executable working model in an interpretable intermediate modeling language |
US7152228B2 (en) * | 1999-07-08 | 2006-12-19 | Science Applications International Corporation | Automatically generated objects within extensible object frameworks and links to enterprise resources |
EP1224541A1 (en) * | 1999-10-05 | 2002-07-24 | Togethersoft Corporation | Method and system for developing software |
US7188332B2 (en) * | 1999-10-05 | 2007-03-06 | Borland Software Corporation | Methods and systems for relating a data definition file and a data model for distributed computing |
US7404175B2 (en) * | 2000-10-10 | 2008-07-22 | Bea Systems, Inc. | Smart generator |
WO2001082072A1 (en) * | 2000-04-21 | 2001-11-01 | Togethersoft Corporation | Methods and systems for generating source code for object-oriented elements |
WO2001087226A2 (en) * | 2000-05-18 | 2001-11-22 | Wilson-Cook Medical Inc. | Percutaneous gastrostomy device and method |
DE60324171D1 (de) * | 2002-06-12 | 2008-11-27 | Telelogic North America Inc | Bereitstellung einer dynamischen modellcodeassoziativität |
-
2003
- 2003-06-12 DE DE60324171T patent/DE60324171D1/de not_active Expired - Lifetime
- 2003-06-12 WO PCT/US2003/018217 patent/WO2003107180A1/en active Application Filing
- 2003-06-12 EP EP03734511A patent/EP1552385B1/en not_active Expired - Lifetime
- 2003-06-12 AT AT03734511T patent/ATE411559T1/de not_active IP Right Cessation
- 2003-06-12 US US10/459,712 patent/US20040034846A1/en not_active Abandoned
- 2003-06-12 AU AU2003239209A patent/AU2003239209A1/en not_active Abandoned
- 2003-06-12 JP JP2004513930A patent/JP2005530238A/ja active Pending
-
2007
- 2007-05-07 US US11/745,331 patent/US20070209031A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01116729A (ja) * | 1987-10-30 | 1989-05-09 | Fujitsu Ltd | 仕様記述のためのエディタ |
JPH09152965A (ja) * | 1995-11-29 | 1997-06-10 | Hitachi Ltd | クラスライブラリ再構築方法 |
JP2000242479A (ja) * | 1999-02-23 | 2000-09-08 | Matsushita Electric Works Ltd | ソフトウェアプログラム作成支援方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8370781B2 (en) | 2006-11-21 | 2013-02-05 | Fujitsu Limited | Computer product for supporting design and verification of integrated circuit |
US9177088B2 (en) | 2006-11-21 | 2015-11-03 | Fujitsu Limited | Computer product for supporting design and verification of integrated circuit |
US9378316B2 (en) | 2006-11-21 | 2016-06-28 | Fujitsu Limited | Computer product for supporting design and verification of integrated circuit |
JP2008269273A (ja) * | 2007-04-20 | 2008-11-06 | Meidensha Corp | ソフトウェア開発支援システム、開発支援方法およびプログラム |
JP2011510418A (ja) * | 2008-02-15 | 2011-03-31 | サムスン エレクトロニクス カンパニー リミテッド | コンポーネント・モデル基盤の仮想ソフトウェア・プラットホームを生成する方法、これを利用してソフトウェア・プラットホーム・アーキテクチャを検証する方法及びその装置 |
US8601433B2 (en) | 2008-02-15 | 2013-12-03 | Samsung Electronics Co., Ltd. | Method and apparatus for generating virtual software platform based on component model and validating software platform architecture using the platform |
KR101565666B1 (ko) * | 2010-10-04 | 2015-11-03 | 미쓰비시덴키 가부시키가이샤 | 소프트웨어 생성 장치, 소프트웨어 생성 방법 및 프로그램 기억매체 |
JP2016206962A (ja) * | 2015-04-23 | 2016-12-08 | 株式会社明電舎 | ソフトウェア開発支援システム、ソフトウェア開発支援方法 |
Also Published As
Publication number | Publication date |
---|---|
US20070209031A1 (en) | 2007-09-06 |
DE60324171D1 (de) | 2008-11-27 |
EP1552385A1 (en) | 2005-07-13 |
ATE411559T1 (de) | 2008-10-15 |
US20040034846A1 (en) | 2004-02-19 |
EP1552385A4 (en) | 2006-01-25 |
WO2003107180B1 (en) | 2004-02-26 |
EP1552385B1 (en) | 2008-10-15 |
AU2003239209A1 (en) | 2003-12-31 |
WO2003107180A1 (en) | 2003-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005530238A (ja) | 動的モデル/コード結合を提供するシステム、方法、および媒体 | |
US7051316B2 (en) | Distributed computing component system with diagrammatic graphical representation of code with separate delineated display area by type | |
Bracha et al. | Modules as objects in Newspeak | |
US9916134B2 (en) | Methods and systems for accessing distributed computing components through the internet | |
US5956479A (en) | Demand based generation of symbolic information | |
CA2211478C (en) | Systems, methods and apparatus for generating and controlling display of medical images | |
Reiss | The Field programming environment: A friendly integrated environment for learning and development | |
Kirby | Reflection and hyper-programming in persistent programming systems | |
US5950002A (en) | Learn mode script generation in a medical imaging system | |
KR20060087994A (ko) | 작업 흐름 모델을 주시하는 컴퓨터화된 시스템 | |
US20090320007A1 (en) | Local metadata for external components | |
Crocker | Safe object-oriented software: the verified design-by-contract paradigm | |
WO2000067122A2 (en) | A coherent object system architecture | |
Larsen et al. | Overture vdm-10 tool support: User guide | |
Ducasse et al. | Meta-environment and executable meta-language using Smalltalk: an experience report | |
Alomari et al. | Comparative studies of six programming languages | |
Sampaio et al. | A trusted infrastructure for symbolic analysis of event-driven web applications | |
Canciani et al. | A context-oriented extension of F | |
Layer et al. | Lisp Systems in the 1990s | |
Bockisch | An efficient and flexible implementation of aspect-oriented languages | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
Zirintsis et al. | Hyper-programming in Java | |
Lee | Pro Objective-C | |
Lewis | Producing network applications using object-oriented petri nets | |
Linka | Visual Studio refactoring and code style management toolset |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060514 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070919 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20070919 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070919 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080617 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20080619 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090929 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100330 |