JPH1040087A - ソフトウェア工学で使われるデータモデルの取り扱い方法 - Google Patents

ソフトウェア工学で使われるデータモデルの取り扱い方法

Info

Publication number
JPH1040087A
JPH1040087A JP8327058A JP32705896A JPH1040087A JP H1040087 A JPH1040087 A JP H1040087A JP 8327058 A JP8327058 A JP 8327058A JP 32705896 A JP32705896 A JP 32705896A JP H1040087 A JPH1040087 A JP H1040087A
Authority
JP
Japan
Prior art keywords
class
const
tsstr
int
name
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
Application number
JP8327058A
Other languages
English (en)
Inventor
Leprince Elisabeth
エリザベト・ルプランス
Carosso Robert
ロバート・カロツソ
James Kiso
ジエイムズ・キソ
Strassberger Edward
エドワード・ストラスバージヤー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
TRANSTAR
Original Assignee
TRANSTAR
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by TRANSTAR filed Critical TRANSTAR
Publication of JPH1040087A publication Critical patent/JPH1040087A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Programmable Controllers (AREA)

Abstract

(57)【要約】 【課題】 ツール間の移植性に優れたデータモデルの取
り扱い方法を提供する。 【解決手段】 複数のツール(Ta、Tb、Tc、T
d)間でのモデルの転送、及び、あるツールのフォーマ
ットを中間フォーマット(NIM)を経由して別のフォ
ーマットに変換し得るブリッジ(Ba、Bb、Bc、B
d)を使用して、データモデルを変換則モデルに適用す
るためのデータモデルの取り扱い方法において、先ず実
行言語をもとにしてオブジェクト指向と呼ばれるアプロ
ーチによりブリッジを作成する。このブリッジは、連続
して起動される複数のステップにおいて一律または条件
的にデータモデルの変換を行うことができる実行可能命
令であり、各ステップは、コードが再使用可能なクラス
のアセンブリをもとにして開発される実行可能命令であ
り、プロシジャを起動する際、単に、対応するプロシジ
ャの名前およびパラメータを与えるだけでよい。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数のソフトウェ
ア工学ツール間でモデルを転送するためのデータモデル
の取り扱い方法、ならびにあるツールのフォーマットを
中立かつ単一の中間フォーマットを経由して別のフォー
マットに変換することができるブリッジを使用して行わ
れる、変換則のモデルへの適用に関する。
【0002】
【従来の技術】一般的に、ユーザまたは設計者の環境内
で使われる異種開発ツール間でアプリケーションの開発
に関する情報をデータモデルの形態で交換できるように
するため、ソフトウェアツール間にインタオペラビリテ
ィを求めることは、ユーザまたは設計者にとって共通か
つ根本的な要求である。特にデータモデルの転送は、例
えば、ソフトウェア工学ツール間、または既存のソフト
ウェア工学ツールとクライアント/サーバモデルの新し
い開発ツールとの間でのアプリケーションのマイグレー
ション、あるいは例えば(当業者が「レポジトリ」と呼
ぶ)リファレンシャル内でのデータモデルの形態の開発
情報の管理を行えるようにするためには貴重な支援とな
り得る。このようなツールは次第に一般的に使用される
ようになってきていることから、情報モデルの設計また
は分析を行うことができる市販の単数または複数のソフ
トウェア工学ツールのエキスポートファイルの管理、回
収、または転送を行おうとする希望が出されることがあ
る。しかしながら現状では種々の欠点が存在する。例え
ば各ツールは独自の内部形式ならびに個別または特有の
オブジェクト表現方法、情報保存方法等を有するので、
二つのツール間ではやりとりが行えず、あるいは情報を
直接交換することができない。
【0003】これらの欠点を解消するために最近まで使
われていた解決方法は、各ツールおよびツールからツー
ルについて、当業者が「ブリッジ」と呼ぶもの、すなわ
ちあるツールのフォーマットを別のツールのフォーマッ
トに変換することを役割とするインタフェースを開発す
ることであった。その結果、ツール間で対話が行えるよ
うにするために、やりとりを行おうとする相手となるツ
ールの数と同数のブリッジを各ツールについて開発しな
ければならなかったとともに、新しいツールが出現する
と、この新しいツールとの対話ができるようにするため
各ツールについて固有のブリッジを開発する必要があっ
た。この解決方法は明らかに、可能なツールの組み合わ
せと同じ数のブリッジを作る必要があるという大きな欠
点を有するため、開発のコストおよび時間からすぐ実現
不可能になる。例えば、4個、5個または6個のツール
間で相互に対話を行うという、比較的少ないツール数を
想定する場合でも、必然的にそれぞれ6個、10個、1
5個のブリッジを開発しなければならない。
【0004】この欠点を少なくとも部分的に解消するた
め、やはり固有ではあるが、交換のコアとなる中立的な
ピボット情報モデルをつくることにより、あるツールの
フォーマットを中立かつ単一の共通中間フォーマットを
経由して別のツールのフォーマットに変換することがで
きるようにしたブリッジを開発するということからなる
解決方法が考案された。全てのブリッジがこの交換コア
を通過するこのピボット情報モデルを使用する中立的表
現という考え方により、ブリッジを著しく減らすことが
可能であり、しかもやりとりを行うべきツール数が多け
れば多いほどそのことが言える。従って前記のように4
個、5個または6個のツール間で相互に対話を行うとす
る場合、それぞれ4個、5個または6個のブリッジを開
発するだけでよい、すなわち一つのツールあたり一つの
ブリッジにより前記交換コアにアクセスし、前記ツール
のフォーマットを共有中間フォーマットに変換する。こ
の種の解決方法の場合、すぐれた移植性を確保するた
め、この機能を果たすための固有言語が開発され書き込
まれインタープリットされる、コンパクトで管理が簡単
で機能的な調節がなされたプロプリエタリアプローチが
採用された。事実、唯一つのプログラムをインタープリ
ットするだけでよいので、この閉じた世界では移植はか
なり顕著に簡単になる。この解決方法は有利ではある
が、欠点も有する。第一の欠点は、インタープリットさ
れる言語が高速ではなく、インタープリターは前記言語
を分析してから記載した動作を実行するという事実に本
質的に関わる。このようなプロプリエタリ言語を使用す
る際の第二の大きな欠点は、その言語では再使用可能要
素の概念を利用することができないことである。実際、
新しいブリッジを開発しようとする場合、この固有言語
で全コードを再度書き込む必要がある。さらにこのよう
な言語は通常、開発環境が非常に悪い(再利用可能機能
のライブラリがない、デバッガツールがない等)。
【0005】
【発明が解決しようとする課題】本発明は、先行技術に
よる既知の種々の方法の種々の欠点を解消することを目
的とし、使用する言語を適切に選択することにより高い
柔軟性をもたらし、簡単に拡張が可能であって、かつ高
いレベルの移植性および性能ならびに低いコストを実現
しつつ再使用可能要素の概念を使用することがデータモ
デルの取り扱い方法を提供する。
【0006】
【課題を解決するための手段】この点に関し、前文にお
いて言及したデータモデルの取り扱い方法は、実行され
た言語をもとにしてオブジェクト指向と呼ばれるアプロ
ーチによりブリッジの作成が行われ、ブリッジが、ステ
ップのダイナミックチェイニングロジックを記述する制
御言語により、連続して起動される複数のステップにお
いて一律または条件的にデータモデルの変換を行うこと
ができる実行可能命令であり、チェイニングがパラメー
タ化され名前の付けられたプロシジャであり、各ステッ
プが、コードが再使用可能なクラスのアセンブリをもと
にして開発される実行可能命令であり、プロシジャを起
動する際、単に、対応するプロシジャの名前およびパラ
メータを与えるだけでよいことを特徴とする。
【0007】このように、個別的に開発されたプロプリ
エタリ言語はすぐれた移植性をもたらすものであり、必
要であると痛感される機能上の厳密な調整に好適である
とみなされているという好ましくない先入観はあるもの
の、オブジェクト指向のアプローチを採用することによ
り実行言語を使用するよう決定された。従って、この先
入観すなわち従来の先行アプローチとは異なり、例えば
C++言語など、より柔軟で、好ましくは直接コンパイ
ルされ、メモリの管理がより細密で効果的な従来の標準
言語を使用するよう決定された。また、このような言語
は非常にすぐれた抽象化レベルを有し、適切なライブラ
リとともに使用することにより、効果および速度を向上
させることができる一方、同一の構造を異なるコンテク
ストで使用することができることから有利な汎用性を得
ることができ、従って再使用係数およびカウンタビリテ
ィ係数がより良好になる。別の利点は、この種の言語は
対応するデバッガを使用して簡単にデバッグが行えるこ
とであり、それによりブリッジの開発時間をさらに少な
くすることができる。最後に、このように、非常に多く
の製品およびユーザが存在する標準言語を選択すること
により、高品質な環境が保証される。
【0008】このようにして、あるツールから別のツー
ル、またはあるモデルから別のモデルへの転送を行うた
めには、ブリッジのコードを実行できるように設計され
た複数の構成要素が存在し、実際には各ブリッジは、再
使用可能クラスのライブラリを使用して作ったオブジェ
クト指向プログラムとして開発される。ブリッジは、例
えば、コードすなわちインポートファイル内のシンタッ
クス要素の認識によるファイルの物理的復号段階と、次
いで、中立情報モデル内のシンタックス要素の対応が発
見または生成される変換の符号化段階と、場合によって
は完全性確認段階というように複数の段階で作られるの
で、これらクラスは種々のブリッジをつくるのに使用さ
れることになる。これら各段階は再使用可能モジュール
を構成し、モジュールのアセンブリは、プログラムとし
てではなく適用する一連のプロシジャとして動的に連鎖
することができる。この目的のため、操作定義ファイル
(当業者からは「オペレーションデフィニションファイ
ル」と呼ばれる)を使用して、動的に連鎖すべきモジュ
ールのリストが記述される一方、タスクマネージャは、
再使用可能プロシジャを含む実行可能命令の中から、実
行可能命令を実行するための前記モジュールを探し、前
記ブリッジの適合のためのコンフィギュレーションパラ
メータを考慮してブリッジをつくる。これら情報は全
て、例えばディスクなどの常駐空間内に保存することが
できる一方、中間結果は一時的にメモリに保管される。
さらに、適当なプロシジャおよび/または実行可能命令
が同時に複数存在するときには、タスクマネージャによ
り最適な実行順序を選択することもできる。例えば、実
行順序を種々のプロシジャの複数のコピーに配設するこ
とができる。その場合、タスクマネージャはモジュール
のシーケンス、ならびに実行可能命令の負荷を最小限に
するプロシジャクラスを自動的に選択するので、これに
より実行時間を最適化することができる。
【0009】従って本データモデル取り扱い方法によ
り、ブリッジを短期間で開発することができる再使用可
能構成要素が起動される。注目すべきは、ブリッジの開
発のために、モデル化オブジェクトのダイナミックアロ
ケーションを使用することにより、リファレンシャルま
たは外部ファイル内のメモリに保存されているモデルお
よびメタモデルを表すことができる再使用可能クラスが
作られることであり、このクラスのオブジェクトはメモ
リ構造全体を内蔵し、メモリにロードされたモデルのデ
ータを扱うための機能を供給する。
【0010】一般的にデータは種々の形態、種々のフォ
ーマットで、種々の場所に保存することができる。好ま
しくは、取り扱いを簡単にするために、ここでは以下の
機構を特別扱いにする。
【0011】− ツールによりプロプリエタリフォーマ
ットにおいて作られたユーザデータファイルであるツー
ルエキスポートファイルを読み、書き、分析することが
できる機構 − 例えばC++オブジェクトなどのオブジェクトに対
応し、メモリ構造アセンブリをそれぞれカプセル化また
は内蔵し、ツールエキスポートファイルおよび/または
リファレンシャルをもとにしてロードされたデータモデ
ルを取り扱うための機能を供給する機構であって、これ
らオブジェクトの実施およびこれらオブジェクトを取り
扱う機能が再使用可能クラスを構成する機構。あるモデ
ルのデータの編成は、これらクラスの生成時にロードし
たメタモデルにもとづき、メタモデルは、メタモデルフ
ァイルと呼ばれるテキストファイルからの実行時にロー
ドされることが好ましい。このようなクラスはツールの
メタモデルあるいは中央情報モデルのメタモデルにより
ロードされることができ、これら二種類のオブジェクト
はブリッジの実行中に使用される。
【0012】− 中立情報モデルのデータとの対応が行
われたデータを含むテキストファイルである中立データ
ファイルと呼ばれる機構であって、種々の実行可能命令
間におけるデータの転送用またはディスクへの永久保存
用として使われる機構 − 中立情報モデルを示す略図を使用することによりユ
ーザのデータを保存することができ、リファレンシャル
のツール(例えば、バージョン、要求の管理等)により
管理ができるリファレンシャル このように、ブリッジによりデータをある場所またはあ
る保存機構から別の場所または保存機構におよび/また
はある形態から別の形態に移動および操作することがで
きる。それにはインポートブリッジ、エキスポートブリ
ッジ、または転送ブリッジという三つのブリッジ例が与
えられる。インポートブリッジをつくることにより、ツ
ールのエキスポートファイルからデータを抽出してこれ
をリファレンシャル内に入れることができる一方、エキ
スポートブリッジをつくることにより、リファレンシャ
ルからデータを抽出してツールのエキスポートファイル
をつくることができる。転送ブリッジをつくることによ
り、リファレンシャル内の保存を経ずにあるツールのエ
キスポートファイルから別のファイルに直接データを回
収することができる。もちろん、データを移動したり符
号化することを必ずしも目的とせず、ある所与の時点で
メモリにロードされるデータを処理することができる別
の種類の作業も存在する。従ってこれら作業は全て、デ
ータをメモリにロードできること、およびデータを永久
的に保存することによりデータの取り扱いおよび書き込
みができることを必要とし、これら作業は、ここに請求
項として示す再使用可能クラスおよび機能が存在するこ
とにより実現可能である。作業によっては多重オブジェ
クトの生成を必要とし、結果として種々のオブジェクト
間で変換または符号化がなされるものもある。例えばこ
れらデータがツールエキスポートファイルから抽出され
る時には、実行可能命令により、このファイルを構文的
に分析し、ツールのメタモデルに対応するような構造を
有するエキスポートファイルを含むオブジェクトをつく
ることができる。次に、中立情報モデルに対応するオブ
ジェクトへのこのオブジェクトの変換を行う中立情報モ
デルにより、ツールの固有データが一般データに変換さ
れる。このようにして保存されたデータは処理すること
ができ、場合によっては中立データファイルに保存する
ことが可能であり(データを別の実行可能命令に送る場
合)、あるいはリファレンシャル内に保存することがで
きる。
【0013】この結果、ブリッジによりモデルのオブジ
ェクトが動的にメモリに割り当てられるので、データモ
デルおよびメモリに保存されたメタモデルの定義にアク
セスすることができる。メタモデルのロード後は、メタ
モデルのゲージを使用することによりモデルがつくられ
る。モデルの集合体はメタモデルの集合体の構造と同様
の構造を有するので、これにより、オブジェクト間、お
よび属性の定義とそのインスタンスとの間で素早く対応
関係をとることができる。
【0014】ブリッジを開発するために、ツールエキス
ポートファイルの種々のフォーマットを符号化し解読す
ることが再利用可能クラスがつくられることになるのも
特徴である。このクラスはツールエキスポートのレコー
ドをカプセル化し、インポートファイルのレコードフォ
ーマットを記述するために使われる一方、初期化時に
は、メモリに保存されたモデルおよびメタモデルの表現
クラスを使用して、テキストファイルからツールのメタ
モデルが読み込まれると同時に、ブリッジのコードによ
りツールエキスポートファイルを読み、レコードに固有
のフィールドにアクセスし、メモリに保存されたモデル
およびメタモデルの表現クラスの機能を使用することに
よりオブジェクトおよびその属性をつくることができ
る。
【0015】事実、C++言語も含めプログラミング言
語では、複数の可変フィールドを含む構造を直接取り扱
うことができない。ここで提案する解決方法は、一連の
フィールド記述子の形態のレコード宣言を使用すること
である。プログラマは、固定および可変フィールドの大
きさ、値として定数および区切り記号の値をもつレコー
ドのコードを定義する。処理コードにおいては、プログ
ラマはまず、レコードをその記述子に対応させることが
できる機能を呼び出し、次にレコードのフィールドにア
クセスする。また、エキスポートファイルのレコードを
つくるために、プログラマはモデルのデータをもとにし
てこのレコード固有のフィールドに書き込み、次にレコ
ード全体を書き込む。レコードの記述には、各フィール
ドについて、実行時の情報の名前、種類および大きさが
含まれる。記述情報およびデータはデバッギングのため
に表示することができる。
【0016】このようにして特許請求するこのクラスに
よって、フィールドからのデータをレコード内に供給
し、レコードのフィールド内にデータを固定し、抽出の
ための完全なレコードを供給することにより、レコード
記述子をつくるためのマクロ、およびレジスタをレコー
ドの記述と対応させるための機能プロトタイプを定義す
ることができる。
【0017】このように、この再利用可能クラスによ
り、ブリッジの構成要素を使用して読み書きを行う種々
のツールエキスポートファイルの種々の処理を有利に行
うことができる。
【0018】最後に、同じく注目すべきは、ブリッジを
開発するために、C型言語のキャラクタストリングとの
適合性を保ちつつ、割り当て、連結、サブストリングお
よび動的メモリ再割り当て機能をともなう比較演算子の
引き受けが可能なキャラクタストリングの取り扱い再利
用可能クラスがつくられることである。
【0019】このように、この再利用可能クラスによ
り、C言語においてあらかじめ定義されているデータ種
の挙動と同様の挙動を提供するキャラクタストリングの
ある種の固有データ種を提案することにより、実用的な
技術的解決方法が提供される。また、この再利用可能ク
ラスは大きな特徴を有する。なぜなら、このクラスによ
り、一般的にメモリブロックの欠落にともなう情報の欠
落が一切禁止されるからである。
【0020】
【発明の実施の形態】図1は、本発明による、ソフトウ
ェア工学ツールTa、Tb、Tc、Td、...、の集
合体の中での有利なインタオペラビリティーを示す。前
記ツールは、例えばアプリケーションの開発に関する情
報をデータモデルの形態で交換する。ツールTa、T
b、Tc、Tdは、それぞれ独自の環境下で独自の辞書
とともに使用される異種開発ツールである。これら四つ
のツール間のデータモデルの変換は、ツールTa、T
b、Tc、Tdのうちの一つの独自のフォーマットを中
立かつ単一の中間フォーマット、中立情報モデルNI
M、を経由してツールのうちの別のツールの独自のフォ
ーマットに変換することができるBa、Bb、Bc、B
dなどのブリッジを使用して行われる。より正確には、
交換される情報は、結果的にピボットモデルとなるモデ
ルNIMとの間でデータを送受信する前記ツールのエキ
スポートファイルを経由する。中立情報モデルNIMを
インスタンスするデータはリファレンシャルと呼ばれる
オブジェクトデータベース内に保存される。
【0021】図2には、本発明を実施することができる
種々の構成要素が示されるアーキテクチャの一例を示
す。種々の構成要素とは、インタフェース、コントロー
ラ、保存機構、コンフィギュレーションファイル、コン
トローラ標準シーケンス(本発明により実行される言語
においてはスクリプト)、ブリッジ、およびリファレン
シャルである。この環境は、開発のツールボックスであ
るとみなすことができる。このツールボックスの作用
は、プログラマインタフェースクラスとも呼ばれるコン
トロールクラスCCによってモニタされ、このクラスに
より、環境をデータ転送用に編成すると同時に、適切な
プロシジャを呼び出すことができる。ユーザグラフィッ
クインタフェースGUI、コマンドラインインタフェー
スCLI、あるいはその他のインタフェースなど、ワー
クステーションWSの画面上での表示用のインタフェー
スの開発者は、専らコントロールクラスCCを使用す
る。このコントロールクラスCCは、ブリッジを呼び出
しあらゆるコマンドを起動することができる適用インタ
フェース(API)機能を含む。ここで、ブリッジと
は、データをある場所から別の場所に移動すること、お
よびある形態から別の形態に操作することができる特有
の機構であること、ならびに特に、インポート、エキス
ポート、および転送の三種類のブリッジがあることを再
度記しておく。コントロールクラスCCはコンフィギュ
レーションファイルCFおよびコントロール標準シーケ
ンスCS(スクリプト)によりパラメータ化される。デ
ータは種々の形態およびフォーマット、かつ異なる場所
で、メモリにロードすることができる。それぞれが独自
の有用性をもちかつ独自の組み合わせサービス群を有す
る四つの保存機構が使われる。すなわち、ツールエキス
ポートファイルTEF、中立データファイルNDF、リ
ファレンシャルR、およびモデルオブジェクトの動的割
り当て機構Dである。実際には、ツールエキスポートフ
ァイルTEFは、外部ツールがもつフォーマット内に前
記ツールによってつくられるユーザデータファイルであ
り、このファイルTEFは本発明の手段により、読み出
し、書き込み、および分析を行うことができる。中立デ
ータファイルNDFは、インポートされ当初ツールのメ
タモデルに従った構造をもつモデルの中立情報メタモデ
ルによるモデリングの結果を含むテキストファイルであ
る。このファイルNDFは、モデルのこの中立表現をA
SCIIで示したものである。中立データファイルND
Fの読み出しおよび書き込みサービスは本発明に従い供
給される。中立データファイルにより、データの欠落を
防ぎつつ、ある実行可能命令のC++オブジェクトに関
するデータを別の実行可能命令のC++オブジェクトに
転送することができる。リファレンシャルRは、中立情
報モデルを使用することができる略表を含む。ユーザの
データは、中立情報モデルのフォーマットでリファレン
シャル内に保存し、次に、バージョン、要求などの管理
を含むリファレンシャルのツールにより管理および操作
することができる一方、データをリファレンシャル内に
保存し、あるいはリファレンシャルからデータを抽出す
るためにサービスが供給される。中立データファイルN
DFは、オブジェクトとその内容としてリファレンシャ
ル内に保存することもできる。モデルオブジェクトの動
的割り当て機構Dも本発明の特長であり、完全に包括的
に、かつ実行時にロードされるメタモデルのデータによ
って指定される方法によりデータモデルを表すのに使用
される一式のC++クラスを供給する。メタモデルは、
メタモデルファイルと呼ばれるテキストファイルからロ
ードされ、C++オブジェクトとして保存される。C+
+オブジェクトとして次に保存されるユーザデータは、
組み合わされるメタモデル内で対応関係がとられる。な
お、中立情報モデルは、全てのツールメタモデルの概念
の大部分を獲得できるよう充分に完備されるようにした
メタモデルである。中立情報モデルのメタモデルととも
にロードされるC++オブジェクトは、実際には、そこ
から別の保存フォーマットをつくることができる中央ま
たは中心保存フォーマットである。オブジェクトの動的
割り当て機構Dは、本発明の実施に必要なクラスを全て
含むと同時に、全てのメタモデルMTa、MT
b、...、NIMMTを含む。
【0022】四つの保存機構すなわち、ファイルTE
F、ファイルNDF、リファレンシャルR、および機構
Dは、ブリッジおよび操作機構OBMと直接の関係にあ
り、この機構もコントロールクラスCCとの関係にあ
る。
【0023】前記に説明し、さらに図2、特にブリッジ
および操作機構OBMとの関係において説明したよう
に、あるツールから別のツール、あるいはあるフォーマ
ットから別のフォーマットへの転送を行うために、ブリ
ッジのコードを実行することができるように設計された
複数の構成要素が存在するが、実際には各ブリッジは、
再利用可能クラスのライブラリを使用して作成したオブ
ジェクト指向プログラムとして開発された作業である。
ブリッジは、例えば、コードすなわちインポートファイ
ル内のシンタックス要素の認識によるファイルの物理的
解読段階と、次いで、中立情報モデル内のシンタックス
要素の対応が発見または生成される変換の符号化段階
と、場合によっては完全性確認段階(機構IC)という
ように複数の段階で作られるので、これらクラスは種々
のブリッジBa、Bb、Bcをつくるのに使用される。
これら各段階は再使用可能モジュールを構成し、モジュ
ールのアセンブリは、プログラムとしてではなく一連の
プロシジャに従って動的に連鎖することができる。この
目的のため、操作定義ファイルODF(当業者からは
「オペレーションデフィニションファイル」とも呼ばれ
る)を使用して、動的に連鎖すべきモジュールのリスト
が記述される一方、このファイルは、再使用可能プロシ
ジャを含む実行可能命令の中から、実行可能命令を実行
するためのモジュールを探し、前記に説明したように実
行時間の有利な短縮をはかりつつ、ブリッジの適合のた
めのコンフィギュレーションパラメータを考慮してブリ
ッジをつくるタスクマネージャTMによって利用され
る。これらパラメータは全て、常駐空間(CS)内に保
存することができる一方、中間結果は一時的にメモリに
保管される。従って、本データモデル取り扱い方法によ
り、ブリッジを短期間に開発することができる再利用可
能構成要素が起動される。ブリッジ以外の作業は、例え
ば完全性確認ICあるいは名前変換サービスNCSな
ど、データが必ずしも移動または変換されるとは限らな
いスタンドアローン作業として実行することができる。
【0024】本発明の趣旨をよりわかりやすくするた
め、いくつかの定義および本発明にしたがい請求する種
々のクラスの可能であるが非限定的な実施についての説
明を以下に示す。
【0025】まず、アプリケーションの構成要素は、本
発明の環境のユーザにインタフェースを提供するプログ
ラムであることを示して、「スクリプト」の編成および
コンフィギュレーションに関するクラスの定義を示す。
インタフェースはどのような種類であってもよい。アプ
リケーションはコントロールクラス(TsContro
l Class)のオブジェクトをユーザ名にインスタ
ンスし、次に、このユーザに許可された作業を知るため
の機能を呼び出す。ユーザは、これらの作業の中から選
択し、前記作業を実行すべき方法についての情報を供給
するか、これら命令および情報を含むあらかじめ定義さ
れたコントロール「スクリプト」を指定することができ
る。アプリケーションによって可能であれば、あらかじ
め定義されたこれら「スクリプト」を作成するのにも、
コントロールクラス(TsControl Clas
s)を使用することができる。
【0026】コントロールクラス(TsControl
Class)は、本発明の環境下で作業を構成し開始
するために使われる。アプリケーションは、コントロー
ル「スクリプト」を読み書きし、可能な作業のリストを
作成するための機能を使用する。「set」および「g
et」機能を使用することによりキーワード値を定義す
ることができ、「do」機能を使用することにより動作
を命令することができる。機能が適用されるキーワード
または作業をユーザが指定する時、これら機能のうちの
いくつかは総体的であるが、大部分の機能は、キーワー
ドまたは既知の作業に固有である。後者の機能は、適切
なインタフェースおよびアプリケーションの構成要素の
コードとともに使用されるようになっている。
【0027】 TsControlクラス { TsSysConfig sysconf; //コンフィギュレーションファイルオブジェ クト TsMessageLib msglib; //メッセージライブラリオブジェクト TsOperCtlScript //コントロールスクリプト *operctl; //オブジェクトポインタ TsStr opername; //作業名 Singly_linked_list(TsKwdInfoPtr) //キーワードリスト keywords; // Doubly_linked_list(TsStr) //使用可能ツールリスト *tools_list; // int error; //エラー状態値 //共通で既知のキーワードの記憶値 TsTokens importfiles; //インポートファイルリスト TsTokens exportfiles; //エキスポートファイルリスト TsStr srcpctepath; //リファレンシャルへのアクセス名(ソー ス) TsStr tarpctepath; //リファレンシャルへのアクセス名(ターゲ ット) TsStr srctoolname; //ソースツール名 TsStr tartoolname; //ターゲットツール名 TsStr logfilepath; //ジャーナルファイルアクセス名 TsBoolean autonaming; //標準名前フラグ TsBoolean autochecking; //完全性確認フラグ //内部機能 Doubly_linked_list(TsStr)* // GetGroupPrompts( //グループ名前読み出し Singly_linked_list(TsGroupInfoPtr) //情報のグループ化および請求者 への戻し *group_list );//vers le demandeur TsKwdInfo *FindKeyword( //キーワードの定義の検索 const TsStr& keyword)const; //所与のキーワードのためのオブ ジェクト void AddKeywords(const //リストにキーワードを追加 Singly_linked_list(TsKwdInfoPtr)& //キーワードリスト kwd_list );// //作成および分解機能 TsControl( // コンストラクタ const TsStr& sys_config_path, //コンフィギュレーションファイル のパス TsStr& const TsStr& msg_lib_path //メッセージライブラリのパス ); // virtual〜TsControl(); //デストラクタ //コントロール「スクリプト」のロードおよび作成とその実行 int LoadNewOperCtlScript( //コントロール「スクリプト」のロード const TsStr& ctl_script_path );// int WriteOperCtlScript(); //コントロール「スクリプト」への数値 の書き込み int CreateOperCtlScript( //コントロール「スクリプト」の作成 const TsStr& ctl_script_path );// int RunOperCtlScript(); //コントロール「スクリプト」の実行 //作業名設定および読み出し機能 void SetOperationName( //作業名の設定 const TsStr& opname );// const TsStr& GetOperationName() const; //作業名の読み出し //既知のキーワードの値の設定および読み出し機能 void SetTargetPctePath( //リファレンシャルパス(ターゲット)の 設定 const TsStr& tpath );// const TsStr& GetTargetPctePath() const; //リファレンシャルパス (ターゲット)の読み出し void SetSourcePctePath( //リファレンシャルパス(ソース)の設定 const TsStr& spath );// const TsStr& GetSourcePctePath() const; //リファレンシャルパス (ソース)の読み出し void SetTargetToolName( //ターゲットツール名の設定 const TsStr& tname );// const TsStr& GetTargetToolName() const //ターゲットツール名の読 み出し void SetSourceToolName( //ターゲットツール名の設定 const TsStr& sname );// const TsStr& GetSourceToolName() const; //ソースツール名の読み 出し void SetLogFilePath( //ジャーナルファイルパスの設定 const TsStr& lpath );// const TsStr& GetLogFilePath() const; //ジャーナルファイルパスの 読み出し void SetAutoNamingOn(); //名前の標準化ON void SetAutoNamingOff(); //名前の標準化OFF void SetAutoNamingFlag( //名前フラグの値の設定 const TsStr& name_flag ); //フラグ文字ストリング int GetAutoNamingState(); //名前フラグ状態読み出し const char *const GetAutoNamingFlag(); //名前フラグ読み出し void SetAutoCheckingOn(); //完全性確認指示 void SetAutoCheckingOff(); //完全性確認指示せず void SetAutoCheckingFlag( //完全性確認フラグ値設定 const TsStr& check_flag ); //文字ストリングフラグ int GetAutoCheckingState(); //完全性確認フラグ状態読み出し const char *const GetAutoCheckingFlag(); //完全性確認フラグ値読 み出し void SetImportFiles( //インポートファイル名追加 const TsStr& ifiles ); //インポートファイル名ストリング void AddImportFile( //インポートファイル名追加 const TsStr& ifile ); //インポートファイル名 void RemoveImportFile( //インポートファイル名削除 const TsStr& ifile ); インポートファイル名 int IsImportFileOnList( //リスト上での名前の有無のチェック const TsStr& ifile ); //インポートファイル名 const TsStr& GetImportFilesStr(); //インポートファイル名ストリ ング読み出し const Doubly_linked_list(TsStr)& // GetImportFilesList(); //インポートファイル名リスト読み出 し void SetExportFiles( //エキスポートファイル名追加 const TsStr& efiles ); //エキスポートファイル名ストリン グ void AddExportFile( //エキスポートファイル名追加 const TsStr& efile ); //エキスポートファイル名 void RemoveExportFile( //エキスポートファイル名削除 const TsStr& efile ); //エキスポートファイル名 int IsExportFileOnList( //リスト上での名前の有無のチェック const TsStr& efile ); //エキスポートファイル名 const TsStr& GetExportFilesStr(); //エキスポートファイル名スト リング読み出し const Doubly_linked_list(TsStr)& // GetExportFilesList(); //エキスポートファイル名リスト読み 出し const Doubly_linked_list(TsStr)* // ListTools(); //使用可能ツール名読み出し //一般キーワード機能 void SetKeywordValue( //リストへのキーワードの追加 const TsStr& name, //キーワード名ストリング const TsStr& value );//キーワード値ストリング const TsStr& GetKeywordValue(const TsStr& keyword)const; //あ るキーワード名についてキーワード値検索 void RemoveKeyword(const TsStr& keyword); //あるキーワードにつ いてキーワードオブジェクト定義検索 Doubly_linked_list(TsStr)* GetGroups(const TsKwdExpr& exp); / /グループのミーティングの基準の名前検索 Doubly_linked_list(TsStr)* GetGroups(const TsKwdInfo& inf); / /グループのミーティングの基準の名前検索 //個別作業(インポート、エキスポート等)の実行機能 void DoImport(); //インポート作業実行 void DoExport(); //エキスポート作業実行 void DoTransfer(); //転送作業実行 //その他のクラスの機能 operator int()const; //整数記録 void Print(); //オブジェクト内の値のプリント }; //TsControlクラス終了 SysConfigクラスは、本発明の環境内のコンフ
ィギュレーションファイルの個別クラスである。インス
タンスすることによりコンフィギュレーションファイル
のアクセス名を設定することができる。このクラスは二
つの方法で使用することができる。
【0028】第一の方法によれば、インストレーション
時、特殊フラグおよびコンフィギュレーションファイル
のアクセス名とともに呼び出される実行可能命令により
このクラスがインスタンスされ、ファイルの最後に(ス
タティックテーブルから)実行可能命令のカレントコン
フィギュレーションテーブルを呼び出すためのスタティ
ック機能"SysConfig::AppendLocalConfiguration()"が
呼び出される。ファイル内に前に存在していた現在の実
行可能命令に関する情報はなくなる。
【0029】第二の方法によれば、SysConfig
クラスは、コンフィギュレーションファイルの記録およ
び分析、ならびに実行可能命令、グループ、方法等のデ
ータ構造の作成の"SysConfig::LoadFile()"機能を有
し、この機能は、現在のインストレーション内に存在す
るものを表す。LoadFile()機能も、現在の実行可能命令
のコンフィギュレーションがコンフィギュレーションフ
ァイル内にあるものに対応していることを確認する。一
連の"SysConfig::Find...()"機能により、コンフィギュ
レーション情報の回収のためにシステムの構造に素早く
アクセスすることができる。
【0030】 SysConfigクラス { TsStr pathname; //コンフィギュレーションファイルへのアクセス名 TsFileReader *input; //コンフィギュレーション読み出しのためのオ ブジェクト TsFileWriter *output; //コンフィギュレーション書き込みのための オブジェクト Singly_linked_ring(TsExecInfo*)exec_list; //コンフィギュレーシ ョンデータ構造 TsExecInfo *curr_exec; //実行の現在情報へのポインタ TsGroupInfo *curr_group; //現在グループへのポインタ TsMethodInfo *curr_method; //現在方法へのポインタ SysConfig(const TsStr& path); //コンストラクタ 〜SysConfig(); //デストラクタ int LoadFile(); //ファイルの読み出しおよび分析 TsExecInfo *Find Exec(const TsStr& name, //指名実行可能命令の検 索 const TsStr& location); // TsGroupInfo *FindGroup(const TsStr& name); //指名グループの検索 TsMethodInfo *FindProc(const TsStr& name); //指名方法の検索 static int AppendLocalConfiguration(); //ファイル内への情報の書 き込み static int DeleteLocalConfiguration(); //ファイル内の情報の削除 } OperCtlScriptクラスは、本発明の環境内
のコントロールスクリプトの個別クラスである。インス
タンスすることにより、コントロールスクリプトのアク
セス名を設定することができる。対応するキーワード定
義リストとともに、実行すべき作業のリストを作成する
ことによりコントロールスクリプトを登録し分析するた
めに、"OperCtlScript::LoadFile()"機能が使われる。
【0031】"OperCtlScript::SaveFile()"機能は、コ
ントロールスクリプトの定義およびコマンドを出力する
ために使われる。またこのクラスは、コマンドの実行お
よび次の実行可能命令のコンフィギュレーションおよび
呼び出しのための機能も含む。
【0032】 OperCtlScriptクラス { TsStr pathname; //スクリプトアクセス名 int temp; //スクリプト一時フラグ TsFileReader *input; //スクリプト読み出しのためのオブジェクト TsFileWriter *output; //スクリプト書き込みのためのオブジェクト TsExecInfo *curr_exec; //現在の実行可能命令 TsGroupInfo *curr_group; //現在のグループ TsMethodInfo *curr_method; //現在の方法 Singly_Linked_List(TsMethodInfo*)commands; //実行すべきコマンド Singly_Linked_List(TsDef*)defines; //コマンド用パラメータ SysConfig *system; //SysConfigオブジェクトへのポイン タ TsStr next_exec; //行うべき次の実行 TsStr next_loc; //次の実行の場所 OperCtlScript(const TsStr& path); //コンストラクタ 〜OperCtlScript(); //デストラクタ int LoadFile(); //ファイルの読み出しおよび分析 int SaveFile(); //ファイルのコンフィギュレーションの書き込み int SaveFile(const TsStr& new_path); //新規ファイルの作成 int RunCommands(); //方法呼び出し int PassExecution(); //新規実行可能命令の呼び出し } TsDefクラスは、コントロールスクリプトのキーワ
ードおよび値を保存し回収するのに使われる。
【0033】 TsDefクラス { TsStr keyword; //キーワード識別子 TsStr value; //キーワード値 TsDef(const TsStr& kwd, const TsStr& val); //コンストラクタ 〜TsDef(); デストラクタ void SetValue(const TsStr& val); //キーワード値設定 const TsStr& GetKeyword(); //キーワード識別子読み出し const TsStr& GetValue(); //キーワード値読み出し } TsKwdInfoクラスは、キーワードの保存および
回収、ならびにコンフィギュレーションファイルの識別
子の要求に使われる。このクラスのオブジェクトは、キ
ーワードの現在値(最も最近の定義)を含むTsDef
オブジェクトへのポインタも保存する。
【0034】 TsKwdInfoクラス { TsStr keyword; //キーワード識別子 int prompt_id; //案内ストリングメッセージ TsDef *definition; //キーワード値オブジェクトへのポインタ TsKwdInfo(const TsStr& kwd, //コンストラクタ const TsStr& prmt); // 〜TsKwdInfo(); //デストラクタ int SetDef(const Singly_linked_list(TsDef*)& defs); //キーワー ド値設定 const TsStr& GetKeyword(); //キーワード識別子の読み出し const TsStr& GetValue(); //キーワード値の読み出し const TsStr& GetPrompt(); //案内ストリングの読み出し } TsMethodInfoクラスは、キーワードおよび
オプションが組み合わされた方法を識別するのに使われ
る。
【0035】 TsMethodInfoクラス { TsStr name; //方法名 TsGroupInfo *group; //グループオブジェクトへのポインタの復帰 Singly_linked_list(TsKwdInfo *)kwd_list; //キーワードリスト Singly_linked_list(TsKwdInfo *)opt_list; //オプションリスト TsMethodInfo(const TsStr& nam, TsGroupInfo *grp); //コンストラ クタ 〜TsMethodInfo(); //デストラクタ const TsStr& GetName(); //方法名読み出し TsGroupInfo *GetGroup(); //グループオブジェクトへのポインタの読 み出し void AddKeyword(TsKwdInfo *kwd); //リストへのキーワードの追加 void AddOption(TsKwdInfo *opt); //リストへのオプションの追加 TsKwdInfo *FindKey(const TsStr& key_name); //キーワードの読み出 し } TsGroupInfoクラスは、グループおよび組み
合わされた方法を識別するのに使われる。
【0036】 TsGroupInfoクラス { TsStr name; //グループ名 TsExecInfo *exec; //実行可能命令へのポインタの復帰 Singly_linked_list(TsMethodInfo *)method_list; //方法のリスト TsGroupInfo(const TsStr& nam, TsExecInfo *exc); //コンストラク タ 〜TsGroupInfo(); //デストラクタ const TsStr& GetName(); //グループ名読み出し TsExecInfo *GetExec(); //実行可能命令オブジェクトへのポインタの 読み出し void AddProc(TsMethodInfo *method); //リストへの方法の追加 TsMethodInfo *FindProc(const TsStr& method_name); //方法の読み 出し } TsExecInfoクラスは、実行可能命令および組
み合わされたグループを識別するのに使われる。
【0037】 TsExecInfoクラス { TsStr name; //実行可能命令の名前 TsStr location; //実行可能命令のアクセス名 Singly_linked_list(TsGroupInfo *)group_list; //グループリスト TsExecInfo(const TsStr& nam, //コンストラクタ const TsStr& location); // 〜TsExecInfo(); //デストラクタ const TsStr& GetName(); //実行可能命令名読み出し const TsStr& GetLocation(); //実行可能命令パス読み出し void AddGroup(TsGroupInfo *group); //リストへのグループの追加 TsGroupInfo *FindGroup(const TsStr& group_name);//グループの読み出し } 次に、メモリに保存されているモデルとメタモデルの表
現およびモデリングオブジェクトの動的割り当てに関す
るクラスの定義を示す。使用する機構(図2においては
機構Dと呼ばれる)により、メモリ内にモデルのオブジ
ェクトを動的に割り当てることによって、ブリッジの構
成要素によるアクセスについて、メタモデルの定義およ
びデータのモデルをメモリに保存することができる。こ
の機構によりメタモデルをロードすることができ、次に
メタモデルのゲージを使用することによりモデルを作成
することができる。このような構造により、オブジェク
ト、属性定義、およびそれらのインスタンスの間の対応
関係を素早くとることができる。機構Dは、隠されたプ
ライベートクラスおよびパブリックインタフェースクラ
スを有する。オブジェクトにデータを保存しそれにアク
セスするために、プログラムはパブリックインタフェー
スクラスTsOBJおよびTsLNKの機能を使用す
る。アドレシングオブジェクトは、オブジェクトまたは
リンクのクラス、オブジェクトのインスタンス、属性の
種類、および値のラインのリストについてのポインタの
集合体のツリー内のインデックスを使用し、インタフェ
ースがインデックス値に対応させるテキスト名として、
オブジェクトまたはリンクのクラスおよび属性の種類が
与えられる。機構Dは、データの階層化一覧への直接ア
クセスのためのポインタの集合体の他に、選択されたオ
ブジェクトへの高速アクセス(二分法検索)を提供し、
キーフィールドによって分類されたオブジェクトの表示
を行うことができる対応するオブジェクトのキー属性の
値によって分類されたインデックスの集合体を有する。
【0038】機構Dの「コンストラクタ」は、属性およ
びオブジェクト定義ファイルを読み出すためにread
MetaModel機能を呼び出す。このルーチンは、
オブジェクトクラスの定義のアドレスを、クラス名順に
並べたオブジェクトクラスの集合体に挿入することによ
り、各オブジェクトの種類についてのオブジェクトクラ
スの定義を作成する。機構Dはヘリテージをサポートす
る。機構はさらに、各属性を、属性名順に並べた属性の
集合体に挿入する。オブジェクトおよび属性がいったん
定義されれば、オブジェクトクラスのインデックスおよ
びオブジェクトクラスの属性の各インデックスは固定さ
れ、モデルの作成用として使用する準備ができている。
【0039】ツールはこの機構D内でモデル(ツールま
たは中立情報モデルNIM)を作成し操作する。属性値
を設定するためにツールが読み出されると、機構Dは、
インデックス値との間で名前の対応関係がとられ要求に
よってつくられたオブジェクトが既に存在する時に最適
化される以下のステップを実行する。
【0040】− clINdxを読み出すための、オブ
ジェクトクラスの表におけるオブジェクト種類の名前の
検索 − モデルのオブジェクトの表内のcINdx位置にお
いて、オブジェクトのインスタンス用の要素を見つけ出
すか作成し、新規インデックスobjNdxを割り当て
ること − 新規オブジェクトを作成し、そのアドレスをオブジ
ェクトのインスタンスの表内に保存すること − propNdxインデックスを見つけ出すため、属
性定義表内で属性名を検索すること − オブジェクトの属性のインスタンスの表内のpro
pNdx位置において、属性値のアドレスを見つけ出す
か新規アドレスを作成し、このアドレスをその位置に保
存すること − 属性値のリストにおいてライン番号を検索し、見つ
かれば、値を属性値オブジェクト内に保存し、見つから
なければ、新規属性値をつくりリスト内に挿入すること − 属性値ポインタの保存場所を見つけ出すために、属
性のインスタンスの表をインデックスすること − キー属性の一次値または二次値を保存することによ
り、キー値によって並べられた対応するインデックステ
ーブル内にObjNdxを挿入するか、インデックステ
ーブル内のObjNdxを更新すること 属性のインスタンスの表は、現在および以前のクラスの
属性のポインタの連結である。
【0041】TsDynamo、TsOBJ、TsLN
Kクラスは、機構Dへのアクセスのためのユーザインタ
フェースを定義する。TsOBJクラスにより、機構D
のオブジェクト内にアドレシング機構を提供することに
よって、クラス、オブジェクト、属性およびラインをイ
ンデックスすることができる。TsLNKクラスは、機
構Dのリンクのアドレシングを行う。機構Dのインタフ
ェースはユーザにアプリケーション領域(データのモデ
リング)を提供し、ポインタ、構造、およびC++メモ
リ割り当てを隠す。TsOBJ反復子は全オブジェクト
クラス上、オブジェクトクラスの全てのオカレンス上、
または全属性上でループする。プログラムはモデル上を
走るか、オブジェクトおよび属性の一部またはサブツリ
ーを選択することができる。TsLNK反復子(TsO
BJ反復子から派生)は、全リンク上でループする。プ
ログラムは、オブジェクト間のリンクを横断することに
よりモデルを検索することができる。リンクはTsOB
Jクラスからこの可能性を継承しているので、属性をも
つことができる。
【0042】TsDynamoクラスは、操作途中のメ
タモデルおよびモデルを指定するオブジェクト(C++
オブジェクトであって、以降ダイナモオブジェクトと呼
ぶ)を有する。TsOBJオブジェクトはダイナモオブ
ジェクトを指定し、モデル内の位置のインデックスを含
む。TsOBJオブジェクトの位置は、文字ストリング
内のクラスおよび属性の名前および/またはインデック
ス値により設定することができる。これにより、実行時
の名前の多価値性をサブスクリプトの使用時の効果に組
み合わせることができる。インデックス値1はデフォル
トに相当する。
【0043】 #include<tsdynamo.h> TsDynamo PAC(”pac”,”Test Model”);
//PACLAN/X(ツール)の作 成 TsDynamo NIM("nim","Neutral Model"); //NIMの作成 TsOBJPAC_ORB(PAC,"ORB"); while(PAC_ORB.nextObj()) //全ORB上での繰り返し { if(PAC_ORB("TYPE")!="O")continue; //OBJsの選択、RELsのスキ ップ TsOBJ NIM_BEN(NIM,"BEN"); NIM_BEN.setObj(); //新規BENの作成 NIM_BEN("TITLE")=PAC_ORB("NAME"); //属性のコピー NIM_BEN("ALIAS")=PAC_ORB("CODE"); NIM_BEN("NOTES",1)="%PX8_CODE"+PAC_ORB("CODE");//属性のコンカテネーショ ン NIM_BEN("NOTES",2)="%PX8_NAME"+PAC_ORB("NAME");//NOTESの第二行 NIM_BEN("NOTES")+=PAC_ORB("DOC"); //集合体またはブロックへの添付 NIM_BEN("TITLE")+="_suffix"; //値への連結 NIM_BEN("PROP")=Str(PAC_ORB("PROPERTY"),5,6); //サブストリング5、 長さ6の移動 } 注意:TsOBJ=TsOBJ;は、TsOBJオブジェクトではなく属 性値をコピーすることを意味する。
【0044】 TsOBJ nim_obj(nim); //コンストラクタクーロンTsOBJnimをコピ ーする nim_obj.copy(nim); //TsOBJnimをTsOBJnim_objにコ ピーする nim_obj=nim; //nimの属性値をnim_objにコピーする 参照された"Include"ファイル #include"tsarray.h" #include"tsstr.h" #include"tsrec.h" I/Oマニピュレータ #difine setleft setiosflags(ios::left) #difine resetleft resetiosflags(ios::left) マクロのステップバイステップ実行 extern int Tracing; #define TRACE(arg) if (Tracing) cout << setw(5) <<_LINE_<<""<< arg<<NL; #define COPL(c)"TsOBJ(" << c->classNdx << ","<< c->objNdx << "," << c->p ropNdx << "," <<c-> lineNbr << ")" 全体のサイズ−TsArrayインクリメント増加 const int MaxClass = 128; //クラスの種類(オブジェクトのインスタン スなし) const int MaxProps = 64; //オブジェクトあたりの属性 const int MaxKeys = 64; //キーブロックの要領 メタモデル内で定義された属性の種類 enum TsPropType{ Value=1, //シングルストリングの値 Array=2, //多重独立ストリングの値 Block=3}; //連続テキストの多重ライン extern const char* TsPropTypeStr[]; //"enum"をストリングに変換する ための配置 inline const char*cvPropType(TsPropType t) { return TsPropTypeStr[t >= Value && t <= Block ? t:O]; } 参照 class TsDynamo; class TsPropValue; class TsObjectInst; class TsObjKeyArray; class TsObjInstArray; class TsModelObjArray; class TsPropDefnArray; class TsPropDefn; class TsObjClassDefn; class TsObjClassArray; class TsLinkInst; class TsLinkKeyArray; class TsLinkInstArray; class TsModelLnkArray; ダイナモ−インタフェースクラス TsDynamoクラス { friend class TsOBJ; friend class TsLNK; class TsObjClassArray* oca; //メタモデルのオブジェクトクラスの 表 class TsModelObjArray* moa; //モデルのオブジェクト表 class TsLnkClassArray* lca; //メタモデルのリンククラス表 class TsModelLnkArray* mla; //モデルのリンク表 TsDynamo(const char* metaModelName, const char* modelName); TsDynamo(const TsDynamo& d, const char* modelName); //同一のメタ モデル、新規モデル 〜TsDynamo(); //デストラクタ void display(); //ダイナモ検索、表示値 void dump(); //オブジェクト、i9、属性、i9、フォーマット値(O BS)へのモデルイメージコピー void writeNDF(char* ndfPath); //ダイナモ検索、表示値 int readMetaModel(const char* fileName); //オブジェクトの読み出し /属性の定義 void define(const char* obj, const char* prop, char* key, TsPropType prop_Type, int prop_Size); void freeze(); TsOBJクラスにおいては、TsOBJオブジェクト
は、ダイナモオブジェクト内のアドレシングオブジェク
トのためのポインタである。TsOBJ機能により、N
dx値のいくつかまたは全てを使用してポインタテーブ
ルのインデックスを行うことにより、ダイナモオブジェ
クトにアクセスすることができる。
【0045】 classe TsOBJ //ある値を機構D内にアドレスするためのインデックス番号 { TsDynamo* dyn; //データをダイナモ内にセットするためのポインタ int classNdx; int objNdx; int propNdx; lineNbr; int iterNdx; //反復子用キー全体のインデックス int error; //不良アドレス、ジャンプ 数値をともなうTsOBJコンストラクタ TsOBJ(TsDynamo& aDyn, int aClassNdx=1, int aObjNdx=1, int aPropNdx=1, int aLineNbr=1); クラス名および属性をともなうTsOBJコンストラクタ TsOBJ(TsDynamo & aDyn, const char* aClass, int aObjNdx=1, const char* aProp=1, int aLine=1); TsOBJコピーのコンストラクタ TsOBJ(TsOBJ& c); TsOBJデストラクタ 〜TsOBJ(){} TsOBJを介してダイナモオブジェクトをアドレスするための機能 TsStr& getV(); TsPropValue* getPropValue(); TsObjectInst* getObject(); TsObjKeyArray* getPrimeKeyArray(); TsObjKeyArray* getSecndKeyArray(); TsObjInstArray* getObjInstArray(); TsModelObjArray* getModelObjArray(); TsPropDefnArray* getPropDefnArray(); TsPropDefn* getPropDefn(); TsObjClassDefn* getObjClassDefn(); TsObjClassArray* getObjClassArray(); char* getClassName(); char* getPropName(); モデル内のオブジェクトおよび属性を設定し読み出すための機能 int setObj(const char* aClass, int aObjNdx=1); int setProp(const char* aProp); int setValue(const char* aProp, int aLineNbr,const char* aValue); int setValue(int aLineNbr, const char* aValue); int setValue(const char* aValue){return setValue(1,aValue);} int setValue(TsStrList* aValue); TsStr getValue(const char* aObj, int aObjNdx, const char* aProp,int aLineNbr=1); TsStr getValue(const char* aProp, int aLineNbr=1); TsStrList getList(const char* aProp); TsPropType getPropType(); int findObj(const char aObj, const
char aProp, const char aValue); ブリッジのシンタックスを改善するための作業機能 TsOBJ& operator()(const char aObj,
int aObjNdx, const char aProp, in t aPropNbr); TsOBJ& operator()(const char* aObj, int aObjNdx, const char* aProp); TsOBJ& operator()(const char* aObj, char* aProp); TsOBJ& operator()(const char* aProp, int aLineNbr); TsOBJ& operator()(const char* aProp); TsOBJ& operator()(); //op()では不良は許されない TsOBJ& copy(TsOBJ& b); //TsOBJをコピーする TsOBJ& operator=(TsOBJ& in); //属性値をコピーする TsOBJ& operator=(const char* in); //ストリング値をコピーする TsOBJ& operator+=(TsOBJ& in); //属性値を添付する TsOBJ& operator+=(char* in); //ストリング値を添付する int operator!(){return error;} //最新の参照または割り当てが不良である かどうか通報する operator TsStr&(){return getV();} //全てのStr opsのアクティブ opの変換 クラス、オブジェクト、属性、ラインを巡回するための反復機能。
【0046】反復を停止するため、最新のオカレンスを
超過した時0に復帰。
【0047】 集合体にジャンプを組み込む"null"ポインター int firstClass(); int firstObject(); int firstProperty(); int firstLine(); int nextClass(); int nextObject(); int nextProperty(); int nextLine(); }; 基数性 enum Cardn {C0_1, C1_1, C0_M, C1_M}; extern char* Cardn_str[]; //Cardnをテキストに変換するための ストリング集合体 キー属性の値をソートするためのクラスインデックスおよびオブジェクト インデックス struct Clob { int classNdx; int objNdx; }; 機構Dにおいては、「メタモデル」クラスは、操作すべ
きモデル内のデータをインタープリットするための一定
構造としての中立情報モデルNIMまたは関連ツールメ
タモデルを表す。
【0048】 属性の定義の集合体のクラスの定義 "enum"をテキストに変換するためのストリング集合体 const char*TsPropTypeStr[]={"??","Value","Array","Block"}; classe TsPropDefn //PropDefnArrayに含まれる { friend class TsPropDefnArray; friend class TsObjectInst; friend class TsOBJ; TsStr propName; TsPropType type; int length; TsPropDefn(const char* aPropName, TsPropType aType, int aLength); 〜TsPropDefn(){} }; 属性定義の集合体 TsArray(TsPropDefn*, TsPropDefnPtArray); //ゲージを特定化する TsPropDefnArrayクラス { friend class TsObjClassDefn; friend class TsObjClassArray; friend class TsObjectInst; friend class TsDynamo; friend class TsOBJ; TsPropDefnPtArray Prop; TsPropDefnArray() : Prop(MaxProps){} 〜TsPropDefnArray() //表によって指名される各オブジェクトを削除す る void display(TsOBJ* at); TsPropDefn* define(const char* aName, TsPropType aType, int aLength); TsPropDefn* insert(const char* aName, TsPropType aType, int aLength); int getIndex(const char* aName); TsPropDefn* find(const char* aName); }; 属性名をもとめ、表のインデックス(または0)を返す int TsPropDefnArray::getIndex(const char* name); 属性名をもとめ、PropDefn(またはNULL)アドレスを返す TsPropDefn* TsPropDefnArray::find(const char* name); 属性名でソートされたTsPropDefnArrayにTsPropDef nを挿入する TsPropDefn*TsPropDefnArray::insert(constchar*aName,TsPropType aType, int aLength); 新規TsPropDefnを定義する、属性名が重複しているかどうか確認す る TsPropDefn*TsPropDefnArray::difine(constchar*Name,TsPropTypeType, int Length); オブジェクトクラスの定義、メタモデルのオブジェクトの情報 class TsObjClassDefn { friend class TsObjClassArray; friend class TsObjInstArray; friend class TsObjectInst; friend class TsDynamo; friend class TsOBJ; TsStr className; //オブジェクトクラスの名前 TsStr parentName; //類似性を有するオブジェクト名 TsObjClassDefn* parent; //継承属性 TsPropDefnArray* pda; //属性名の二分法検索 TsStr primeKeyName; int primeKeyPrNdx; TsStr secndKeyName; int secndKeyPrNdx; TsObjClassDefn(const char* Name, const char* ParentName=0, const char* Prime=0, const char* Second=0); 〜TsObjClassDefn() void TsObjClassDefn::display(TsOBJ* at); メタモデルがフリーズした時、キー属性インデックスを翻訳する }; オブジェクトクラスの表の定義 オブジェクトクラスの表、メタモデルの頂点 TsArray(TsObjClassDefn*, TsObjClassDefnPtArray);//ゲージを特定化する TsObjClassArrayクラス { friend class TsOBJ; TsObjClassDefnPtArray Class; TsStr metaModelName; int usageCount; //共通メタモデルを保護する int isFrozen; //0=findにより新規obj/prop def nsが挿入される TsObjClassArray(const char* name):Class(MaxClass); 〜TsObjClassArray(); void release() {if(--usageCount==0) delete this;} void display(TsOBJ* at); void writeNDF(TsOBJ* at, ostream& ndf); void resolveKeys(); TsObjClassDefn* define(const char* name); TsObjClassDefn* difineKey(const char* obj, char* key, const char* prop ); TsObjClassDefn* insert(const char* name); TsObjClassDefn* find(const char* name); int getIndex(const char* name); }; 類似性を有するクラス名およびキー属性のインデックスを翻訳する オブジェクトクラスの名前用の表のインデックスを検索する int TsObjClassArray::getIndex(const char* name) オブジェクトクラスの名前により、オブジェクトクラスの定義のアドレスを検 索する TsObjClassDefn* TsObjClassArray::find(const Char* name) クラス名前でソートされたオブジェクトクラスの表に、オブジェクトクラスの 定義を挿入する TsObjClassDefn* TsObjClassArray::insert(const char* name) オブジェクトクラスの表の中で、オブジェクトクラスの新規定義を定義し、重 複しているかどうか確認する TsObjClassDefn* TsObjClassArray::define(const char* name) 第一または第二キー属性名を定義する TsObjClassDefn* TsObjClassArray::defineKey(const char* obj, char* key, const char* prop) 機構Dにおいては、モデルのデータのクラスは、対応す
る中立情報モデルNIMまたは関連ツールメタモデルに
よって定義される構造内のユーザのモデルを表す。
【0049】 属性値のクラスの定義 classe TsPropValue //単一属性の値のストリング { friend class TsObjectInst; friend class TsOBJ; TsPropValue* next; //多価属性が連鎖される int lineNbr; //挿入用のソートファイル TsStr v; //ストリングの割り当ては再寸法決定をサポ ートする TsPropValue(int line_Nbr, const char* val) 〜TsPropValue(){} void display(TsOBJ* at); void dump(TsOBJ* at); void writeNDF(TsOBJ* at,ostream& ndf); void set(int line_Nbr, const char* val); TsStr get(int line_Nbr); operator const char*()const{return (const char*)v;} }; void TsPropValue::display(TsOBJ* at) void TsPropValue::dump(TsOBJ* at) void TsPropValue::writeNDF(TsOBJ* at, ostream& ndf) ライン番号、および属性値用の値を設定する void TsPropValue::set(int line_Nbr, const char* val) 多重ライン属性値を設定する void TsPropValue::set(const TsStrList* val) ライン番号で属性値を読み出す TsStr TsPropValue::get(int line_Nbr) 多重ライン属性値を読み出す TsStrList TsPropValue::get() オブジェクトのインスタンスのクラスの定義 オブジェクトのインスタンスは属性のインスタンスの表を含み、属性値を 指定する。
【0050】 TsArray(TsPropValue*, TsPropValuePtArray);//spcialise驕@le gabarit ゲージを特定化する class TsObjectInst //PropDefnArrayと平行なインデックス { friend class TsObjInstArray; friend class TsOBJ; TsPropValuePtArray Prop; TsObjectInst() : Prop(MaxProps){} 〜TsObjectInst() void display(TsOBJ* at); void dump(TsOBJ* at); void writeNDF(TsOBJ* at,ostream& ndf); TsPropValue* setValue(TsOBJ* at, const char* val); }; オブジェクトのキー集合体のクラスの定義 キー属性を使用するオブジェクトキーおよびオブジェクトインデックスの集合 体 TsArray(int, TsObjNdxArray); //ゲージを特定化する class TsObjKeyArray //キー属性の値でソートされたObjNdxs { friend class TsObjInstArray; friend class TsOBJ; TsObjNdxArray objNdx; //命令内に送信または二分法検索 dichotomique TsObjKeyArray():objNdx(MaxKeys){} 〜TsObjKeyArray(){} void display(TsOBJ* at); void insert(TsOBJ* at); int find(char* val); }; オブジェクトのインスタンスの表のクラスの定義 TsArray(TsObjectInst*,TsObjectPtArray); //ゲージを特定化する class TsObjInstArray //ObjNdxによりインデックスされたオブ ジェクトのインスタンス { friend class TsModelObjArray; friend class TsOBJ; TsObjKeyArray* primeKeyArray; TsObjKeyArray* secndKeyArray; TsObjectPtArray Obj; TsObjInstArray():Obj(MaxKeys) 〜TsObjInstArray() オブジェクトインデックスを位置決めし、必要であればオブジェクトイン デックスを作成する TsObjectInst setObject(int objNdx) void display(TsOBJ* at); void dump(TsOBJ* at); void writeNDF(TsOBJ* at, ostream& ndf); void updateKey(TsOBJ* at); }; キー属性値に従う挿入によるオブジェクトのキーの集合体の更新 void TsObjInstArray::updateKey(TsOBJ* at) 所与の値に現在の属性を設定する。
【0051】 TsPropValue* TsObjectInst::setValue(TsOBJ* at, const char* val) モデルのオブジェクトの表のクラスの定義 モデルのオブジェクトの集合体、モデルの頂点、オブジェクトのインスタンス の名前 TsArray(TsObjInstArray*, TsObjInstPtArray); //ゲージを特定化する class TsModelObjArray //clndxによってインデッ クスされるオブジェクトのクラス { friend class TsOBJ; TsStr modelName; TsObjInstPtArray Class; public: TsModelObjArray(const char* Name):Class(MaxClass) 〜TsModelObjArray() void display(TsOBJ* at); void dump(TsOBJ* at); void writeNDF(TsOBJ* at, ostream& ndf); Positionner le tableau courant d'instance d'objets avec L'index de c lasse TsObjInstArray* setClass(int classNdx) }; クラスのインデックスによりオブジェクトのインスタン
スの現在の表を位置決めする 機構D内のリンクのクラスの定義は、オブジェクトのク
ラスの定義のサブクラスである。モデルのリンクはリン
クのインスタンスである。リンクのクラスの定義は、リ
ンクが関連付けることができるオブジェクトのクラスを
記述する。リンクのインスタンスは、関連付けられたモ
デルのオブジェクトのインスタンスを示す。
【0052】リンクのオブジェクトは通常オブジェクト
を記述する。なぜなら、リンクはオブジェクトの特徴を
有する(名前をもち、属性をもつことができる)一方、
「to」および「from」のベクトルおよび基数性も
有するからである。パフォーマンスを最適化する目的か
ら、リンクに付加されるデータ要素は、オブジェクトの
属性として使われるよりもむしろC++言語で符号化さ
れる。ソートされたインデックスの集合体によっても検
索を最適化することができる。
【0053】機構Dのコンストラクタは、ツールのメタ
モデルまたは、中立情報モデルNIMのメタモデルファ
イルをもとにして、別のオブジェクト定義とのリンクの
定義を読む。
【0054】リンクは、リンクによって接続されるモデ
ルオブジェクトを見つけ出すことができるようにするた
め、前記オブジェクトからのおよび前記オブジェクトへ
のオブジェクトインデックスclNdxおよびobjN
dxを含む。リンクの定義は、定義によってまとめるこ
とができるオブジェクトを指定するが、実クラスは指定
されたオブジェクトクラスから派生することができる。
従って、リンクはインデックスclNdxおよびobj
Ndxを含む。リンクはオブジェクトと同様、属性をも
つことができる。
【0055】二つのオブジェクト間にリンクをつくると
いうことが、インデックス表にリンクを入力することも
意味する。全オブジェクト、またはある種のリンクがす
でにまとめている特定のオブジェクトを見つけ出すため
には、リンクのキーの集合体がソートされる。全リン
ク、またはあるオブジェクトからのまたはあるオブジェ
クトへの特定のリンクを見つけ出すためには、オブジェ
クトリンクの集合体がソートされる。リンクのクラスの
定義は、数値がオブジェクトのリンクを通しての反復順
序を決定する属性のインデックスpropNdxを含む
ことができる。これにより、特定の順序で、エンタイテ
ィーの属性および属性のサブフィールドを調べることが
できる。リンクのインデックスの集合体のデフォルトシ
ーケンシングは、ターゲットオブジェクトのキーを使用
するので、二分法検索およびリストの並べ換えが簡単に
なる。
【0056】あるメタモデルのモデルと別のメタモデル
のモデルとの対応関係をとることができるブリッジ構造
は、実際には、モデルの各一次オブジェクトを調べるた
めに反復子を使用し、次に、組み合わされたオブジェク
トを見つけ出すためリンクを走るかストレンジャキーを
使用するループの階層を利用する。すでにインプリメン
トされているかコピーされているモデルNIMを変更す
る他の処理は、完全性および他のサービスの作業の確認
のために、同じ種類の一般的処理を使用する。
【0057】 #include "tsdynamo.h" //"Cardn enum"の値とテキストとの対応関係をとるためのストリングの集合体 char* Cardn_str[]={"0:1","1:1","0:m","1:m"}; リンクのクラスの定義 classe TsLinkClassDefn:TsObjClassDefn { friend class TsLNK; friend class TsLinkClassArray; TsStr fromVerb; TsStr toVerb; int fromCINdx; int toCINdx; Cardn fromCardn; Cardn toCardn; int toKeyPropNdx; //オブジェクトのリンクの集合体の順序化 TsStr toSetMbr; TsStr fromSetMbr; TsLinkClassDefn( const char* aClassName, const char* aFromVerb, const char* aToVerb, const char* aFromClName, const char* aToClName, const char* aFromCardn, const char* aToCardn, const char* ToKeyPropName, const char* aToSetMbr, const char* aFromSetMbr); void display(TsLNK* at); }; void TsLinkClassDefn::display(TsLNK* at); モデルのレベルでのリンク TsLinkClassDefnクラス: classe TsLinkInst: TsObjectInst { int fromCINdx; int fromObjNdx; int toCINdx; int toObjNdx; TsLinkInst(TsOBJ& aFrom,TsOBJ& aTo); 〜TsLinkInst(){} void desplay(TsLNK* at); void putNDF(ostream& ndf,TsLNK* at); TsPropValue* setProp(TsLNK* at, const char* val); }; void TsLinkInst::display(TsLNK* at); リンクのキー集合体、キー属性を使用するソートされたリンクにインデックス TsArray(TsClob, TsClobArray); //ゲージを特定化する classe TsLinkKeyArray //ターゲットオブジェクトのキー 属性の値によってソートされたInkNdxs { friend class TsLinkInstArray; friend class TsLNK; TsClobArray linkNdx; //命令内に送信または二分法検索 TsLinkKeyArray():linkNdx(MaxKeys){} TsLinkInstクラス: 〜TsLinkKeyArray() voiddisplay(TsLNK* at); void insert(TsLNK* at); int find(char* val); }; リンクのキーの集合体の更新、キー属性値に従う挿入 void TsLinkInstArray::updateToKey(TsOBJ* at); リンクのキーの集合体をもとにした更新、キー属性値に従う挿入 void TsLinkInstArray::updateFromKey(TsOBJ* at); TsLNKクラス、インタフェースクラス TsLNKクラスはTsOBJクラスから派生する。T
sLNKクラスの付加的な可能性とは、メタモデル内の
リンクを介するモデル内のオブジェクト間の検索または
ナビゲーションである。
【0058】 現在のリンクを選択する int TsLNK::setLink(const char* aClass, int aLnkNdx); //所与のインデックスに固有なリンクを設定する //必要であれば、リンクのツリーを増やす int TsLNK::setLink(TsOBJ& from, TsOBJ& to); 現在のリンクの初期状態へのリセット int TsLNK::resetLink(TsOBJ& from, TsOBJ& to); 固有リンクのターゲットを読み出す TsClop TsLNK::getTarget(); 固有リンクの出所(ソース)を読み出す TsClop TsLNK::getSource(); 必要とされるリンク種類についてのリンクのインデックスおよびキー値を 求める int TsLNK::findLink(const char* aLnk, const char* aProp, const char* aVa l); 現在のオブジェクトのインデックスを、そのベクトルインデックス集合体 に挿入する void TsVtr Key Array::insert(TsOBJ*at) 次に、種々のツールエキスポートファイルフォーマット
のレコードの符号化および解読に関するクラスに定義を
示す。
【0059】可変長フィールド用のレコード記述子 CおよびC++言語ではレコードを完全にはサポートす
ることができない。これら言語は、文字集合および下部
構造など、データ要素をともなう文字集合および構造を
提供する。ある構造が宣言された後は、プログラマはプ
ロシジャコードの内容にアクセスするために、このコー
ド内において再度、長さについての情報を符号化しなけ
ればならない。デリミッタを使用する可変長フィールド
は通常、レコードの構文分析を行うコード内のレコード
の構文の符号化により処理される。今回の場合提案され
定義される有利な解決方法は、フィールド記述子のコレ
クションとしてレコードの宣言を使用することである。
まず、プログラマが固定および可変サイズのフィールド
を定義し、レコードの種類に一定の値のコードおよびデ
リミッタ値を割り当てる。次にプログラマはプロシジャ
コード内で、レコードとその記述子との対応関係をつく
るための機能を呼び出し、次にレコード内のフィールド
にアクセスする。情報を出力するためにプログラマは、
レコードをデリートしそのフィールドに入力し次に出力
のため完全なレコードを供給することができる機能を呼
び出す。レコードの記述には、実行時の情報の名前、種
類およびサイズが含まれる。記述情報およびデータはデ
バッギングのために表示することができる。
【0060】TsRecクラスを使用する場合、tsr
ec.hファイルは、レコードのフィールドからのデー
タを供給し、レコードのフィールド内にデータを設定
し、出力ができるよう完全なレコードを供給することに
より、レコード記述子作成のためのマクロ、およびレジ
スタとレコード記述との対応関係をとるための機能のプ
ロトタイプを定義する。
【0061】このようにTsRecクラスは、機構Dの
多数のファイルおよび、ブリッジの構成要素によって読
み書きされる多数のツールエキスポートファイルを処理
することができる。
【0062】フィールドの種類を定義する enum TsFieldType{REC,BFR,LIT,FLD,VAR,END}; レコードの記述は構造の表である。
【0063】 struct TsFieldDescr { TsFieldType type; char* name; int length; }; プログラマがレコードの記述を定義するのを支援するためのマクロ #define MaxRec(len) const int RecBufSize=len; #define XRec(name) extern char RECBUF##name[];\ extern TsFieldDescr name[]; #define Rec(name) char RECBUF##name[RecBufSize+1];\ TsFieldDescr name[]={{REC, #name, 0},\ {BFR, RECBUF##name, RecBufSize}, #define Lit(string) {LIT, string} #define Fld(name, len) {FLD, #name, len} #define Var(name) {VAR, #name} #define End {END}} フィールド値にアクセスするためのマクロ #define GetFld(rec,fld) getfld(rec, #fld) #define SetFld(rec,fld,val) setfld(rec, #fld, val) 機能のプロトタイプ 整数を、基底、サイズ、およびフィルのオプション付きASCIIに変換する char*itoa(int value, int base=10, int size=0, char fill=''); ASCIIを整数に逆変換 int atoi(const char* p); 動的レコード機能 レコードとのレジスタのマッチング int match(char* buffer, TsFieldDescr* f); レコードのフィールドの読み出し TsStr getfld(const TsFieldDescr* rec, const char* name); char*値をともなうフィールドの読み出し void setfld(TsFieldDescr rec, const
char name, const char value); TsStrクラス(後で定義する)の値をともなうフィールドの読み出し inline void setfld(TsFieldDescr re
c, const char name, const TsStr& va
l ue); char*に変換された整数値をともなうフィールドの読み出し inline void setfld(TsFieldDescr* rec, const char* name, const int value) { setfld(rec, name, itoa(value)); } レコードを消去する void clear(TsFieldDescr* rec); レコードを表示する void display(const TsFieldDescr* rec); XRec(IO_TAF); "enum TsFieldType"タイプをchar*シンボルに変換する char* aTsField Type(const TsField Typet;) レコード名のポインタの読み出し inline char* GetRec(const TsFieldDescr* rec){return(rec+1)->name;} 外部になるようIO_TAFを宣言する XRec(IO_TAF); また、文字ストリングの取り扱いに関するクラスの定義
も示す。
【0064】文字ストリングクラスTsStrの定義ヘ
ッダーファイルtsstr.hは、きわめて有利な文字
ストリングのデータ種を提供するTsStrクラスの定
義を含む。なぜならこの種は、C言語に内蔵されている
多数のデータ種のような挙動をもつからである。同じく
重要なことは、通常、メモリブロックの損失に関わる情
報の損失が一切禁止されることである。
【0065】TsStrクラスの目的は、C型言語のc
har*文字ストリングとの互換性を保ちつつ、割り当
て、コンカテネーション、サブストリング機能との比較
およびメモリの動的再割り当て演算子をサポートできる
C++文字ストリングクラスを定義することである。
【0066】 ライン文字の新規マクロ #define NL "\n" #define NL2 "\n\n" 名前付き変数の表示 #define SEE(x) " "#x": "<<x // Usage:cout<<SEE(abc)<< SEE(xyz); 文字ストリングのクラス TsStrクラス { char* pt;//動的に割り当てられた文字の集合体 size_t ln//現在のデータ長 size_t bs; //ブロック容量(ストップビットは数えず) デフォルトブロックサイズをもつ空TsStrを設定する void Defaults(){bs=16; ln=0;pt=new char[bs+1]; pt[0]='\0';} public: char*文字ストリングによって初期化されるTsStrクラスを作成する TsStr(const char* cp); TsStrによって初期化されるTsStrクラスを作成する TsStr(const TsStr& b); デフォルトTsStrクラスを作成する TsStr(){Defaults();} あるデータブロックサイズをもつ空のTsStrクラスを作成する TsStr(int len); char*文字ストリングおよび長さはわかっているので、TsStrクラス を作成する TsStr(const char * cp, const int len); デストラクタ:文字全てをデリートする 〜TsStr(){delete[]pt;} TsStr=a TsStrクラスを割り当てる TsStr& operator=(const TsStr &b); TsStr=a char* stringクラスを割り当てる TsStr& oprator=(const char* bpt); 驕@TsStrクラス=一文字を割り当てる TsStr& oprator=(char b); 驕@TsStrクラス+TsStrクラスを連結する TsStr& oprator+(const TsStr &b)const; 驕@TsStrクラス+char*文字ストリングを連結する TsStr& oprator+(const char* bpt)const; 驕@TsStrクラスをTsStrクラスに添付する TsStr& oprator+=(const TsStr &b); 驕@char*文字ストリングをTsStrクラスに添付する TsStr& operator+=(const char* bpt); 一文字をTsStrクラスに添付する TsStr& operator+=(char b); TsStrクラスをchar*文字ストリングに変換する operetor char*(){return pt;} //変換演算子 TsStrクラスの一定リファレンスを一定char*文字ストリングに変換 する operator const char*()const{return pt;} //変換演算子 TsStrクラスをTsStrクラスと比較する int operator==(const TsStr &b)const{return strcmp(pt, b.pt)==0;} int operator !==(const TsStr &b)const{return strcmp(pt, b.pt)!=0;} int operator >(const TsStr &b)const{return strcmp(pt, b.pt)> 0;} int operator>=(const TsStr &b)const{return strcmp(pt, b.pt)>=0;} int operator< (const TsStr &b)const{return strcmp(pt, b.pt)< 0;} int operator<=(const TsStr &b)const{return strcmp(pt, b.pt)<=0;} TsStrクラスをchar*文字ストリングと比較する int operator==(const char*b)const{return strcmp(pt, b)==0;} int operator !=(const char*b)const{return strcmp(pt, b) !=0;} int operator> (const char*b)const{return strcmp(pt, b)> 0;} int operator>=(const char*b)const{return strcmp(pt, b)>=0;} int operator< (const char*b)const{return strcmp(pt, b)< 0;} int operator<=(const char*b)const{return strcmp(pt, b)<=0;} char*文字ストリングをTsStrクラスと比較する friend int operator==(const char*a, const TsStr &b){return strcmp(a,b.pt )==0;} friend int operator!=(const char*a, const TsStr &b){return strcmp(a,b.pt )!=0;} friend int operator> (const char*a, const TsStr &b){return strcmp(a,b.pt )> 0;} friend int operator>=(const char*a, const TsStr &b){return strcmp(a,b.pt )>=0;} friend int operator< (const char*a, const TsStr &b){return strcmp(a,b.pt )< 0;} friend int operator<=(const char*a, const TsStr &b){return strcmp(a,b.pt )<=0;} TsStrクラスのためのストリング出力演算子 friend ostream& operator <<(ostream& s, const TsStr& a){return s << a. pt;} TsStrクラスのためのストリング入力演算子−ライン毎 friend istream& operator >>(istream& s, TsStr& a); TsStrクラスのchar*文字ストリングのポインタを読み出す friend char* getPt(const TsStr& s){return s.pt;} TsStrクラスのストリング長を読み出す friend int strlen(const TsStr& s){return s.ln;} あるオフセットで、TsStrクラスの一文字を読み出す friend char ch(const TsStr& str, int offset){return str.pt[offset];} };// TsStrクラスの定義終了 本発明の環境下で使用されるクラスを含むクラスおよび
ファイルの記述が続く。
【0067】TsFile入出力クラスの定義 ヘッダーファイルtsfile.hは、TsFile、
TsFileReader、TsFileWrite
r、TsDataReader、TsDataWrit
erクラスの定義を含む。これらクラスにより、ファイ
ルの入力/出力作業をカプセル化することができる。
【0068】TsFileクラスにより、ファイルポイ
ンタを利用するUNIX(もっぱらX/OPEN社を介
してライセンス供与される登録商標)システムの呼び出
しをカプセル化することができ、ファイルの開閉はコン
ストラクタおよびデストラクタにより処理されるので、
出願人の仕事は大幅に簡略化される。
【0069】このカプセル化により作成されるその他の
クラスにより、一度に一ラインすなわち一度にファイル
全体の読み書きを行うことができる。
【0070】 TsFileクラス { // FILE * const fp: //ファイルポインタ TsFile( //コンストラクタ const char *path, //ファイルアクセス名前 const char *mode = "w" //開モード ); // 〜TsFile(); //デストラクタ int flush(); //待ち行列過負荷(s) char *gets(char *s); //読み出し時過負荷(s) int puts(char *s); //書き込み時過負荷(s) int putc(char c); //書き込み時過負荷(c) }; //TsFileクラス終了 // Ts FileReaderクラス //ファイルのラインの読み出し { TsFile *f; char *buffer; TsFileReader( //コンストラクタ const char *path, int buffer_size ); 〜TsFileReader(); //デストラクタ char *getnext(); //次のデータを読み出す }; TsFileWriterクラス //ラインをファイル内に書き込む { TsFile *f; enum{NEW, APPEND}; TsFileWriter( //コンストラクタ const char *path, int new_or_append ); 〜TsFileWriter(); //デストラクタ int putnext(char *buffer); //次のデータを書き込む int putnewline(); //新規ラインの文字を書き込む }; TsDataReaderクラス { Singly_linked_list(TsStr) datalist; TsDataReader(); //コンストラクタ 〜TsDataReader(); //デストラクタ void loadfile(const char *path); //ファイルをリスト内にロードする Singly_linked_list(TsStr)&getlist(); //リスト内を読む void print(); //リストを印刷する }; TsDataWriterクラス { Singly_linked_list(TsStr) datalist; TsDataWriter(); //コンストラクタ 〜TsDataWriter(); //デストラクタ void setlist(Singly_linked_list(TsStr)& L); //書き込みのためにリ ストを編成する void dumpfile(const char *path); //ファイルからリストを出力する void print(); //リストを印刷する }; 中立データファイルNDFに関しては、そのフォーマッ
トにより、モデルを連続的に保存することができる。フ
ァイルNDFは中立情報モデルNIMまたはツールメタ
モデルの形態でモデルを表すことができる。ファイルN
DFにより、属性値ととともに、モデルの表示ラインの
クラス、オブジェクト、属性および座標を保存すること
ができる。
【0071】機構Dのオブジェクト(ダイナモオブジェ
クトと呼ばれる)は、モデルを保存することができる、
ファイルNDF内への書き込み機能を有する。ファイル
NDFの要求により編集が可能であることは、テストデ
ータを作成する際に有益である。NDFフォーマット
は、テスト実行時の結果を評価する場合に便利である。
ブリッジの開発者は、結果を保存または評価するため、
ならびにブリッジの処理の際、種々の中間点においてテ
ストを追跡し再実行するためにファイルNDFを使用す
ることができる。
【0072】 テキストの構文分析のための入力ファイルのレジスタ TsBufferクラス { char*buf; //レジスタのポインタ char* cp; //現在の文字の位置 int bufSize; //レジスタ容量 int lineNbr; //入力ファイル内の現在のライン番号 int indent; //スペースおよび/またはスペースとして数えるタブ( 1から8) int rescan; //1:読み出しスキップ、レジスタの同内容を使用する FILE* fd; //コンストラクタによって開かれるファイル TsBuffer(const char*aFilePath, int aLen = 256); 〜TsBuffer(){delete[]buf;} テキストおよび値とレジスタの現在位置との対応関係確立、ポインタの移動 int TsBuffer::match(const char* v) 注釈ライン用テスト int TsBuffer::isComment() インデント検索、タブ調整 int TsBuffer::scanIndent() テキストライン、無視された注釈の読み出し、インデントのカウント、ボーダ ー\nの設定 int TsBuffer::readBuf() 「delim」によって限定された語の読み出し char* TsBuffer::getWord(char delim) 小数値の検索、整数値への値の返し、カーソル移動 intTsBuffer::scanDec() NDFモデルの読み出し、ダイナモオブジェクトの作成 TsReadNDFクラス:TsBufferレジスタはプロテクトされる { TsStr metaModelName; TsStr modelName; TsStr objName; int objNdx; TsStr propName; int lineNbr; char* value; TsDynamo*dyn; TsOBJ* at; int status; TsReadNDF(const char*aFileName); }; NDFファイルの読み出しおよびダイナモオブジェクトのロード コンストラクタは全体のアルゴリズムである。
【0073】TsReadNDF::TsReadNDF(constchar*aFileNa
me):TsBuffer(aFileName) NDFファイルのシンタックス NDFファイルのシンタックスにおいては、インデント
はネスティングを示す。注釈ラインは「*」で始まる。
【0074】NDFファイルのメタモデル NDFファイルの以下のフォーマットにより、メタモデ
ル、モデル、オブジェクト、属性および値、ならびにモ
デルを構成するリンクを指定することができる。
【0075】* NDF rev 1.0 //ファイルを識別するための注釈ライン MetaModelName:metaModelName //モデルの読み出しに必要なメタモデルの 名前 Model: modelName //ダイナモオブジェクトを作成する(モデルの名前、メ タモデルの名前) Object: Class,ObjNdx //オブジェクトを作成する(クラス、ObjNdx インデックス) propld: value //単一値の属性を設定する propsym: //全体またはブロック内で多重値を設定する propNdx: value... //ラインあたり一つの値 Link: InkName,InkNdx //リンクを作成する(名前およびリンクのインデッ クス) FROM: Class,objNdx //最終点を設定する TO: Class, objNdx //最終点を設定する //"metaModelName.mta"ファイルは、中立情報モデルNIM、PX8などのメタ モデルを供給する。
【0076】//従って"modelName.ndf"ファイルには構
造がない。
【0077】//例:* NDF rev 1.0 MetaModelName: nim Model: ndfsample Object: BEN,1 TITLE: My Object X NOTES: 1: %PX8_CODE myobjx 2: %PX8_NAME My Object X Object: BEN,2 TITLE: another obj NOTES: 1: %PX8_CODE nother 2: %PX8_NAME another obj Object: ATT,1 DATY: DATE NOTES: 1: %PX8_CODE bdate 2: %PX8_NAME birthdate PIC: YY-MM-DD SIZE: 8 TITLE: birthdate Link: BEN1.1 FROM: BEN,2 TO: ATT,1 結論として、ブリッジをつくるために、インタープリッ
トされるプロプリエタリ言語ではなく実行言語(例えば
C++型の)を使用する、本発明によるデータモデルの
取り扱い方法についての前記説明により、複数のソフト
ウェア工学ツールのインターオペラビリティを可能にす
る新しい技術に応用されるようになっている前記方法の
有利な技術的効果を明らかにすることができる。提供す
る中立情報モデルにより、あらゆるツールを簡単に表す
ことができるだけでなく内部モデルの表現も可能である
ので、ユーザが開発データを内部的に表現するためのみ
ずからの情報モデルを保存しておくこと、あるいは、共
通リファレンシャルに組み合わされる種々のソフトウェ
ア工学ツール(CASE)用として設計された例えばデ
ータ交換フォーマット(CDIF)など、産業界のあら
ゆる標準を利用することができる。コードの再利用性が
十二分に活用されるので、このようなブリッジの発売開
始までの納期に関する制約を満たすことができる一方、
コードライブラリは再利用可能であるので、前記ブリッ
ジの開発時間およびコストはきわめて顕著に削減され
る。同様に、あるモデルからクライアントの個別のニー
ズへの移行の過程を進展させきめ細かな対応をはかるた
めのブリッジの新規構成要素の追加プロシジャが大幅に
簡略化される。本方法は、単純かつ単一の実行可能命令
の応用と考えることができることから、性能がきわめて
著しく向上する。
【図面の簡単な説明】
【図1】種々のソフトウェア工学ツール間の本発明によ
るインタオペラビリティーの例を示す図である。
【図2】本発明を実施することができる種々の構成要素
が示されるアーキテクチャを示す図である。
【符号の説明】
Ba、Bb、Bc、Bd ブリッジ NIM 中間フォーマット Ta、Tb、Tc、Td ソフトウェア工学ツール
フロントページの続き (72)発明者 ジエイムズ・キソ アメリカ合衆国、マサチユーセツツ・ 01720、アクトン、グレート・ロード・ 38・エイ、ナンバー・301 (72)発明者 エドワード・ストラスバージヤー アメリカ合衆国、マサチユーセツツ・ 01821、ビレリカ、アンジエラ・レーン・ 23

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 複数のソフトウェア工学ツール間でのモ
    デルの転送、及び、あるツールのフォーマットを中立か
    つ単一の中間フォーマットを経由して別のフォーマット
    に変換し得るブリッジを使用して、データモデルを変換
    則モデルに適用するためのデータモデルの取り扱い方法
    であって、実行された言語をもとにしてオブジェクト指
    向と呼ばれるアプローチによりブリッジを作成し、該ブ
    リッジが、ステップのダイナミックチェイニングロジッ
    クを記述する制御言語により、連続して起動される複数
    のステップにおいて一律または条件的にデータモデルの
    変換を行うことができる実行可能命令であり、チェイニ
    ングがパラメータ化され名前の付けられたプロシジャで
    あり、各ステップが、コードが再使用可能なクラスのア
    センブリをもとにして開発される実行可能命令であり、
    プロシジャを起動する際、単に、対応するプロシジャの
    名前およびパラメータを与えるだけでよいことを特徴と
    するデータモデルの取り扱い方法。
  2. 【請求項2】 ブリッジの開発のために、モデル化オブ
    ジェクトのダイナミックアロケーションを使用すること
    により、リファレンシャルまたは外部ファイル内のメモ
    リに保存されているモデルおよびメタモデルを表すこと
    ができる再使用可能構成要素が作られ、このクラスのオ
    ブジェクトがメモリ構造全体を統合し、メモリにロード
    されたモデルのデータを扱うための機能を供給すること
    を特徴とする請求項1に記載のデータモデルの取り扱い
    方法。
  3. 【請求項3】 ブリッジの開発のために、ツールエキス
    ポートファイルの種々のフォーマットを符号化し解読し
    得る再利用可能なクラスがつくられ、このクラスはツー
    ルエキスポートのレコードをカプセル化し、インポート
    ファイルのレコードフォーマットを記述するために使わ
    れる一方、初期化時には、メモリに保存されたモデルお
    よびメタモデルの表現クラスを使用して、テキストファ
    イルからツールのメタモデルが読み込まれると同時に、
    ブリッジのコードによりツールエキスポートファイルを
    読み、レコードに固有のフィールドにアクセスし、メモ
    リに保存されたモデルおよびメタモデルの表現クラスの
    機能を使用することによりオブジェクトおよびその属性
    をつくることができることを特徴とする請求項1または
    2に記載のデータモデルの取り扱い方法。
  4. 【請求項4】 ブリッジの開発のために、C型言語のキ
    ャラクタストリングとの適合性を保ちつつ、割り当て、
    連結、サブストリングおよび動的メモリ再割り当て機能
    をともなう比較演算子の引き受けが可能なキャラクタス
    トリングの取り扱い再利用可能なクラスがつくられるこ
    とを特徴とする請求項1から3のいずれか一項に記載の
    データモデルの取り扱い方法。
JP8327058A 1995-12-08 1996-12-06 ソフトウェア工学で使われるデータモデルの取り扱い方法 Pending JPH1040087A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR9514576A FR2742245B1 (fr) 1995-12-08 1995-12-08 Procede de manipulation de modeles de donnees utilises en genie logiciel
FR9514576 1995-12-08

Publications (1)

Publication Number Publication Date
JPH1040087A true JPH1040087A (ja) 1998-02-13

Family

ID=9485311

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8327058A Pending JPH1040087A (ja) 1995-12-08 1996-12-06 ソフトウェア工学で使われるデータモデルの取り扱い方法

Country Status (6)

Country Link
US (1) US5911074A (ja)
EP (1) EP0784266B1 (ja)
JP (1) JPH1040087A (ja)
CA (1) CA2192049C (ja)
DE (1) DE69615813D1 (ja)
FR (1) FR2742245B1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006164258A (ja) 2004-12-06 2006-06-22 Internatl Business Mach Corp <Ibm> 特定のプラットフォームによって使用するためのグラフィカル・ユーザ・インターフェース(gui)モデルを生成するための方法、システム、およびプログラム
US7240141B2 (en) * 2004-04-09 2007-07-03 Broadcom Corporation Programmable inter-virtual channel and intra-virtual channel instructions issuing rules for an I/O bus of a system-on-a-chip processor

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6063128A (en) * 1996-03-06 2000-05-16 Bentley Systems, Incorporated Object-oriented computerized modeling system
US5907707A (en) * 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java
US6145124A (en) * 1997-08-12 2000-11-07 Veronex Technologies, Inc. Software optimization system
US6847384B1 (en) * 1998-05-14 2005-01-25 Autodesk, Inc. Translating objects between software applications which employ different data formats
US6256596B1 (en) * 1998-06-30 2001-07-03 Autodesk, Inc. Extensible framework for capturing feature information in a neutral format
US6343265B1 (en) * 1998-07-28 2002-01-29 International Business Machines Corporation System and method for mapping a design model to a common repository with context preservation
US6111575A (en) * 1998-09-24 2000-08-29 International Business Machines Corporation Graphical undo/redo manager and method
US6341291B1 (en) 1998-09-28 2002-01-22 Bentley Systems, Inc. System for collaborative engineering using component and file-oriented tools
US6389383B1 (en) * 1999-08-13 2002-05-14 Texas Instruments Incorporated System and method for interfacing software and hardware
US6560772B1 (en) * 1999-10-15 2003-05-06 International Business Machines Corporation Method, system, and program for accessing data in different environments
US7401097B1 (en) 2000-01-21 2008-07-15 International Business Machines Corporation System and method for creating compilations of content
US7089239B1 (en) 2000-01-21 2006-08-08 International Business Machines Corporation Method and system for preventing mutually exclusive content entities stored in a data repository to be included in the same compilation of content
US7613993B1 (en) 2000-01-21 2009-11-03 International Business Machines Corporation Prerequisite checking in a system for creating compilations of content
US8589777B1 (en) * 2000-01-21 2013-11-19 International Business Machines Corporation Method and system for calculating cost of a compilation of content
US7356766B1 (en) 2000-01-21 2008-04-08 International Business Machines Corp. Method and system for adding content to a content object stored in a data repository
US7007034B1 (en) 2000-01-21 2006-02-28 International Business Machines Corporation File structure for storing content objects in a data repository
US7043488B1 (en) 2000-01-21 2006-05-09 International Business Machines Corporation Method and system for storing hierarchical content objects in a data repository
US7076494B1 (en) 2000-01-21 2006-07-11 International Business Machines Corporation Providing a functional layer for facilitating creation and manipulation of compilations of content
US7340481B1 (en) 2000-01-21 2008-03-04 International Business Machines Corp. Method and system for adding user-provided content to a content object stored in a data repository
US7346844B1 (en) 2000-01-21 2008-03-18 International Business Machines, Corporation Method and system for moving content in a content object stored in a data repository
US6986102B1 (en) * 2000-01-21 2006-01-10 International Business Machines Corporation Method and configurable model for storing hierarchical data in a non-hierarchical data repository
US6920458B1 (en) 2000-09-22 2005-07-19 Sas Institute Inc. Model repository
EP1239375B1 (de) 2001-03-08 2014-05-07 Sap Ag Verfahren zum Konvertieren von Dokumenten
US6915506B2 (en) * 2001-03-27 2005-07-05 International Business Machines Corporation Method and apparatus for evaluating results of multiple software tools
US7039622B2 (en) * 2001-09-12 2006-05-02 Sas Institute Inc. Computer-implemented knowledge repository interface system and method
US6988062B2 (en) * 2001-09-20 2006-01-17 International Business Machines Corporation Metamodel generation on the basis of examples of target models
US6782305B2 (en) * 2001-10-01 2004-08-24 Massachusetts Institute Of Technology Method of geometric information sharing and parametric consistency maintenance in a collaborative design environment
DE112004001153T5 (de) * 2003-06-25 2006-06-22 Siemens Medical Solutions Health Services Corp. Datenmigration- und Formattransformationssystem
US7536448B2 (en) * 2004-09-02 2009-05-19 Cisco Technology, Inc. Auto-generation of configuration and topology models
US8935657B2 (en) * 2004-12-10 2015-01-13 International Business Machines Corporation Model-to-model transformation by kind
US9026985B2 (en) * 2004-12-10 2015-05-05 International Business Machines Corporation Dynamically configurable model-to-model transformation engine
US20070028211A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Interpreter security mechanism
EP1920357A1 (de) * 2005-08-30 2008-05-14 Veit Florian Lier Migration und transformation von datenstrukturen
US20070101261A1 (en) * 2005-10-14 2007-05-03 International Business Machines Corporation System and method for dynamic model-driven transformations
US20070112878A1 (en) * 2005-11-11 2007-05-17 International Business Machines Corporation Computer method and system for coherent source and target model transformation
CN100587666C (zh) 2006-08-15 2010-02-03 国际商业机器公司 模型变换中分析和呈现冲突以及自动协调模型变换的方法和系统
US20120216015A1 (en) * 2011-02-22 2012-08-23 Mitra Sumanranjan S System and method to concurrently execute a plurality of object oriented platform independent programs by utilizing memory accessible by both a processor and a co-processor
US20230412420A1 (en) * 2022-06-15 2023-12-21 Blackberry Limited Method and system for automotive data ingestion

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69126857T2 (de) * 1991-01-18 1998-01-08 Ibm Objektorientierte Programmierungsplattform
US5515536A (en) * 1992-11-13 1996-05-07 Microsoft Corporation Method and system for invoking methods of an object through a dispatching interface
US5339434A (en) * 1992-12-07 1994-08-16 Trw Inc. Heterogeneous data translation system
US5627979A (en) * 1994-07-18 1997-05-06 International Business Machines Corporation System and method for providing a graphical user interface for mapping and accessing objects in data stores
EP0752646B1 (en) * 1995-07-07 2002-03-27 Sun Microsystems, Inc. Data access implementation of device driver interface
US5692047A (en) * 1995-12-08 1997-11-25 Sun Microsystems, Inc. System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240141B2 (en) * 2004-04-09 2007-07-03 Broadcom Corporation Programmable inter-virtual channel and intra-virtual channel instructions issuing rules for an I/O bus of a system-on-a-chip processor
JP2006164258A (ja) 2004-12-06 2006-06-22 Internatl Business Mach Corp <Ibm> 特定のプラットフォームによって使用するためのグラフィカル・ユーザ・インターフェース(gui)モデルを生成するための方法、システム、およびプログラム

Also Published As

Publication number Publication date
FR2742245B1 (fr) 1998-01-23
EP0784266A1 (fr) 1997-07-16
CA2192049A1 (fr) 1997-06-09
US5911074A (en) 1999-06-08
DE69615813D1 (de) 2001-11-15
EP0784266B1 (fr) 2001-10-10
CA2192049C (fr) 2000-08-08
FR2742245A1 (fr) 1997-06-13

Similar Documents

Publication Publication Date Title
JPH1040087A (ja) ソフトウェア工学で使われるデータモデルの取り扱い方法
Carlsson et al. SICStus Prolog—the first 25 years
US5873097A (en) Update mechanism for computer storage container manager
US5146593A (en) Procedure call interface
Schäling The boost C++ libraries
US5652879A (en) Dynamic value mechanism for computer storage container manager enabling access of objects by multiple application programs
US6023578A (en) Systems, methods and computer program products for generating an object oriented application for an object oriented environment
US6029207A (en) Apparatus and method for dynamic linking of computer software components
EP0861467B1 (en) An object oriented programming based global registry system and method
EP0786109B1 (en) Object-oriented system for configuration history management
JP3437849B2 (ja) オブジェクト指向プログラミングを支援するデータベース管理システム及び方法
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
US6633892B1 (en) Archiving tool
JPH05197697A (ja) ソフトウエア・システム構築装置及び方法
US20050198624A1 (en) Method and system for program transformation
US8615729B2 (en) Extending existing model-to-model transformations
US5062039A (en) Sharing of workspaces in interactive processing using workspace name tables for linking of workspaces
US8935657B2 (en) Model-to-model transformation by kind
Dearle On the construction of persistent programming environments
GB2373349A (en) Data definition language
US5963955A (en) Bridge for exporting and importing objects between object oriented programming environments
US9026985B2 (en) Dynamically configurable model-to-model transformation engine
Lyu et al. A procedure-based dynamic software update
US6311227B1 (en) Procedure calling method
Cracknell et al. TABS: script-based software framework for research in image processing, analysis and understanding