トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 オブジェクト指向プログラミング支援装置
【発明者】 【氏名】造田 哲雄

【要約】 【課題】オブジェクト指向によるプログラム開発の作業の効率化を図る。

【解決手段】プログラム開発者が定義した操作がスーバークラスで定義されている操作をオーバーライドする操作であるか、サブクラスでオーバーライドされる操作であるか検査し、検査結果を表示する手段105、107、113、定義された操作名のタイプミスやスペルミスをチェックし、操作名を誤った場合、スーパークラスで定義されている操作名を特殊表示する手段109、113、プログラム開発者が必要とする部分をプログラムから抽出し、プログラムの不要な部分を隠して表示する手段112、113等を設ける。
【特許請求の範囲】
【請求項1】 オブジェクト指向を適用したプログラム開発を支援するオブジェクト指向プログラミング支援装置において、プログラム開発者が定義した操作が、スーパークラスで定義されている操作をオーバーライドする操作であるか、サブクラスでオーバーライドされる操作であるかを検査する手段と、前記検査結果を表示する手段を有することを特徴とするオブジェクト指向プログラミング支援装置。
【請求項2】 請求項1記載のオブジェクト指向プログラミング支援装置において、完成していない複数のクラスを解析し、各クラスに定義されている操作、属性とそれぞれの可視性を取得し、クラス間の関係を表示する手段を有することを特徴とするオブジェクト指向プログラミング支援装置。
【請求項3】 請求項1、2記載のオブジェクト指向プログラミング支援装置において、プログラム開発者が定義した操作名を検査する手段を有し、操作名を誤った場合、スーパークラスで定義されている操作名を特殊表示することを特徴とするオブジェクト指向プログラミング支援装置。
【請求項4】 請求項1、2、3記載のオブジェクト指向プログラミング支援装置において、プログラムの不要な部分を隠して表示する手段を有することを特徴とするオブジェクト指向プログラミング支援装置。
【請求項5】 請求項1、2、3、4記載のオブジェクト指向プログラミング支援装置において、操作や変数につけるコメントを、プログラム開発を行っている領域とは別の領域で編集する手段を有することを特徴とするオブジェクト指向プログラミング支援装置。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、オブジェクト指向を適用したプログラム開発を支援するオブジェクト指向プログラミング支援装置に関するものである。
【0002】
【従来の技術】プログラム開発において、コメントを記述することは非常に重要なことである。しかし、ソースコードと同様の扱いをすると、プログラム開発者は、ソースコードとコメントを区別することが困難になる。従来、プログラム開発者が、コメントとそれ以外のプログラムを区別するために、コメントは、例えばソースコードとは異なる色で表示し、ソースコードとコメントを区別していた。
【0003】一方、オブジェクト指向では、通常、クラスは、クラス自身の特徴として属性を持つ。そして、クラスの特徴である属性値を、ほかのクラスが直接変更することができないように、可視性を定義すると同時に、属性に値を設定する操作と、属性の値を取得する操作とを持っている。従来、定義された属性、属性に値を設定する操作、属性から値を取得する操作は、クラス作成の初期段階で定義され、プログラムの初期部分に、まとめて定義されていた。
【0004】このオブジェクト指向の特徴に、継承という考え方がある。継承では、あるクラスが別のクラスの性質をそのまま引き継ぐことができる。継承を利用すると、必ず、性質を定義しているクラスと、その性質を引き継ぐクラスとが存在する。性質を定義しているクラスをスーパークラスといい、その性質を引き継ぐクラスをサブクラスと呼ぶ。サブクラスでは、スーパークラスで定義されている、属性や操作をそのまま利用することができる。
【0005】しかしながら、サブクラスがスーパークラスから引き継いだ操作の振る舞いを、そのまま用いたのでは、都合が悪いことがある。これを解決するために、操作のオーバーライドという方法がある。操作のオーバーライドとは、スーパークラスで定義されている操作を、サブクラスで、再び定義し、サブクラスにとって都合のよい振る舞いを持った操作に定義し直すことである。従来、操作を定義した際、その操作が、スーパークラスで定義されている操作をオーバーライドする操作なのか、また、サブクラスでオーバーライドされる操作なのかの確認は、開発者がクラス図など用いて行っていた。
【0006】
【発明が解決しようとする課題】プログラム開発時には、操作の振る舞いや、属性が持つ意味や、プログラムを修正したことをあらわすためにコメントをつける。コメントは、プログラム開発者以外の人がプログラムの振る舞いを知る場合や、プログラムを保守する際には非常に重要なものである。あまりに多くのコメントは、プログラム開発にとって煩わしい場合がある。
【0007】また、オブジェクト指向を適用したプログラム開発では、クラスを定義する。その際、クラスの特徴を表す属性とその属性に属性値を設定する操作、属性値を取得する操作は、クラスを実装する初期段階で定義するため、属性値の設定および取得以外の操作の開発時には煩わしいものとなる。
【0008】そして、オブジェクト指向の特徴であるオーバーライドを用いる場合は、スーパークラスが持つ操作名を正確に知る必要がある。なぜならば、スーパークラスと異なる名称で定義をすると、オーバーライドされずに、新しく定義されるからである。そのため、プログラム実行時には、プログラム開発者の意図と異なる動作をする。しかしながら、プログラム開発者がオーバーライドを目的として定義した操作名が誤っていることを知ることは困難である。
【0009】本発明の目的は、オブジェクト指向を適用したプログラム開発において、プログラム開発者が必要な部分と不必要な部分や、定義した操作がオーバーライドするものなのか、オーバーライドされるものかなどを、一目で把握することができるオブジェクト指向プログラミング支援装置を提供することにある。
【0010】
【課題を解決するための手段】上記目的を達成するために、本発明のオブジェクト指向プログラミング支援装置は、プログラム開発者が必要としている部分を設定する手段、プログラム開発者が必要とする部分をプログラムから抽出し、表示、編集する手段、操作や変数につけられるコメントを、プログラム開発を行っている領域とは別の領域で編集する手段、プログラムからクラスの情報を取得する手段、取得したクラス情報を視覚的に表示する手段、プログラム開発者が定義した操作が、スーパークラスで定義されている操作をオーバーライドする操作なのかを判定する手段、プログラム開発者が定義した操作が、サブクラスでオーバーライドされる操作なのか判定する手段などを具備することを特徴とする。
【0011】
【発明の実施の形態】以下、本発明を実施する場合の一形態を図面を参照して具体的に説明する。図1は、本発明を適用したオブジェクト指向プログラミング支援装置の実施形態を示すブロック図である。図1中、101は本発明を適用したオブジェクト指向プログラミング支援装置、115はプログラム開発システムである。プログラム開発システム115はパソコンやワークステーションであり、オブジェクト指向プログラミング支援装置101は該プログラム開発システム115の資源を利用し、該プログラム開発システムの一部として構成される。
【0012】本実施形態のオブジェクト指向プログラミング支援装置101は、開発されているアプリケーションを構成しているプログラムを保存しておくプログラム保存装置102、プログラムからクラスの情報を取得するクラス情報取得装置103、取得したクラス情報を格納しておくクラス情報データベース(DB)104、クラス情報DB104のクラス情報を使用して、定義した操作がスーパークラスで定義されている操作をオーバーライドする操作か検査するスーパークラスオーバーライド検査装置105、その検査結果を保存するスーパークラスオーバーライドDB106、定義した操作がサブクラスでオーバーライドされる操作か検査するサブクラスオーバーライド検査装置107、その検査結果を保存するサブクラスオーバーライドDB108、オーバーライドを検査するために、操作名のスペルチェックをするスペルチエック装置109、検査のために使用する単語を記録している単語DB110、表示部分/非表示部分の選択結果を保存しておく表示/非表示選択結果DB111、プログラムから選択された部分を抽出するプログラム選択抽出装置112、オーバーライド検査の結果や、プログラムの抽出結果などを表示し、編集できる表示/編集装置113などで構成される。
【0013】プログラム開発者114はプログラム開発システム115の一部としてオブジェクト指向プログラミング支援装置101を使用する。なお、プログラム開発システム115は、プログラム開発システム115が使用する固有情報保存装置116を持っている。
【0014】図2はクラス図の一例であり、実施例として、該クラス図201を編集するとする。クラス図201の表記法にはUML表記法を使用している。UML表記法では、クラス名が「Polygon」であるPolygonクラス202では、操作名が「areaCalculate()」である操作areaCalculate()203が定義されていることを表している。また、Trapezoidクラス204では、属性height205が定義されている。操作名や属性名の前についている「−」206はその可視性が「private」であることを表している。また、「#」207はその可視性が「protected」であることを表し、「+」208は可視性が「private」であることを表している。「△」がついている線209は継承を表わす線である。例えば、Polygonクラス202はSquareクラス210のスーパークラスであり、Squareクラス210はPolygonクラス202のサブクラスであると同時にTrapezoidクラス204のスーパークラスであることを表わしている。また、矢印の線211は、Polygonクラス202がSidesクラス212を参照することを表している。そして、矢印の線211につけられている文字列side213は、Ploygonクラス202の属性に、型がSidesクラス212、可視性がprotectedであり、属性名がside213であることを表している。
【0015】Polygonクラス202と同様に、Squareクラス210には操作areaCalculate()214が定義されている。そして、この操作areaCalculate()214は、Squareクラス210のスーパークラスであるPolygonクラス202の操作areaCalculate()203をオーバーライドしている。また、Parallelogramクラス215は、Trapezoidクラス204のサブクラスであり、操作areaCalculate()216が定義されている。
【0016】本発明の実施例として、プログラム開発者114が編集する内容は、Trapezoidクラス204に、操作「areaCalculate()」を追加することとする。そして、プログラム開発者114は追加するときに、操作名を「areaCaluculate()」と誤って記述するとする。
【0017】図3は編集前のTrapezoidクラス204のプログラムの一例を示す。プログラム301は、コメントを記述する領域を指定する2つの方法による「/*」で始まり「*/」までの領域コメント302、「//」始まる一行のコメント303、属性height304と、属性に値を設定する操作305と、属性の値を取得する操作306とで構成されている。
【0018】以下、本オブジェクト指向プログラム支援装置101を使用して、図3のプログラム301を編集する処理を順を追って説明する。
【0019】まず、プログラム開発者114は、プログラム開発システム115を通してオブジェクト指向プログラム支援装置101を起動する。オブジェクト指向プログラミング支援装置101を起動すると、図4に示すプログラム編集ウインドウ401が表示される。プログラム編集領域402には、まだ編集対象になるファイルが選択されていないため、なにも表示されていない。プログラム開発者114は、表示されたプログラム編集ウインドウ401の「ファイルを開く」ボタン403をクリックすると、プログラム編集ウインドウ401内に、図5に示すファイル選択ウインドウ501が表示される。
【0020】プログラム開発者114が、「ファイルを開く」ボタン403を押すと、表示/編集装置113は、プログラム保存装置102から、プログラムファイルを取得して、その一覧をプログラム表示領域502に表示する。プログラム開発者114は、プログラムファイル表示領域502に表示されているファイルから、編集するファイルTrapezoid.java 503を選択する。そして、「開く(O)」ボタン504を押す。
【0021】「開く(O)」ボタン504が押されたら、プログラム選択抽出装置112は、表示/非表示選択結果DB111から、プログラム開発者114が選択している表示/非表示条件を取得する。表示/非表示選択結果DB111は、初期状態として「すべて表示する」という条件を持っている。そこで、プログラム選択抽出装置112は、プログラム保存装置102から、選択されたファイルTrapezoid.java503を取得して、その内容301をすべて抽出する。表示/編集装置113は、これをプログラム編集ウインドウ401のプログラム編集領域402に表示する。
【0022】ファイル選択ウインドウ501から戻った場合、プログラム編集ウインドウ401は図6のようになる。編集ファイル名表示領域601には、編集対象として選択したファイルTrapezoid.java503にパッケージ名を含めてfigures.Trapezoid.java602と表している。また、プログラム編集領域402には、ファイル選択ウインドウ501で選択したファイルTrapezoid.java503の内容301(図3)が表示される。プログラム開発者114が、プログラム開発中に、コメント「/**(改行)*台形クラス(改行)*作成日 2000.07.21(改行)*/」603、コメント「/*(改行)*辺のパッケージをインポートする(改行)*/」604、コメント「// 台形クラスの本体」605、コメント「/*(改行)台形の高さ(改行)*/」606、コメント「/**(改行)*台形の高さを設定する。(改行)*/」607、コメント「/**(改行)*高さを取得する(改行)*/」608の各コメントが必要でない場合は、「コメント非表示」ボタン609をチェックする。
【0023】図7は「コメント非表示」ボタン609にチエックが入ったときのプログラム編集ウインドウ401を示している。「コメント非表示」ボタン609にチェック「レ」701が入った場合、プログラム選択抽出装置112は、表示/非表示選択結果DB111から、「コメント非表示」という条件を取得する。そして、プログラム保存装置102から、選択されたファイルTrapezoid.java503を取得する。この時、プログラム選択抽出装置112は、その内容301から、がコメント「/**(改行)*台形クラス(改行)*作成日 2000.07.21(改行)*/」603、コメント「/*(改行)*辺のパッケージをインポートする(改行)*/」604、コメント「// 台形クラスの本体」605、コメント「/*(改行)台形の高さ(改行)*/」606、コメント「/**(改行)*台形の高さを設定する。(改行)*/」607、コメント「/**(改行)*高さを取得する(改行)*/」608以外を抽出する。表示/編集装置113は、プログラム選択抽出装置112でのコメント以外すべての抽出した結果702をプログラム編集ウインドウ401のプログラム編集領域402に表示する。
【0024】プログラム開発者114が、プログラム開発中に、属性height703とその属性に値を設定する操作setHeight(double height)704、その属性の値を取得する操作getHeight()705を必要としない場合、「属性非表示」ボタン706をチェックする。
【0025】図8は「属性非表示」ボタン706にチェックが入ったときのプログラム編集ウインドウ401を示している。「属性非表示」ボタン706にチェック「レ」801が入った場合、プログラム選択抽出装置112は、表示/非表示選択結果DB111から、先に設定された「コメント非表示」と「属性非表示」という条件を取得する。そして、プログラム保存装置102から選択されたファイルTrapezoid.java503を取得する。この時、プログラム選択抽出装置112は、その内容301から、コメント「/**(改行)*台形クラス(改行)*作成日 2000.07.21(改行)*/」603、コメント「/*(改行)*辺のパッケージをインポートする(改行)*/」604、コメント「//台形クラスの本体」605、コメント「/*(改行)台形の高さ(改行)*/」606、コメント「/**(改行)*台形の高さを設定する。(改行)*/」607、コメント「/**(改行)*高さを取得する(改行)*/」608と属性height703とその属性に値を設定する操作setHeight(double height)704、その属性の値を取得する操作getHeight()705以外を抽出する。この抽出結果、表示/編集装置113は、すべてのコメントと、属性、属性に値を設定する操作、属性から値を取得する操作以外のプログラム802をプログラム編集ウインドウ401のプログラム編集領域402に表示する。
【0026】プログラム開発者114が、属性を編集する場合は、「属性を編集する」ボタン803を押す。「属性を編集する」ボタン803を押すと、図9に示す属性を編集するウインドウ901が表示される。属性を編集するウインドウ901は、編集中のパッケージを含めたファイル名figures.Trapezoid.java602を編集ファイル名表示領域902に表示する。プログラム選択抽出装置112は、プログラム保持装置102からファイルTrapezoid.java503を取得し、その内容303から、属性height703を抽出する。表示/編集装置113は、取得した属性を属性選択903に設定する。プログラム開発者114は属性選択903から、編集対象の属性height703を選択する。
【0027】属性選択903が終わると、表示/編集装置113は、図10に示すように、選択された属性height703を属性選択903の属性表示領域1001に表示する。その後、プログラム選択抽出装置112が、属性height703に値を設定する操作setHeight(double height)704を抽出し、表示/編集装置113が「設定操作」タブ1002の設定操作表示領域1003に表示する。続いて、属性height703の値を取得する操作、属性の値を取得する操作getHeight()705の内容を「取得操作」タブ1004の取得操作表示領域1005に表示する。プログラム開発者114は、設定操作表示領域1003、取得操作表示領域1005でプログラムを編集する。
【0028】属性の編集が終了したら、「終了」ボタン1006を押す。「終了」ボタン1006が押されたら、編集されたプログラムは、編集対象として選択されたファイルTrapezoid.java503に反映し、プログラム編集ウインドウ401へ戻る。
【0029】「コメント非表示」ボタン609と「属性非表示」ボタン706ともにチェックされているので、プログラム開発者114は、プログラム編集領域402では、コメント、属性、属性に値を設定する操作、属性の値を取得する操作以外の操作を定義する。
【0030】図11は、プログラム開発者114が、スペルを間違えた操作「areaCaluculate()」1101を定義した様子を示している。オブジェクト指向プログラミング支援装置101は、図12のフローチャートに従って、定義された操作areaCaluculate()1101が、スーパークラスSquare210で定義されている操作areaCalculate()214およびPolygon202で定義されている操作areaCalculate()203をオーバーライドするか検査する。その後、サブクラスParallogram215で定義されている操作areaCalculate()216でオーバーライドされる操作なのかを検査する。以下、図12のフローチャートについて詳しく説明する。
【0031】オブジェクト指向プログラミング支援装置101のクラス情報取得装置103は、操作areaCaluculate()1101が定義されると、クラス情報DB104に格納されている情報を最新にするために、まず、クラス情報DB104の内容を廃棄する(ステップ1201)。クラス情報DB104の内容を廃棄したら、次に、ステップ1202へ進む。ステップ1202では、作成するアプリケーションが使用するすべてのクラスのすべての操作とすべての属性の情報を取得する。図13はステップ1202の詳細フローチャートを示したものである。
【0032】クラス情報取得装置103は、ベンダーから提供される多くのクラスや、プログラム開発者が作成したクラスを、プログラム開発システム115が探すために設定されている複数のクラスパスを、プログラム開発システム115の固有情報保存装置116からすべて取得する(ステップ1301)。次に、ステップ1301で取得したクラスパスで、まだクラスの解析に使用していないクラスパスがあるかを検査する(ステップ1302)。そして、まだクラスの解析に使用されていないクラスパスをひとつ取得する(ステップ1303)。次に、ステップ1303で取得したクラスパスの先にある複数のクラスでまだクラスの解析に使用していないクラスがあるかを検査する(ステップ1304)。クラス解析をしていないクラスがある場合は、それらクラスからひとつを選択し、そのクラス名をクラス情報DB104に保存する(ステップ1305)。それとともに、そのクラスを解析して、そのクラスのスーパークラスと、クラスで定義されている属性の可視性、属性の型、属性名、操作の可視性、操作をすべて取得し、クラス情報DB104に保存する(ステップ1306)。ステップ1302で取得したクラスパスの先のすべてのクラスを解析するまでステップ1304、ステップ1305、ステップ1306を繰り返す。そして、ステップ1302に戻り、ステップ1301で取得したクラスパスすべてを使用するまで、処理を繰り返し行う。
【0033】図13の処理結果、図14に示すようなクラス情報DB104が完成する。図14には、図13の処理により得られたクラス名1401、スーパークラス1402、属性の可視性1403、属性の型1404、属性名1405、操作の可視性1406、操作名1407を保持している。
【0034】図13の処理が終わり、図14のクラス情報DB104を作成したら、図12のステップ1203へ進む。ステップ1203は、スーパークラスオーバーライド検査装置105にて、プログラム開発者114が定義した操作areaCaluculate()1101が、編集中のクラスTrapezoid 204のスーパークラスSquare 210で定義されている操作areaCalculate()214をオーバーライドするものかを検査する処理である。図15にステップ1203の詳細フローチャートを示す。
【0035】スーパークラスオーバーライド検査装置105は、プログラム開発者114が操作を定義したクラスTrapezoid204のクラス名Trapezoidをクラス情報DB104のクラス名1401から探す(ステップ1501)。クラス情報DB104を利用して、ステップ1501で見つけたクラス情報DB104に格納されているクラス名Trapezoid1408に対応しているスーパークラス1402の情報から、編集中のクラスTrapezoid 204のスーパークラスSquare 210のクラス名を取得し、クラス情報DB104に格納されているクラス名Square1409を、クラス情報DB104のクラス名1401から見つける(ステップ1502)。ステップ1502でみつけたクラス名1401の操作名1407を利用して、クラス情報DB104に格納されているクラスSquare210の操作areaCalculate() 1411と、プログラム開発者114が定義した操作areaCaluculate()1101とを比較する(ステップ1503)。
【0036】ステップ1503での比較で、プログラム開発者114が定義した操作areaCaluculate()1101と、クラスTrapezoid204のスーパークラスSquare210で定義されている操作areaCalculate() 214と一致した場合(ステップ1504のYes)は、クラスTrapezoid204で定義した操作areaCaluculate()1101は、スーパークラスで定義されている操作1414をオーバーライドしているので、ステップ1510へ進み、スーパークラスオーバーライドDB106へ登録する。
【0037】一方、ステップ1503での比較で、プログラム開発者114が定義した操作area Caluculate()1101が、クラスSquare 210で定義されているすべての操作areaCalculate() 214と一致しなかった場合(ステップ1504のNo)は、スペルチェック装置109を使用して、プログラム開発者114が定義した操作areaCaluculate()1101のスペルチェックを行う(ステップ1505)。スペルチェックをした結果、プログラム開発者114が定義した操作areaCaluculate()1101のスペルが正しいとき(ステップ1506のYes)は、スーパークラスSquare 210で定義されている操作areaCalculate() 214をオーバーライドしていないことがわかる。この場合には、何もしない。
【0038】反対にスペルチェックの結果、プログラム開発者114が定義した操作areaCaluculate()1101のスペルが誤りのとき(ステップ1506のNo)は、単語DB110を利用して、スペルを修正し(ステップ1507)、ステップ1502で取得したスーパークラスSquare 211で定義されているすべての操作areaCalculate()214と、プログラム開発者114が定義した操作の、スペル修正後の操作「areaCalculate()」とを再び比較する(ステップ1508)。スペルの修正をした後の操作「areaCalculate()」が、ステップ1502で取得したスーパークラスSquare 210で定義されている操作areaCalculate()214と一致した場合(ステップ1509のYes)は、スーパークラスSquare 210で定義されている操作areaCalculate()214をオーバーライドしているので、ステップ1510へ進み、スーパークラスオーバーライドDB106へ登録する。また、スペル修正をした操作areaCalculate()と、クラスSquare 210で定義されているすべての操作areaCalculate()214とが一致しなかった場合(ステップ1509のNo)はオーバーライドする操作でないことがわかる。この場合、スーパークラスオーバーライドDB106へ登録は行わない。
【0039】編集中のクラスTrapezoid 204のすべてのスーパークラスに対して、ステップ1502からステップ1510を繰り返し行う。編集中のクラスTrapezoid 204のすべてのスーパークラスに対して処理が終わったら、図12のステップ1204へ進む。
【0040】ステップ1203の処理が完了すると、図16に示すようなスーパークラスオーバーライドが完成する。スーパークラス名1601には、編集中のクラスTrapezoid 204のスーパークラスSquare 210と、Square 210のスーパークラスであるクラスPolygon202が設定される。そしてオーバーライドされる操作1602には、スーパークラス名1601の各クラスに、編集中のクラスTrapezoid 204で定義した操作areaCalculate()1101がオーバーライドする操作が定義されていることを表している。
【0041】ステップ1204は、サブクラスオーバーライド検査装置107にて、プログラム開発者114が定義した操作areaCaluculate()1101がサブクラスParallogram215で定義されている操作areaCalculate()216でオーバーライドされる操作なのかを検査する処理である。図17にステップ1204の詳細フローチャートを示す。
【0042】サブクラスオーバーライド検査装置107は、まず、対象とするクラスTrapezoid204とし、クラス情報DB104のスーパークラス1402から、編集中のクラス名Trapezoid204のクラス名を探す。編集中のクラス名Trapezoid204がクラス情報DB104のスーパークラス1402の欄にある場合は、見つけたスーパークラス1402に対応するクラス情報DB104のクラス名1401から、Trapezoid204のサブクラスであるParallogram215に当たるクラス名Parallogram 1412を取得する(ステップ1701)。ステップ1701でクラスParallogram 215のクラス名Parallogram 1412を取得したら、サブクラスParallogram 215で定義されている操作を、クラス情報DB104の操作名1407に格納されている操作areaCalculate()1413と比較を行う(ステップ1702)。
【0043】ステップ1702での比較の結果、プログラム開発者114が定義した操作areaCaluculate()1101とサブクラスParallogram215で定義されている操作areaCalculate()216とが一致した場合(ステップ1703のYES)は、定義した操作 areaCaluculate()1101は、サブクラスParallogram 215で定義されている操作 areaCalculate()216がオーバーライドすることがわかる。この場合、プログラム開発者114が定義した操作「areaCaluculate()」をサブクラスオーバーライドDB108に登録する(ステップ1709)。
【0044】一方、ステップ1702での比較の結果、プログラム開発者114が定義した操作areaCaluculate()1101がサブクラスParallogram 215で定義されているすべての操作areaCalculate()216と一致しなかった場合は、スペルチェック装置109を使用して、プログラム開発者114が定義した操作areaCaluculate()1101のスペルチェックを行う(ステップ1704)。スペルチェックをした結果、プログラム開発者114が定義した操作areaCaluculate()1101のスペルが正しいときは、クラスParallogram 215で定義されている操作areaCalculate()216によりオーバーライドされないことがわかる。もし、スペルチェックの結果、スペルが誤りのときは(ステップ1705のNo)、単語DB110を利用して、スペルを修正し(ステップ1706)、ステップ1701で取得したクラスParallogram 215で定義されているすべての操作areaCalculate() 216の情報であるクラス情報DB104の操作名1407のareaCalculate()1413とプログラム開発者114が定義した操作areaCaluculate()1101のスペルを修正した操作areaCalculate()とを再び比較する(ステップ1707)。スペル修正をした後の操作「areaCalculate()」が、ステップ1701で取得したクラスParallogram 215で定義されている操作areaCalculate()216と一致した場合(ステップ1708のYes)は、クラスParallogram215で定義されている操作areaCalculate()216によりオーバーライドされることがわかる。そこで、スペル修正後の操作「areaCalculate()」をサブクラスオーバーライドDB108に登録する(ステップ1709)。
【0045】また、スペルチエックの結果、スペル修正をした操作areaCalculate()と、クラスParallogram 215で定義されているすべての操作をareaCalculate()216が一致しなかった場合は、プログラム開発者114がクラスTrapezoid204で定義した操作areaCaluculate()1101は、サブクラスによってオーバーライドされる操作でないことがわかる。この場合、サブクラスオーバーライドDB108への登録は行わない。
【0046】その後、対象クラスをクラスParallogram 215に変更して、クラスParallogram 215のサブクラスに対して、ステップ1701からステップ1709を繰り返す。以下、ステップ1701からステップ1709を繰り返すことで、クラスTrapezoid204のサブクラスすべてを検査することができる。
【0047】ステップ1204の処理が完了すると、図18に示すようなサブクラスオーバーライドDB108が完成する。サブクラス名1801には、プログラム開発者114が定義した操作areaCaluculate()1101をオーバーライドする操作areaCalculate()216が定義されているクラスParallelogram215のクラス名を格納する。そして、オーバーライドする操作1802には、オーバーライドする操作areaCalculate()216の情報を格納する。
【0048】ステップ1204が完了し、図16のスーパークラスオーバーライドDB106、図18のサブクラスオーバーライドDB108が作成すると、図12のステップ1205に進む。ステップ1205では、表示/編集装置113を使用してプログラム開発者114にステップ1203、ステップ1204で得られた情報を表示する。
【0049】プログラム開発者114が操作areaCaluculate()1101を定義すると、ステップ1203、ステップ1204の処理を行い、結果として得られる図16、図18の内容を使用して、操作「areaCalculate()」が、スーパークラスの操作をオーバーライドしている場合、サブクラスの操作によってオーバーライドされる場合のどちらか一方でも発生した場合、表示/編集装置113は、図19に示す操作名確認ウインドウ1901を表示する。
【0050】操作名確認ウインドウ1901は、プログラム開発者114に操作名の確認を求めるものである。図19において、操作名確認ウインドウ1901には、クラスTrapezoid204で定義した操作areaCaluculate()1101のスペルを修正した操作areaCalculate()1902が、スーパークラスの操作をオーバーライドすることをプログラム開発者に知らせるメッセージ1903を表示している。また同時に、スペルを修正した操作areaCalculate()1902がサブクラスでオーバーライドされることをプログラム開発者に知らせるメッセージ1904を表示している。
【0051】プログラム開発者114は、必要に応じてクラス図201を確認して操作名を変更する(ステップ1206)。「クラス図確認」ボタン1905を押すと、図20に示すクラス図確認ウインドウ2001が表示される。クラス図201の作成には、クラス情報DB104からクラス名1401、スーパークラス1402、属性の可視性1403、属性の型1404、属性名1405、操作の可視性1406、操作名1407を取得し作成する。
【0052】作成されたクラス図はクラス図確認ウインドウ2001のクラス図表示領域2002に表示され、編集中のクラスTrapezoid204を色付けして表示2004し、編集していない他のクラスと区別している。プログラム開発者114はクラス図表示領域2002のクラス図から、色づけされたクラスTrapezoid2003の操作areaCalculate()2004は、クラスPolygon2005の操作areaCalculate() 2007、および、クラスSquare2006の操作areaCalculate()2008をオーバーライドしていることがわかる。また、クラスTrapezoid2003の操作areaCalculate()2004は、クラスParallogram2009の操作areaCalculate()2010がオーバーライドすることがわかる。
【0053】クラス図表示領域2002のクラス図を確認したら、「戻る」ボタン2011を押す。「戻る」ボタン2011が押されると、図21に示す操作名修正ウインドウ2101が表示される。操作名修正ウインドウ2101は、プログラム開発者114がクラスTrapezoid204で定義した操作areaCaluculate()1101を表示する領域2103と、スペルを修正された操作areaCalculate()1902を表示する領域2102と、異なる操作名で定義するために、新たな操作名を入力するための領域2104を持っている。プログラム開発者114は、「修正後」選択ボタン2105、「修正前」選択ボタン2106、「その他」選択ボタン2107から適切な選択ボタンを選択する。本実施例では、オブジェクト指向プログラミング支援装置101によって、スペルを修正された操作areaCalculate()1902を定義するために、「修正後」選択ボタン2105を選択する。操作名修正ウインドウ2101で操作名を修正したら、「終了」ボタン2108を押す。
【0054】「終了」ボタン2108が押されたときに、「その他」選択ボタン2107が選択されている場合(ステップ1206でYES)は、ステップ1201へ戻り、プログラム開発者が変更した操作類について、再びスーパークラスの操作をオーバーライドする操作なのか、または、サブクラスでオーバーライドされる操作なのかの検査を行うことになる。
【0055】「修正後」選択ボタン2105および「修正前」選択ボタン2106が選択された場合には、図22に示すように、プログラム編集ウインドウ401のプログラム編集領域402に定義された操作areaCalculate()1902を定義して、2201のように表示する。同時に、操作areaCalculate()1902がスーパークラスの操作をオーバーライドすることをプログラム開発者114に知らせるメッセージ2202と、操作areaCalculate()1902がサブクラスの操作によりオーバーライドされることをプログラム開発者114に知らせるメッセージ2203を表示する。
【0056】プログラム開発者114は、図23に示すように、操作areaCalculate()1902の処理に当たるプログラム2301を記述したら、操作や、操作の処理に関するコメントを記述する。プログラム開発者114は、操作areaCalculate()1902に対するコメントを入力する位置2302で、/*」で始まり「*/」までの領域コメント302の開始文字列「/*」を入力する。コメントの開始文字列「/*」が入力されると、図24に示すコメント編集ウインドウ2401が表示される。プログラム開発者114は、操作areaCalculate()1902に対するコメント2402をコメント編集領域2403に記述する。操作areaCalculate()1902に対するコメント2402を記述し終えたら、「入力終了」ボタン2404を押す。「入力終了」ボタン2404が押されたら、プログラム編集ウインドウ401が表示される。このときコメント非表示チェックボックス609にチェックがされているので、入力した操作areaCalculate()1902に対するコメントは、プログラム編集領域402には表示されない。
【0057】次に、操作areaCalculate()1902の中の変数area2303に対するコメントを記述する。変数area2303に対するコメントを入力する位置2304で「//」始まる一行のコメント303の開始文字列「//」を記述する。コメントの開始文字列「//」が入力されると、図25に示すコメント編集ウインドウ2501が表示される。プログラム開発者114は、変数area2303に対するコメント2502をコメント編集領域2501に記述する。変数area2303に対するコメントを記述し終えたら、「入力終了」ボタン2503を押す。「入力終了」ボタン2503が押されたら、プログラム編集ウインドウ401が表示される。このとき「属性非表示」ボタン706にチェック「レ」801をされているので、入力したコメントは、プログラム編集領域402には表示されない。同様に、クラスTrapezoid204に必要なすべての操作を記述し、図26に示すような必要なコメント2601を記述し、「終了」ボタンを押す。
【0058】次に、プログラム編集ウインドウ401が図27に示すように表示される。このときも、入力したコメントはプログラム編集領域402には表示されない。ここで、「終了」ボタン2701が押されたら、表示/編集装置113は、編集された内容をプログラム保存装置102へ保存して、オブジェクト指向プログラミング支援装置101の動作を終了する。編集ファイルTrapezoid.java 503には、図28に示すように、オブジェクト指向プログラミング支援装置101を使用して編集した部分2801が追加される。
【0059】
【発明の効果】以上、説明したように、本発明のオブジェクト指向プログラミング支援装置によれば、次のような効果が得られる。
(1) オーバーライドを目的とした操作と、それ以外の操作をプログラム開発時に知ることが可能になり、単純なスペルミスにより、オーバーライドがされないことを防ぐことができる。
(2) また、プログラムの特定の部分の開発時には必要のない部分(コメントや、属性、属性に値を設定する操作、属性の値を取得する操作)をプログラム開発者から隠すことで、プログラム開発者は、プログラム開発に必要な部分のみに集中することが可能になり、効率的にプログラムの開発を行うことができる。
(3) クラス図でクラスの操作や継承関係を確認しながら開発することが可能になり、効率的なプログラム開発が可能になる。
【出願人】 【識別番号】000233055
【氏名又は名称】日立ソフトウエアエンジニアリング株式会社
【出願日】 平成12年9月29日(2000.9.29)
【代理人】 【識別番号】100073760
【弁理士】
【氏名又は名称】鈴木 誠
【公開番号】 特開2002−108612(P2002−108612A)
【公開日】 平成14年4月12日(2002.4.12)
【出願番号】 特願2000−298119(P2000−298119)