JPH1185496A - オブジェクト指向プログラム作成支援装置 - Google Patents

オブジェクト指向プログラム作成支援装置

Info

Publication number
JPH1185496A
JPH1185496A JP9238571A JP23857197A JPH1185496A JP H1185496 A JPH1185496 A JP H1185496A JP 9238571 A JP9238571 A JP 9238571A JP 23857197 A JP23857197 A JP 23857197A JP H1185496 A JPH1185496 A JP H1185496A
Authority
JP
Japan
Prior art keywords
information
class
analysis
support device
convention
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
JP9238571A
Other languages
English (en)
Inventor
Yuji Hotta
勇次 堀田
Shigeki Naota
繁樹 直田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP9238571A priority Critical patent/JPH1185496A/ja
Priority to US09/046,557 priority patent/US6237139B1/en
Publication of JPH1185496A publication Critical patent/JPH1185496A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向プログラムの規約を記述す
る規約情報を用いて入力プログラムを解析した結果をチ
ェックし、規約に違反している部分を指摘し、かつ修正
例を出力することができるオブジェクト指向プログラム
作成支援装置を提供する。 【解決手段】 オブジェクト指向プログラムを入力とし
て、入力プログラムを解析する構文解析部2と、プログ
ラムの規約を記述する規約情報を格納する格納部4と、
入力プログラムの構文解析結果と規約情報とを照合する
規約照合部5と、照合した結果に基づき修正されたプロ
グラムを出力する解析情報正規化部6とを有する

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
プログラムの開発の生産性向上を図るオブジェクト指向
プログラム作成支援装置に関する。プログラム言語はコ
ンピュータの処理手続きを記述するためのものであり、
C言語やC++言語などが知られている。最近は、オブ
ジェクト指向プログラムを記述するのに適したC++言
語が広く用いられている。
【0002】
【従来の技術】従来、作成したプログラムをコンパイラ
でコンパイルした場合、エラーメッセージが出力され
る。一般に、このエラーメッセージは、プログラム上の
エラーの位置と文法の説明程度の情報の提示である。プ
ログラム作成者は、このエラーメッセージに基づきプロ
グラムを検証し、エラーの修正を行う。
【0003】
【発明が解決しようとする課題】しかしながら、エラー
メッセージはプログラム作成や修正のためのガイドとし
ては不十分であり、プログラム作成者に大きな負担とな
っている。また、オブジェクト指向プログラムにおいて
は、プログラムが文法的に間違いではなくても、不適切
な記述がされていた場合、上記エラーメッセージは出力
されない。したがって、オブジェクト指向プログラム中
の上記のような不適切な部分は見過ごされ、バグとして
プログラム内に残り、予期しない動きとなって現われる
場合がある。
【0004】したがって、本発明は上記従来技術の問題
点を解決し、オブジェクト指向プログラムの規約を記述
する規約情報を用いて入力プログラムを解析した結果を
チェックし、規約に違反している部分を指摘し、かつ修
正例を出力することができるオブジェクト指向プログラ
ム作成支援装置を提供することを目的とする。
【0005】
【課題を解決するための手段】請求項1に記載の発明
は、オブジェクト指向プログラムを入力として、入力プ
ログラムを解析する構文解析部と、プログラムの規約を
記述する規約情報を格納する格納部と、入力プログラム
の構文解析結果と規約情報とを照合する規約照合部と、
照合した結果に基づき修正されたプログラムを出力する
解析情報正規化部とを有するオブジェクト指向プログラ
ム作成支援装置である。
【0006】請求項2に記載の発明は、規約照合部は解
析結果を利用して、グローバル変数の出現をチェック
し、チェック結果に基づき解析情報正規化部はグローバ
ル変数を使わないコード例を出力することを特徴とする
請求項1記載のオブジェクト指向プログラム作成支援装
置である。請求項3に記載の発明は、規約照合部は解析
結果を利用して、オブジェクトの生成が正しい方法で行
われているかチェックし、チェック結果に基づき解析情
報正規化部はオブジェクトの正しい生成例を出力するこ
とを特徴とする請求項1記載のオブジェクト指向プログ
ラム作成支援装置である。
【0007】請求項4に記載の発明は、規約照合部は解
析結果を利用して、オブジェクトの破壊が正しい方法で
行われているかチェックし、チェック結果に基づき解析
情報正規化部はオブジェクトの正しい破壊例を出力する
ことを特徴とする請求項1記載のオブジェクト指向プロ
グラム作成支援装置である。請求項5に記載の発明は、
解析結果から得られるクラスオブジェクトに対するメモ
リ操作に関する情報を用いて、規約照合部はオブジェク
トの初期化が正しい方法で行われているかチェックし、
チェック結果に応じて規約照合部と解析情報正規化部は
オブジェクトの正しい初期化例を出力することを特徴と
する請求項1記載のオブジェクト指向プログラム作成支
援装置である。
【0008】請求項6に記載の発明は、解析結果から得
られるクラスオブジェクトに対するメモリ操作に関する
情報を用いて、規約照合部はオブジェクトの複写が正し
い方法で行われているかチェックし、チェック結果に応
じて解析情報正規化部はオブジェクトの正しい複写例を
出力することを特徴とする請求項1記載のオブジェクト
指向プログラム作成支援装置である。
【0009】請求項7に記載の発明は、規約照合部は解
析結果を利用して、オブジェクトを値渡しにしていない
かチェックし、チェック結果に基づいて解析情報正規化
部はオブジェクトを値渡しにしない修正例を出力するこ
とを特徴とする請求項1記載のオブジェクト指向プログ
ラム作成支援装置である。請求項8に記載の発明は、規
約照合部は解析結果を利用して、データメンバのクラス
外への公開がないかチェックし、チェック結果に基づい
て解析情報正規化部はデータメンバをクラス外に公開し
ない修正例を出力することを特徴とする請求項1記載の
オブジェクト指向プログラム作成支援装置である。
【0010】請求項9に記載の発明は、規約照合部は解
析結果を利用して、メンバ関数がデータメンバのポイン
タを返していないかチェックし、チェック結果に基づい
て解析情報正規化部はメンバ関数がデータメンバのポイ
ンタを返さない修正例を出力することを特徴とする請求
項1記載のオブジェクト指向プログラム作成支援装置で
ある。
【0011】請求項10に記載の発明は、規約照合部は
解析結果を利用して、メンバ関数が単純なデータアクセ
ス関数になっていないかチェックし、チェック結果に基
づき解析情報正規化部はメンバ関数が単純なデータアク
セス関数にならないコード例を出力することを特徴とす
る請求項1記載のオブジェクト指向プログラム作成支援
装置である。
【0012】請求項11に記載の発明は、規約照合部は
解析結果を利用して、データメンバにポインタがある場
合にコピーコンストラクタが正しく定義されているかチ
ェックし、チェック結果に基づきユーザの意図を確認し
た上で、解析情報正規化部はデータメンバにポインタが
ある場合にコピーコンストラクタの正しい定義例を出力
することを特徴とする請求項1記載のオブジェクト指向
プログラム作成支援装置である。
【0013】請求項12に記載の発明は、規約照合部は
解析結果を利用して、データメンバにポインタがある場
合にデストラクタが正しく定義されているかチェック
し、チェック結果に基づきユーザの意図を確認した上
で、解析情報正規化部はデータメンバにポインタがある
場合にデストラクタの正しい定義例を出力することを特
徴とする請求項1記載のオブジェクト指向プログラム作
成支援装置である。
【0014】請求項13に記載の発明は、規約照合部は
解析結果を利用して、データメンバにポインタがある場
合に代入演算子が正しく定義されているかチェックし、
チェック結果に基づきユーザの意図を確認した上で、解
析情報正規化部はデータメンバにポインタがある場合に
代入演算子の正しい定義例を出力することを特徴とする
請求項1記載のオブジェクト指向プログラム作成支援装
置である。
【0015】請求項14に記載の発明は、規約照合部は
解析結果を利用して、特定のアクセス指定の継承の存在
をチェックし、チェック結果に基づき解析情報正規化部
は継承の正しい定義例を出力することを特徴とする請求
項1記載のオブジェクト指向プログラム作成支援装置で
ある。請求項15に記載の発明は、規約照合部は解析結
果を利用して、継承した非仮想関数を再定義していない
かチェックし、チェック結果に基づき解析情報正規化部
は継承した非仮想関数を再定義しない修正例を出力する
ことを特徴とする請求項1記載のオブジェクト指向プロ
グラム作成支援装置である。
【0016】請求項16に記載の発明は、規約照合部は
解析結果を利用して、オブジェクトの破壊操作が継承さ
れたクラスで正しく動作されているかチェックし、チェ
ック結果に基づいて解析情報正規化部はオブジェクトの
破壊操作が継承されたクラスで正しく動作する修正例を
出力することを特徴とする請求項1記載のオブジェクト
指向プログラム作成支援装置である。
【0017】請求項17に記載の発明は、規約照合部は
解析結果を利用して、同じベースクラスを持つクラスを
多重継承するときに元のベースクラスを仮想ベースクラ
スとして継承しているかチェックし、チェック結果に基
づいてユーザの意図を確認した上で、解析情報正規化部
は同じベースクラスを持つクラスを多重継承するときに
元のベースクラスを仮想ベースクラスとして継承するコ
ード例を出力することを特徴とする請求項1記載のオブ
ジェクト指向プログラム作成支援装置である。
【0018】請求項18に記載の発明は、規約照合部は
解析結果を利用して、多重継承の指定でベースクラスが
複数並ぶときにその全てにアクセスレベルが明示してあ
るかチェックし、チェック結果に基づいてユーザの意図
を確認した上で、解析情報正規化部は多重継承の指定で
ベースクラスが複数並ぶときにその全てにアクセスレベ
ルの明示がないことを出力することを特徴とする請求項
1記載のオブジェクト指向プログラム作成支援装置であ
る。
【0019】
【発明の実施の形態】図1は、本発明のオフジェクト指
向プログラム作成支援装置の原理を示す図である。オフ
ジェクト指向プログラム作成支援装置は、構文解析部
2、構文解析情報3及び規約情報4を格納する格納部
8、規約照合部5、解析情報正規化部6及び出力部7を
具備している。
【0020】構文解析部2は、入力プログラム1の構文
を解析して、入力プログラムの構文解析結果を示す構文
解析情報3を出力する。規約照合部5は、構文解析情報
3と規約情報4とを照合する。解析情報正規化部6は、
規約照合部5が使った構文解析情報3と規約情報4によ
り解析した情報を正規化して、解析情報の修正例を出力
する。出力部7は、規約照合部5が照合した結果又は解
析情報正規化部6が生成した修正例を出力する。
【0021】更に詳しく説明すると、構文解析部2は入
力プログラム1を入力して、クラス名、クラスの各デー
タメンバについて、それぞれ名前、型等を各メンバ関数
についてはパラメータの型情報や復帰情報をそれぞれ検
出する。更に、クラスの演算子、オブジェクトのメモリ
操作を実行する式、クラスの継承関係、大域変数につい
ての情報も検出し、これらを構文解析情報3としてまと
める。規約照合部5は構文解析情報3を参照しながら、
入力プログラム1のコーディングの規約となっている部
分を規約情報4と照合し、規約から外れた部分を出力部
7に出力する。また、解析情報正規化部6が構文解析情
報3中のプログラム情報を規約情報4に沿う形に正規化
することで、プログラムの修正例を出力部7に出力す
る。
【0022】ここで、構文解析部2が出力する構文解析
情報3について、図2を参照して説明する。図2は、図
示してあるC++で記述されたプログラム例を構文解析
した結果を示す図である。構文解析結果を示す構文解析
情報3は、グローバル情報、クラス定義情報、ベースク
ラス情報、関数定義リスト、式情報、メンバ定義表、定
義関数リスト、データ定義情報等から構成される。グロ
ーバル情報はクラス、関数、変数等の種別を含み、これ
らの定義情報が規定される。例えば、クラスの場合、ク
ラス定義情報としてメンバ定義表とベースクラスリスト
を含む。メンバ定義表は、構造体(struct) を構成する
メンバの種別、すなわちメンバ関数(手続きに相当)や
データメンバ(データ構造に相当)ごとに定義情報を含
む。メンバ関数の定義情報は関数定義リストを有する。
関数定義リストは、呼び出し形式、復帰コード返却情報
等を含む。またデータメンバはデータ定義情報として、
型やポインタを含む。またベースクラスリストは、ベー
スクラス情報として、アクセスの種別やクラスを含む。
アクセス"private" は、そのクラス内でしかアクセスで
きないことを意味する。また、アクセス"public"は他の
クラスからもアクセスできることを意味する。関数定義
リストは呼び出し形式、式情報を含む。式情報は、具体
的な式の情報を含む。
【0023】図3は、規約情報4の構造を示す図であ
る。規約情報4は記憶部8内においては、規約構造とし
て格納されている。規約構造は、規約インデックスと処
理とを規定する。例えば、public T1 v1に対しては処理
p34の処理インデックスが規定さている。解析情報正
規化部6の正規化処理は、この処理インデックスに対応
する処理内容が記述しておき、処理インデックスが与え
られたときに記述されている処理内容を実行することで
ある。
【0024】規約照合部5は、構文解析情報3から必要
な情報を取り出して、図3に示すようにして規約の形式
に変換する。グローバル(トップレベル)の情報とし
て、クラス、グローバル変数等がある。これらを規約項
目とよぶ。各規約項目は1個以上の複数の規約を持つ。
クラスならばクラス全般の規約があるが、そのデータメ
ンバ、メンバ関数等に関する規約として内部規約を持
つ。規約は解析情報を正規化するための処理を規定す
る。
【0025】図4に、規約照合部5の動作を示す。この
動作を説明するために、今、図5に示す入力プログラム
例とその構文解析した結果を参照する。規約照合部5は
解析情報を読み込み(ステップ1)、解析情報の有無を
判断する(ステップ2)。図示する例の場合、ますグロ
ーバル情報からクラスBoxについて処理を開始する。
次に、規約照合部5は、解析情報に対応する規約がある
かどうかを判断する(ステップ3)。クラスや関数等は
対応する変換処理を持ち、その処理の実行により解析情
報を規約形式に変換する。解析情報Boxの場合、クラ
スに対応する処理の有無を調べ、処理がある場合にはそ
れを内部のメモリ等へ記憶しておく。次に、規約照合部
5は、変換に必要な情報を収集する(ステップ4)。ク
ラスに対応する規約形式への変換処理はBoxのクラス
定義情報から情報を辿り、解析情報の規約形式(規約イ
ンデックス)への変換に必要な情報を収集する。次に、
規約照合部5は、解析情報を規約形式に変換し、規約イ
ンデックス情報生成する(ステップ5)。次に、規約照
合部5は、クラス固有の「value t 」「value x 」等
は一般的な表現形式「T1」「v1」等に変換し、これ
を保存する(ステップ6)。次に、規約照合部5は、規
約構造の情報を規約インデックスで照合し、対応する正
規化処理を取り出す(ステップ7)。次に、規約照合部
5は、取り出した処理インデックスで照合し、処理内容
を取り出す(ステップ8)。そして、解析情報正規化部
6が処理内容を実行して入力プログラムを変換し、正規
化したプログラム(修正例)を生成する(ステップ
9)。最後に、この正規化したプログラムが出力部7か
ら出力される(ステップ10)。
【0026】次に、請求項2〜18に対応した具体的処
理について説明する。請求項2の場合解析情報に対応す
る変換処理を実行し、規約形式に変換する。規約との照
合によりグローバル変数に関する規約が取り出される。
グローバル変数は一つのstructにまとめる規約があり、
必要なら処理を実行して修正案を通知する。
【0027】入力例を示す。 〔入力例〕 int item number=100; int proc( ) { int num =item number; ・・・ } 解析情報からは以下の情報を取り出す。 〔解析情報〕 変数名 型 グローバル ・・・ item number int true ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 global T1 v1 T1:int v1:item number 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 global T1 v1 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ グローバル変数を集めて一つのstructにまとめる・・ 以下に出力例を示す。 〔出力例〕 struct Global { static int item number; }; int Global: :item number=100; int proc( ) { int lindex=Global: :item number; ・・・ } 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「global T1 v1」の規約を獲得、グローバ
ル情報からitem numberという変数情報を獲得、変数定
義情報によりそれがグローバル変数であることが分か
る。これによりこの変数をグローバル変数の規約に適用
する。
【0028】また、上記処理を図示すると、図6の通り
である。請求項3の場合解析情報に対応する変換処理を
実行し、規約形式に変換する。規約との照合によりオブ
ジェクト配列の生成に関する規約が取り出される。オブ
ジェクト配列はnew で生成する規約があり、必要なら処
理を実行して修正案を通知する。
【0029】入力例を示す。 〔入力例〕 ・・ Box *b=(Box *)malloc(sizeof(Box)*max); ・・ 解析情報からは以下の情報を取り出す。 〔解析情報〕 式 ・・・ Box *b=(Box *)malloc(sizeof(Box)*max)・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 T1 *v1=(T1 *)malloc(sizeof(T1)*v2) T1:Box v1:b v2:max 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 T1 *v1=(T1 *)malloc(sizeof(T1)*v2) p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ mallocでの領域確保をnew に置き換える・・ 以下に出力例を示す。 〔出力例〕 ・・ Box *b=new Box[max]; ・・ 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「T1 *v1=(T1 *)malloc(sizeof(T1)*v2)
」の規約を獲得、グローバル情報からAという関数名
情報を獲得、関数定義情報により、Box *b=(Box*)mall
oc(sizeof(Box)*max)という式があることが分かる。こ
れによりこの式をオブジェクト配列生成の規約に適用す
る。
【0030】また、上記処理を図示すると、図7の通り
である。 請求項4の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりオブジェクト配列の破壊に関
する規約が取り出される。オブジェクト配列はdelete
[ ] で破壊する規約があり、必要なら処理を実行して修
正案を通知する。
【0031】入力例を示す。 〔入力例〕 X *p=new X[n]; ・・ delete p; 解析情報からは以下の情報を使用する。 〔解析情報〕 式 生成 delete p new X[n] 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 delete v1 new T1[v2] T1:X v1:p v2:n 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 delete v1 new T1[v2] p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ deleteでの破壊をdelete[ ] に置き換える・・ 以下に出力例を示す。 〔出力例〕 X *p=new X[n]; ・・ delete [ ]p; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「delete v1 new T1[v2]」−の規約を獲
得、グローバル情報からAという関数名情報を獲得、関
数定義情報により、delete p, X *p=new X[n]という式
があることが分かる。これによりこの式をオブジェクト
配列破壊の規約に適用する。
【0032】また、上記処理を図示すると、図8の通り
である。 請求項5の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりオブジェクトの初期化に関す
る規約が取り出される。オブジェクトの初期化はコンス
トラクタで行う規約があり、必要なら処理を実行して修
正案を通知する。
【0033】入力例を示す。 〔入力例〕 ・・ T *p; p =(T *)malloc(sizeof(T)); memset(p, 0, sizeof(T)); ・・ 解析情報からは以下の情報を使用する。 〔解析情報〕 式 ・・・ memset(b, 0, sizeof(Box)) ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 memset(v1, v2, sizeof(T1)) T1:Box v1:b v2:0 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 memset(v1, v2, sizeof(T1)) p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ memset( ) での初期化をコンストラクタに置き換える・・ 以下に出力例を示す。 〔出力例〕 class T { public: T( ){・・} ・・ }; ・・ T *p; p =new T( ); ・・ 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「memset(v1, v2, sizeof(T1))」の規約を
獲得、グローバル情報からAという関数名情報を獲得、
関数定義情報により、memset(p, 0, sizeof(T)), T *p
=(T *)malloc(sizeof(T))という式があることが分か
る。これによりこの式をオブジェクト初期化の規約に適
用する。
【0034】また、上記処理を図示すると、図9に示す
通りである。 請求項6の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりオブジェクトの複写に関する
規約が取り出される。オブジェクトの複写はコピーコン
ストラクタで行う規約があり、必要なら処理を実行して
修正案を通知する。
【0035】入力例を示す。 〔入力例〕 class Box { public: ・・ }; ・・ Box *src, *dst; src =new Box( ); dst =new Box( ); ・・ memcpy(dst, src, sizeof(Box)); 解析情報からは以下の情報を使用する。 〔解析情報〕 式 ・・・ memcpy(dst, src, sizeof(Box)) ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 memcpy v1 v2 size T1 T1:Box v1:dst v2:src 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 memcpy v1 v2 size T1 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ memcpyでの複写をコピーコンストラクタに置き換える・・ 出力例を示す。 〔出力例〕 class Box { public: Box(const Box &b) {・・} ・・ }; ・・ Box *src, *dst; src =new Box( ); ・・ dst =new Box(*src); 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「memcpy v1 v2 size T1」の規約を獲得、
グローバル情報からAという関数名情報を獲得、関数定
義情報によりmemcpy(dst, src,sizeof(Box), Box *src,
*dst という式があることが分かる。これによりこの式
をオブジェクト複写の規約に適用する。
【0036】また、上記処理を図示すると、図10に示
す通りである。 請求項7の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりパラメタ渡しに関する規約が
取り出される。パラメタは参照渡しにする規約があり、
必要なら処理を実行して修正案を通知する。
【0037】入力例を示す。 〔入力例〕 ・・ T data; ・・ func(data); ・・ void func(T d) { ・・ 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ関数名 パラメータ・・・ foo proc Box b ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 Func Param T1 v1 T1:Box v1:b 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 Func Param T1 v1 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ 値渡しを参照渡しに・・ 出力例を示す。 〔出力例〕 ・・ T data; ・・ func(data); ・・ void func(T &d) { ・・ 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「Func Param T1 v1」の規約を獲得、グロ
ーバル情報からAという関数名情報を獲得、関数定義情
報によりfunc(data)という式があり、dataという変数で
呼び出していることが分かる。グローバル情報からdata
という変数名情報を獲得、変数定義情報によりdataがポ
インタでないことが分かる。これによりこの呼び出しを
パラメタ渡しの規約に適用する。
【0038】また、上記処理を図示すると、図11に示
す通りである。請求項8の場合解析情報に対応する変換
処理を実行し、規約形式に変換する。規約との照合によ
りデータメンバのアクセス指定に関する規約が取り出さ
れる。データメンバはprivate で定義する規約があり、
必要なら処理を実行して修正案を通知する。
【0039】入力例を示す。 〔入力例〕 class T { public: int get data( ); int data; }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ名 型 アクセス指定・・・ little box Box public ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 public T1 v1 T1:Box v1:v1 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 public T1 v1 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ publicのデータメンバをprivate に・・ 以下に出力例を示す。 〔出力例〕 class T { public: int get data( ); private: int data; }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「public T1 v1」の規約を獲得、グローバ
ル情報からBox というクラス名情報を獲得、クラス定義
情報からローカル情報を取り出し、ローカル情報からli
ttle box というデータメンバを取り出す。この変数定
義情報により、little box のアクセスがpublicである
ことが分かる。これによりこのデータメンバをメンバの
アクセス指定の規約に適用する。
【0040】また、上記処理を図示すると、図12に示
す通りである。 請求項9の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりメンバ関数からの復帰に関す
る規約が取り出される。メンバ関数はデータメンバのポ
インタを返さないという規約があり、必要なら処理を実
行して修正案を通知する。
【0041】入力例を示す。 〔入力例〕 class T { public: C *get data( ) {return data;} private: C *data; }; ・・ T *t=new T( ); C *d; d =t. get data( ); ・・ 解析情報からは以下の情報を使用する。 〔解析情報〕 式 型 ・・・ return little box Box ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class return member v1 v1:little box 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class return member p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ データメンバのポインタを帰しているものにconst を・・ 以下に出力例を示す。 〔出力例〕 class T { public: const C *get data( ) {return data;} private: C *data; }; ・・ T *t=new T( ); const C *d; d =t. get data( ); ・・ 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「class return member 」の規約を獲得、
グローバル情報からBox というクラス名情報を獲得、ク
ラス定義情報からローカル情報を取り出し、ローカル情
報からlittle box というデータメンバを取り出し、変
数定義情報からポインタ型であることが分かる。ローカ
ル情報からget 1boxというメンバ関数を取り出し、関
数定義情報から復帰値としてデータメンバlittle box
を返すことが分かる。これによりこのデータメンバ関数
の宣言をメンバ関数からの復帰の規約に適用する。
【0042】また、上記処理を図示すると、図13に示
す通りである。 請求項10の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合により単純なデータ設定関数に関す
る規約が取り出される。コンストラクタで設定できるも
のは設定する規約があり、必要なら処理を実行してコン
ストラクタでの設定例を通知する。
【0043】入力例を示す。 〔入力例〕 class T { public: void set height(double d){height=d;} private: double height; }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ関数定義 型 ・・・ little width =w int ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class InitialValue v1 =v2 v1:little width v2:w 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class InitialValue v1 =v2 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ 初期値の設定をコンストラクタで・・ 以下に出力例を示す。 〔出力例〕 class T { public: T(double height) {height= height; } void set height(double d){height=d;} private: double height; }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「class InitialValue v1 =v2」の規約を
獲得、グローバル情報からTというクラス名情報を獲
得、クラス定義情報からローカル情報を取り出し、ロー
カル情報からheightというデータメンバがあることが分
かる。ローカル情報からset heightというメンバ関数
を取り出し、関数定義情報からheightに値を設定するだ
けの単純な設定関数であることが分かる。これによりこ
のクラスを単純なデータ設定関数の規約に適用する。
【0044】また、上記処理を図示すると、図14 に示
す通りである。 請求項11の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりポインタメンバに関する規約
が取り出される。データメンバにポインタのものがある
場合はコピーコンストラクタを正しく定義する規約があ
り、必要なら処理を実行してコピーコンストラクタの正
しい定義例を通知する。
【0045】入力例を示す。 〔入力例〕 class T { private; char *label; }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ名 型 ・・・ label char *・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class PointerMember T1 *v1 T1:char * v1 :label 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class PointerMember T1 *v1 p1 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ ポインタメンバのあるクラスにコピーコンストラクタを定義・・ 以下に出力例を示す。 〔出力例〕 class T { public: T(const T &t) {data=strdup(t. get label( )) } char *get label( ){return label; } private: char label; }; 以上の処理を要約すると、次の通りである。
【0046】規約構造から「class PointerMember T1 *
v1」の規約を獲得、グローバル情報からTというクラス
名情報を獲得、クラス定義情報からローカル情報を取り
出し、ローカル情報からlabel というデータメンバがあ
ることが分かる。変数定義情報よりlabel がポインタで
あることが分かる。これによりこのクラスをポインタメ
ンバの規約に適用する。
【0047】また、上記処理を図示すると、図15に示
す通りである。 請求項12の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりポインタメンバに関する規約
が取り出される。データメンバにポインタのものがある
場合はデストラクタを正しく定義する規約があり、必要
なら処理を実行してデストラクタの正しい定義例を通知
する。
【0048】入力例を示す。 〔入力例〕 class T { private: char *label; }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ名 型 ・・・ label char *・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class PointerMember T1 *v1 T1:char * v1 :label 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class PointerMember T1 *v1 p1 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ ポインタメンバのあるクラスにデストラクタを定義・・ 以下に出力例を示す。 〔出力例〕 class T { public: ‐T( ){delete [ ]label;} private: char *label; }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「class PointerMember T1 *v1」の規約を
獲得、グローバル情報からTというクラス名情報を獲
得、クラス定義情報からローカル情報を取り出し、ロー
カル情報からlabel というデータメンバがあることが分
かる。変数定義情報よりlabel がポインタであることが
分かる。これによりこのクラスをポインタメンバの規約
に適用する。
【0049】また、上記処理を図示すると、図16に示
す通りである。 請求項13の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりポインタメンバに関する規約
が取り出される。データメンバにポインタのものがある
場合は代入演算子を正しく定義する規約があり、必要な
ら処理を実行して代入演算子の正しい定義例を通知す
る。
【0050】入力例を示す。 〔入力例〕 class T { private: char *label; }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ名 型 ・・・ label char *・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class PointerMember T1 *v1 T1:char * v1 :label 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class PointerMember T1 *v1 p1 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ ポインタメンバのあるクラスに代入演算子を定義・・ 以下に出力例を示す。 〔出力例〕 class T { public: const T &operator =(const Box &src){ if(&src ! =this) { delete [ ] label; label =new char[strlen(src. label)+1]; strcpy(label,src.label); } return *this; } pribate: char *label; }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「class PointerMember T1 *v1」の規約を
獲得、グローバル情報からTというクラス名情報を獲
得、クラス定義情報からローカル情報を取り出し、ロー
カル情報からlabel というデータメンバがあることが分
かる。変数定義情報によりlabel がポインタであること
が分かる。これによりこのクラスをポインタメンバの規
約に適用する。
【0051】また、上記処理を図示すると、図17に示
す通りである。 請求項14の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合により継承方法に関する規約が取り
出される。継承はpublicに行なう規約があり、必要なら
処理を実行して継承の正しい定義例を通知する。
【0052】入力例を示す。 〔入力例〕 class T :private U { ・・ }; 解析情報からは以下の情報を使用する。 〔解析情報〕 クラス名 ベースクラス ・・・ Box private Shape ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 inherit T1 private T2 T1:Box T2:Shape 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 inherit T1 private p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ private な継承をpublicに書き換え・・ 以下に出力例を示す。 〔出力例〕 class T :public U{ ・・ }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「inherit T1 private T2 」の規約を獲
得、グローバル情報からBox というクラス名情報を獲
得、クラス定義情報からベースクラス情報を取り出し、
ベースクラスのアクセスがprivate であることが分か
る。これによりこのクラスを継承方法の規約に適用す
る。
【0053】また、上記処理を図示すると、図18に示
す通りである。 請求項15の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合により継承関数の再定義に関する規
約が取り出される。ベースクラスで非仮想関数として定
義している関数は派生クラスでは再定義しない規約があ
り、必要なら処理を実行して継承した非仮想関数を再定
義しない修正例を通知する。
【0054】入力例を示す。 〔入力例〕 class T { public: int get data( ); }; class U : public T{ public: int get data( ); }; 解析情報からは以下の情報を使用する。 〔解析情報〕 メンバ関数名 型 virtual ・・・ get info int true ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 class virtual T1 f1 T1:int fi:get info 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 class virtual T1 f1 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ 継承したクラスで定義している再定義している非仮想関数 の名前を変更・・ 以下に出力例を示す。 〔出力例〕 class T { public: int get data( ); }; class U :public T{ public: int Uget data( ); // 名前を変更 }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「class virtual T1 f1 」という規約情報
を獲得、グローバル情報からUというクラス名情報を獲
得、クラス定義情報からベースクラス情報を取り出し、
Tというベースクラスを持つことが分かる。ローカル情
報からget dataという関数情報を取り出し、関数定義
情報からget dataが仮想関数でないことが分かる。グ
ローバル情報からクラスTに関するクラス情報を獲得、
クラス定義情報のローカル情報からget dataの関数情
報を取り出し、関数定義情報からget dataが仮想関数
でないことが分かる。これによりこのクラスを継承方法
の規約に適用する。
【0055】また、上記処理を図示すると、図19に示
す通りである。 請求項16の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合によりベースクラスのデストラクタ
に関する規約が取り出される。ベースクラスのデストラ
クタは仮想関数にする規約があり、必要なら処理を実行
してベースクラスのデストラクタを仮想関数にする修正
例を通知する。
【0056】入力例を示す。 〔入力例〕
【0057】
【外1】
【0058】解析情報からは以下の情報を使用する。 〔解析情報〕
【0059】
【外2】
【0060】解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕
【0061】
【外3】
【0062】規約を検索し、以下の規約構造を取り出
す。 〔規約構造〕
【0063】
【外4】
【0064】処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ ベースクラスのデストラクタを仮想関数に・・ 以下に出力例を示す。 〔出力例〕
【0065】
【外5】
【0066】以上の処理を要約すると、次の通りであ
る。すなわち、規約構造から
【0067】
【外6】
【0068】という規約情報を獲得、グローバル情報か
らUというクラス名情報を獲得、クラス定義情報からベ
ースクラス情報を取り出し、Tというベースクラスを持
つことが分かる。ローカル情報からクラスTに関するク
ラス情報を獲得、クラス定義情報のデストラクタ情報に
より、デストラクタが仮想関数でないことが分かる。こ
れによりこのクラスをベースクラスのデストラクタの規
約に適用する。
【0069】上記処理を図示すると、図20に示す通り
である。 請求項17の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合により多重継承に関する規約が取り
出される。同じベースクラスを持つクラスを多重継承す
る場合はそのベースクラスで仮想ベースクラスとして定
義する規約があり、必要なら処理を実行して、同じベー
スクラスを持つベースクラスの継承を仮想ベースクラス
になるような修正例を通知する。
【0070】入力例を示す。 〔入力例〕 class A { ・・ }; class B: public A { ・・ }; class C: public A { ・・ }; class D: public B, public C { ・・ }; 解析情報からは以下の情報を使用する。 〔解析情報〕 クラス名 ベースクラス・・・ Rectangle Box Window ・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 T1 base T2 T3 base T4 T1: Rectangle T2: Box T3: Window T4: Shape 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 T1 base T2 T3 base T4 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ ベースクラスの継承を仮想ベースクラスに・・ 以下に出力例を示す。 〔出力例〕 class A { ・・ }; class B: public virtual A { ・・ }; class C: public virtual A { ・・ }; class D: public B, public C { ・・ }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「T1 base T2 T3 base T4 」という規約情
報を獲得、グローバル情報からDというクラス名情報を
獲得、クラス定義情報からベースクラス情報を取り出
し、B,Cの二つのクラスを多重継承していることが分
かる。グローバル情報からクラスBのクラス定義情報を
獲得、ベースクラス情報からAという非仮想ベースクラ
スを継承していることが分かる。グローバル情報からク
ラスCのクラス定義情報を獲得、ベースクラス情報から
Aという非仮想ベースクラスを継承していることが分か
る。これによりこれらのベースクラス(B,C)を同じ
ベースクラスを持つクラスの多重継承の規約に適用す
る。
【0071】上記の処理を図示すると、図21に示す通
りである。 請求項18の場合 解析情報に対応する変換処理を実行し、規約形式に変換
する。規約との照合により多重継承に関する規約が取り
出される。ベースクラスのアクセスレベルは全てのベー
スクラスに付けるという規約があり、必要なら処理を実
行して、ベースクラスの指定にアクセスレベルを明示す
る修正例を通知する。
【0072】入力例を示す。 〔入力例〕 class A: public B, C{ ・・ }; 解析情報からは以下の情報を使用する。 〔解析情報〕 クラス名 ベースクラス・・・ Rectangle public Box, Window・・・ 解析結果を以下の規約形式に変換する。 〔解析情報の規約形式〕 規約インデックス 変数対応 T1 base T2 T1: Rectangle T2: Window 規約を検索し、以下の規約構造を取り出す。 〔規約構造〕 規約インデックス 処理 T1 base T2 p ・・ 処理を取り出し、実行する。 〔正規化処理〕 処理インデックス 処理内容 p ・・ 全てのベースクラスにアクセスレベルをつける・・ 以下に出力例を示す。 〔出力例〕 class A: public B, public C { ・・ }; 以上の処理を要約すると、次の通りである。すなわち、
規約構造から「T1 base T2」という規約情報を獲得、グ
ローバル情報からAというクラス名情報を獲得、クラス
定義情報からベースクラス情報を取り出し、ベースクラ
スCにはアクセスレベルが付いていないことが分かる。
これによりこのクラスをベースクラスのアクセスレベル
の規約に適用する。
【0073】上記の処理を図示すると、図22に示す通
りである。最後に、本発明のオブジェクト指向プログラ
ム作成支援装置のハードウェア構成の一例を図23を参
照して説明する。図示するコンピュータシステム100
は、本発明のオブジェクト指向プログラム作成支援装置
のハードウェア構成を実現するためのものであり、CP
Uやディスクドライブ装置等を内蔵した本体部101、
本体部101からの指示により表示画面102a上に画
像やデータを表示するディスプレイ102、このコンピ
ュータシステム100に種々の情報を入力するためのキ
ーボード103、ディスプレイ102の表示画面102
a上の任意の位置を指定するマウス104、外部のデー
タベース106にアクセスするモデム105が備えられ
ている。図4のステップ1〜ステップ10を有するプロ
グラムを格納するディスク110等の可搬型記憶媒体が
本体部101のドライブ装置のスロットに挿入され、ダ
ウンロードされる。また、モデム104を使って外部の
データベース106からダウンロードすることでもよ
い。ダウンロードされたプログラムをCPUが実行す
る。
【0074】
【発明の効果】以上説明したように、本発明によれば、
オブジェクト指向プログラムの規約を記述する規約情報
を用いて入力プログラムを解析した結果をチェックし、
規約に違反している部分を指摘し、かつ修正例を出力す
ることができるオブジェクト指向プログラム作成支援装
置を提供することができる。
【0075】具体的には、請求項3、5、6及び11に
記載の発明によれば、オブジェクトの生成に関する規約
違反を検出して、適切な修正例を出力することができ
る。請求項4、12及び16に記載の発明によれば、オ
ブジェクトの破壊に関する規約違反を検出して、適切な
修正例を出力することができる。請求項7、8、9、1
0及び13に記載の発明によれば、オブジェクトの参照
(操作)に関する規約違反を検出して、適切な修正例を
出力することができる。
【0076】請求項14、15、16、17及び18に
記載の発明によれば、オブジェクトの継承に関する規約
違反を検出して、適切な修正例を出力することができ
る。請求項2に記載の発明によれば、大域情報に関する
規約違反を検出して、適切な修正例を出力することがで
きる。
【図面の簡単な説明】
【図1】本発明の原理説明図である。
【図2】構文解析の説明図である。
【図3】規約情報の構造の説明図である。
【図4】図1に示す規約処理部の動作を示すフローチャ
ートである。
【図5】解析結果例を示す図である。
【図6】請求項2に対応した処理を示す図である。
【図7】請求項3に対応した処理を示す図である。
【図8】請求項4に対応した処理を示す図である。
【図9】請求項5に対応した処理を示す図である。
【図10】請求項6に対応した処理を示す図である。
【図11】請求項7に対応した処理を示す図である。
【図12】請求項8に対応した処理を示す図である。
【図13】請求項9に対応した処理を示す図である。
【図14】請求項10に対応した処理を示す図である。
【図15】請求項11に対応した処理を示す図である。
【図16】請求項12に対応した処理を示す図である。
【図17】請求項13に対応した処理を示す図である。
【図18】請求項14に対応した処理を示す図である。
【図19】請求項15に対応した処理を示す図である。
【図20】請求項16に対応した処理を示す図である。
【図21】請求項17に対応した処理を示す図である。
【図22】請求項18に対応した処理を示す図である。
【図23】本発明のハードウェア構成の一例を示す図で
ある。
【符号の説明】
1 入力プログラム 2 構文解析部 3 構文解析情報 4 規約情報 5 規約照合部 6 解析情報正規化部 7 出力部 8 記憶部

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向プログラムを入力とし
    て、入力プログラムを解析する構文解析部と、プログラ
    ムの規約を記述する規約情報を格納する格納部と、入力
    プログラムの構文解析結果と規約情報とを照合する規約
    照合部と、照合した結果に基づき修正されたプログラム
    を出力する解析情報正規化部とを有するオブジェクト指
    向プログラム作成支援装置。
  2. 【請求項2】 規約照合部は解析結果を利用して、グロ
    ーバル変数の出現をチェックし、チェック結果に基づき
    解析情報正規化部はグローバル変数を使わないコード例
    を出力することを特徴とする請求項1記載のオブジェク
    ト指向プログラム作成支援装置。
  3. 【請求項3】 規約照合部は解析結果を利用して、オブ
    ジェクトの生成が正しい方法で行われているかチェック
    し、チェック結果に基づき解析情報正規化部はオブジェ
    クトの正しい生成例を出力することを特徴とする請求項
    1記載のオブジェクト指向プログラム作成支援装置。
  4. 【請求項4】 規約照合部は解析結果を利用して、オブ
    ジェクトの破壊が正しい方法で行われているかチェック
    し、チェック結果に基づき解析情報正規化部はオブジェ
    クトの正しい破壊例を出力することを特徴とする請求項
    1記載のオブジェクト指向プログラム作成支援装置。
  5. 【請求項5】 解析結果から得られるクラスオブジェク
    トに対するメモリ操作に関する情報を用いて、規約照合
    部はオブジェクトの初期化が正しい方法で行われている
    かチェックし、チェック結果に応じて規約照合部と解析
    情報正規化部はオブジェクトの正しい初期化例を出力す
    ることを特徴とする請求項1記載のオブジェクト指向プ
    ログラム作成支援装置。
  6. 【請求項6】 解析結果から得られるクラスオブジェク
    トに対するメモリ操作に関する情報を用いて、規約照合
    部はオブジェクトの複写が正しい方法で行われているか
    チェックし、チェック結果に応じて解析情報正規化部は
    オブジェクトの正しい複写例を出力することを特徴とす
    る請求項1記載のオブジェクト指向プログラム作成支援
    装置。
  7. 【請求項7】 規約照合部は解析結果を利用して、オブ
    ジェクトを値渡しにしていないかチェックし、チェック
    結果に基づいて解析情報正規化部はオブジェクトを値渡
    しにしない修正例を出力することを特徴とする請求項1
    記載のオブジェクト指向プログラム作成支援装置。
  8. 【請求項8】 規約照合部は解析結果を利用して、デー
    タメンバのクラス外への公開がないかチェックし、チェ
    ック結果に基づいて解析情報正規化部はデータメンバを
    クラス外に公開しない修正例を出力することを特徴とす
    る請求項1記載のオブジェクト指向プログラム作成支援
    装置。
  9. 【請求項9】 規約照合部は解析結果を利用して、メン
    バ関数がデータメンバのポインタを返していないかチェ
    ックし、チェック結果に基づいて解析情報正規化部はメ
    ンバ関数がデータメンバのポインタを返さない修正例を
    出力することを特徴とする請求項1記載のオブジェクト
    指向プログラム作成支援装置。
  10. 【請求項10】 規約照合部は解析結果を利用して、メ
    ンバ関数が単純なデータアクセス関数になっていないか
    チェックし、チェック結果に基づき解析情報正規化部は
    メンバ関数が単純なデータアクセス関数にならないコー
    ド例を出力することを特徴とする請求項1記載のオブジ
    ェクト指向プログラム作成支援装置。
  11. 【請求項11】 規約照合部は解析結果を利用して、デ
    ータメンバにポインタがある場合にコピーコンストラク
    タが正しく定義されているかチェックし、チェック結果
    に基づきユーザの意図を確認した上で、解析情報正規化
    部はデータメンバにポインタがある場合にコピーコンス
    トラクタの正しい定義例を出力することを特徴とする請
    求項1記載のオブジェクト指向プログラム作成支援装
    置。
  12. 【請求項12】 規約照合部は解析結果を利用して、デ
    ータメンバにポインタがある場合にデストラクタが正し
    く定義されているかチェックし、チェック結果に基づき
    ユーザの意図を確認した上で、解析情報正規化部はデー
    タメンバにポインタがある場合にデストラクタの正しい
    定義例を出力することを特徴とする請求項1記載のオブ
    ジェクト指向プログラム作成支援装置。
  13. 【請求項13】 規約照合部は解析結果を利用して、デ
    ータメンバにポインタがある場合に代入演算子が正しく
    定義されているかチェックし、チェック結果に基づきユ
    ーザの意図を確認した上で、解析情報正規化部はデータ
    メンバにポインタがある場合に代入演算子の正しい定義
    例を出力することを特徴とする請求項1記載のオブジェ
    クト指向プログラム作成支援装置。
  14. 【請求項14】 規約照合部は解析結果を利用して、特
    定のアクセス指定の継承の存在をチェックし、チェック
    結果に基づき解析情報正規化部は継承の正しい定義例を
    出力することを特徴とする請求項1記載のオブジェクト
    指向プログラム作成支援装置。
  15. 【請求項15】 規約照合部は解析結果を利用して、継
    承した非仮想関数を再定義していないかチェックし、チ
    ェック結果に基づいて解析情報正規化部は継承した非仮
    想関数を再定義しない修正例を出力することを特徴とす
    る請求項1記載のオブジェクト指向プログラム作成支援
    装置。
  16. 【請求項16】 規約照合部は解析結果を利用して、オ
    ブジェクトの破壊操作が継承されたクラスで正しく動作
    されているかチェックし、チェック結果に基づいて解析
    情報正規化部はオブジェクトの破壊操作が継承されたク
    ラスで正しく動作する修正例を出力することを特徴とす
    る請求項1記載のオブジェクト指向プログラム作成支援
    装置。
  17. 【請求項17】 規約照合部は解析結果を利用して、同
    じベースクラスを持つクラスを多重継承するときに元の
    ベースクラスを仮想ベースクラスとして継承しているか
    チェックし、チェック結果に基づいてユーザの意図を確
    認した上で、解析情報正規化部は同じベースクラスを持
    つクラスを多重継承するときに元のベースクラスを仮想
    ベースクラスとして継承するコード例を出力することを
    特徴とする請求項1記載のオブジェクト指向プログラム
    作成支援装置。
  18. 【請求項18】 規約照合部は解析結果を利用して、多
    重継承の指定でベースクラスが複数並ぶときにその全て
    にアクセスレベルが明示してあるかチェックし、チェッ
    ク結果に基づいてユーザの意図を確認した上で、解析情
    報正規化部は多重継承の指定でベースクラスが複数並ぶ
    ときにその全てにアクセスレベルの明示がないことを出
    力することを特徴とする請求項1記載のオブジェクト指
    向プログラム作成支援装置。
JP9238571A 1997-09-03 1997-09-03 オブジェクト指向プログラム作成支援装置 Pending JPH1185496A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP9238571A JPH1185496A (ja) 1997-09-03 1997-09-03 オブジェクト指向プログラム作成支援装置
US09/046,557 US6237139B1 (en) 1997-09-03 1998-03-24 Object-oriented programming support system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9238571A JPH1185496A (ja) 1997-09-03 1997-09-03 オブジェクト指向プログラム作成支援装置

Publications (1)

Publication Number Publication Date
JPH1185496A true JPH1185496A (ja) 1999-03-30

Family

ID=17032208

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9238571A Pending JPH1185496A (ja) 1997-09-03 1997-09-03 オブジェクト指向プログラム作成支援装置

Country Status (2)

Country Link
US (1) US6237139B1 (ja)
JP (1) JPH1185496A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763516B2 (en) 2000-01-31 2004-07-13 Fujitsu Limited Convention checking apparatus, convention checking system, convention checking method, and storage medium on which is recorded a convention checking program

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6959434B2 (en) * 1999-12-01 2005-10-25 International Business Machines Corporation Method of determining the syntactic correctness of expressions
US7337437B2 (en) * 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
US6578196B1 (en) * 2000-06-07 2003-06-10 International Business Machines Corporation Checking of units and dimensional homogeneity of expressions in computer programs
US8176108B2 (en) * 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
US7873503B2 (en) * 2001-09-28 2011-01-18 Siebel Systems, Inc. Method, system, and product for performing sub-configuration of entities
US6757878B2 (en) * 2001-12-31 2004-06-29 Intel Corporation Method and apparatus for layout synthesis of regular structures using relative placement
US6600656B1 (en) * 2002-04-10 2003-07-29 Sun Microsystems, Inc. System structure for fast service access in a rack/cabinet
US6957325B1 (en) 2002-07-01 2005-10-18 Mindspeed Technologies, Inc. System and method for detecting program hazards in processors with unprotected pipelines
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US20060095890A1 (en) * 2004-11-01 2006-05-04 Reeves Robert L Embedded detection objects
US20060277525A1 (en) * 2005-06-06 2006-12-07 Microsoft Corporation Lexical, grammatical, and semantic inference mechanisms
US20090007068A1 (en) * 2007-06-27 2009-01-01 Microsoft Corporation Accessing Non-Public Code
CN103154997A (zh) * 2010-10-04 2013-06-12 国际商业机器公司 对用户应用的协作帮助
US9015661B1 (en) * 2011-06-23 2015-04-21 The Mathworks, Inc. Restricting class inheritance relationships
JP2017151903A (ja) * 2016-02-26 2017-08-31 富士通株式会社 コンパイル装置、コンパイル方法およびコンパイルプログラム

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62231335A (ja) * 1986-03-31 1987-10-09 Nec Corp コ−デイング・エキスパ−ト・システム
JPH01121934A (ja) * 1987-11-06 1989-05-15 Hitachi Ltd 日本語メッセージの処理方式
JPH01307832A (ja) * 1988-06-07 1989-12-12 Nec Corp コンパイラの原始プログラムの文法誤り自動修正方式
JPH0644081A (ja) * 1991-11-13 1994-02-18 Hokkaido Nippon Denki Software Kk コンパイラのエラーメッセージ出力方式
JPH0869380A (ja) * 1994-08-29 1996-03-12 Fujitsu Ltd ソースプログラムチェック装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6346572A (ja) * 1986-08-13 1988-02-27 Toshiba Corp 検索装置
JPH01145723A (ja) * 1987-08-28 1989-06-07 Hitachi Ltd プログラム生成方法
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
US5450586A (en) * 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
CA2077273C (en) * 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
JPH06103075A (ja) * 1992-07-06 1994-04-15 Internatl Business Mach Corp <Ibm> オブジェクト指向適用業務
US5911076A (en) * 1993-06-14 1999-06-08 International Business Machines Corporation Object oriented framework for creating new emitters for a compiler
US5590330A (en) * 1994-12-13 1996-12-31 International Business Machines Corporation Method and system for providing a testing facility in a program development tool
US5640558A (en) * 1995-05-31 1997-06-17 International Business Machines Corporation Identifying and analyzing multiple level class relationships in an object oriented system by parsing source code without compilation
US5864862A (en) * 1996-09-30 1999-01-26 Telefonaktiebolaget Lm Ericsson (Publ) System and method for creating reusable components in an object-oriented programming environment
CA2178898C (en) * 1996-06-12 2000-02-01 David Joseph Streeter Sequencing and error detection of template instantiations during compilation of c++ programs
US5754860A (en) * 1996-07-23 1998-05-19 Digital Equipment Corporation Method and apparatus for software testing using a differential testing technique to test compilers
US5799266A (en) * 1996-09-19 1998-08-25 Sun Microsystems, Inc. Automatic generation of test drivers
US6093215A (en) * 1997-08-12 2000-07-25 International Business Machines Corporation Method and apparatus for building templates in a component system
US5953526A (en) * 1997-11-10 1999-09-14 Internatinal Business Machines Corp. Object oriented programming system with displayable natural language documentation through dual translation of program source code
US6148277A (en) * 1997-12-18 2000-11-14 Nortel Networks Corporation Apparatus and method for generating model reference tests
US6002874A (en) * 1997-12-22 1999-12-14 International Business Machines Corporation Method and system for translating goto-oriented procedural languages into goto-free object oriented languages
US6148417A (en) * 1998-01-14 2000-11-14 Micron Electronics, Inc. Method for determining a source of failure during a file system access
US6108659A (en) * 1998-12-22 2000-08-22 Computer Associates Think, Inc. Method and apparatus for executing stored code objects in a database

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62231335A (ja) * 1986-03-31 1987-10-09 Nec Corp コ−デイング・エキスパ−ト・システム
JPH01121934A (ja) * 1987-11-06 1989-05-15 Hitachi Ltd 日本語メッセージの処理方式
JPH01307832A (ja) * 1988-06-07 1989-12-12 Nec Corp コンパイラの原始プログラムの文法誤り自動修正方式
JPH0644081A (ja) * 1991-11-13 1994-02-18 Hokkaido Nippon Denki Software Kk コンパイラのエラーメッセージ出力方式
JPH0869380A (ja) * 1994-08-29 1996-03-12 Fujitsu Ltd ソースプログラムチェック装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
大南 正人,他2名著: ""拡張OSとソフトウェア流通支援技術:IROS製品の流通性向上を目指して"", NTT技術ジャーナル, vol. 第7巻 第2号, CSNH199700160003, 1 February 1995 (1995-02-01), pages 18 - 23, ISSN: 0000758777 *
岩田 憲和著: ""プログラム再利用の効率化に役立つ支援技術:流通可能なCプログラムをつくるためのノウハウ集と支援ツー", NTT技術ジャーナル, vol. 第6巻 第11号, CSNH199900098005, 1 November 1994 (1994-11-01), pages 69 - 71, ISSN: 0000758778 *
高木聡・山崎信行共著: ""はじめて学ぶCプログラミング最終回:総まとめ(2)プログラミング"", C MAGAZINE, vol. 第3巻 第3号, CSND199800163012, 1 March 1991 (1991-03-01), pages 119 - 130, ISSN: 0000758779 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763516B2 (en) 2000-01-31 2004-07-13 Fujitsu Limited Convention checking apparatus, convention checking system, convention checking method, and storage medium on which is recorded a convention checking program

Also Published As

Publication number Publication date
US6237139B1 (en) 2001-05-22

Similar Documents

Publication Publication Date Title
Jackson et al. Lightweight extraction of object models from bytecode
Ibanez et al. The ITK software guide
Egyed Automated abstraction of class diagrams
Papi et al. Practical pluggable types for Java
Ernst et al. A virtual class calculus
Niere et al. Towards pattern-based design recovery
US6789216B2 (en) Platform independent memory image analysis architecture for debugging a computer program
US5161216A (en) Interprocedural slicing of computer programs using dependence graphs
US7865870B2 (en) Automatic content completion of valid values for method argument variables
JPH1185496A (ja) オブジェクト指向プログラム作成支援装置
Kirby Reflection and hyper-programming in persistent programming systems
Méndez-Lojo et al. A flexible,(C) LP-based approach to the analysis of object-oriented programs
US20060212847A1 (en) Type checker for a typed intermediate representation of object-oriented languages
Bauer et al. Design and implementation of the andromeda proof assistant
Sutton et al. Mappings for accurately reverse engineering UML class models from C++
MXPA03004411A (es) Sistema y metodo para definir y utilizar subclases declarativamente por marcas.
Souza et al. An antipattern documentation about possible misconceptions related to introductory programming courses (cs1) in java
Genssler et al. Source-to-source transformation in the large
Dodani et al. ACTS: A type system for object-oriented programming based on abstract and concrete classes
Chiorean Using OCL beyond specifications
Chang et al. Type-based verification of sssembly language for compiler debugging
Basin et al. Bytecode verification by model checking
JP2000132387A (ja) オブジェクト指向プログラム作成支援装置
Lange dACL: the deep constraint and action language for static and dynamic semantic definition in Melanee
Kneuss et al. Effect analysis for programs with callbacks

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060714

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061024

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061222

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070206