JPH11237984A - オブジェクト指向プログラム設計支援装置、方法および記録媒体 - Google Patents
オブジェクト指向プログラム設計支援装置、方法および記録媒体Info
- Publication number
- JPH11237984A JPH11237984A JP10037696A JP3769698A JPH11237984A JP H11237984 A JPH11237984 A JP H11237984A JP 10037696 A JP10037696 A JP 10037696A JP 3769698 A JP3769698 A JP 3769698A JP H11237984 A JPH11237984 A JP H11237984A
- Authority
- JP
- Japan
- Prior art keywords
- class
- structure information
- program
- variable
- program structure
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
に分割する場合のオブジェクト指向プログラムの設計を
容易化する。 【解決手段】 分割対象となるクラスが指定されると、
プログラム構造情報生成手段32は、プログラムソース
記憶手段41中の当該クラスのプログラムの構造情報を
生成し、プログラム構造情報記憶手段42に記憶させ
る。プログラム表示情報生成手段33によって設計者対
話手段31を介して出力装置2にプログラム構造情報が
表示される。設計者は、表示されたプログラム構造情報
に基づいて委譲クラスから被委譲クラスに移動すべき移
動メソッドを選択する。プログラム解析手段35は、選
択された移動メソッドに加えてさらに移動すべきメソッ
ドを追加する。プログラム変換手段34は、これらの移
動メソッドに従ってプログラム構造情報を変換する。メ
ソッドの移動後、同様にして変数が委譲クラスから被委
譲クラスに移動される。
Description
プログラム設計支援装置、方法およびこの方法を実現す
るためのプログラムを記録した記録媒体に関し、特にプ
ログラム設計者がクラスを分割して被委譲クラスを設け
ることでプログラムの柔軟性を高める作業を支援するも
のに関する。
ては、クラスごとに役割を分担させ、改造や拡張の際
に、改造に関連する役割をもったクラスだけを取り替え
ればよいようにすることで柔軟性を高める。このような
設計を実現する手法として、それまで1つのクラスで行
っていた処理の一部を別のクラスに任せる方法(以下、
委譲という)がある。なお、本明細書において、処理を
任せるクラスを委譲クラス、処理を任されるクラスを被
委譲クラスと呼ぶこととする。
が、設計を進めるに従い、委譲クラスと被委譲クラスに
分割した方が望ましいとわかることがある。この場合、
まず、該クラスから変数(メンバ変数ともいう)とメソ
ッド(メンバ関数ともいう)の一部を被委譲クラスに移
動させる。次に、プログラムが正しく動作するようにメ
ソッドの内容を修正する。とくに、移動されたメソッド
を呼び出す主体や移動された変数のアクセス主体が委譲
クラスのインスタンスから被委譲クラスのインスタンス
に変わるため、これらの変更が必要になる。
ログラムの例を示す。記述言語はJava言語に準じている
が、説明の正確さを損なわない程度に簡略化している。
なお、Java言語に限らず一般のオブジェクト指向プログ
ラミング言語に対して以下の議論は成り立つ。
データを読み込んでソートし、その結果を画面に表示す
るものである。クラスUIWindowはユーザ・インタフェー
スを司るクラスであり、クラスSorterはソート処理を行
うクラスである。
ブルソート、バイナリソート、クイックソートなど種々
のものがあり、これらのアルゴリズムを簡単に切り替え
たいという要求があったとする。図8のプログラムに対
して委譲を用いて、この要求を実現した例を図9に示
す。図9で、委譲クラスはSorterで、被委譲クラスはSo
rtAlgorithmおよびそのサブクラスのQuickSortである。
クラスSorterからメソッドsortとcountDataがクラスQui
ckSortに移動している。ここでは、簡単のためSortAlgo
rithmは省略しているが、QuickSortと同様にメソッドso
rtとcountDataをもつ。
ートアルゴリズムを用いたいときは、UIWindowのmain()
の中でsaの代入文(行15)において、new文によって生成
するインスタンスのクラスをQuickSortから所望のソー
トアルゴリズムを実装するクラスに変更するだけでよ
い。
ログラムの変更箇所を局所化できるため、プログラムの
柔軟性が増すという利点がある。クラスの分割の仕方は
一通りではない。図10に、図9と異なる被委譲クラス
の例を示す。図10では、メソッドcountData()がクラ
スQuickSortに移動されず、クラスSorterに残ってい
る。メソッドcountData()はクイックソートアルゴリズ
ムに本質的なものではないので、このような分割も可能
である。
ス)を委譲クラスと被委譲クラスとに分割する際に、プ
ログラム設計者が行う作業について、図2のフローチャ
ートを参照して説明する。
述するように本発明の実施の形態においても適用されて
いるが、後述する実施の形態の場合と異なり、従来の技
術では、これらの作業をプログラム設計者が手作業で行
っていた。
求めて被委譲クラスの生成を行う。分割対象クラスが委
譲クラスと被委譲クラスに分割されることになる。この
段階では、委譲クラスは分割対象クラスと同じ構造であ
る。被委譲クラスは変数もメソッドももたない空のクラ
スである。図9を例にすると、クラスSorterが委譲クラ
ス、クラスQuickSortが被委譲クラスである。
委譲クラスへのメソッドの移動を行う。委譲クラスがも
つメソッドの一部を被委譲クラスに移動する。以下で
は、移動するメソッドを移動メソッドと呼ぶ。プログラ
ム設計者はどのメソッドを移動メソッドとするかを判断
し、被委譲クラスに移動メソッドを追加する。図9を例
にすると、メソッドcountDataとメソッドsortが、クラ
スSorterからクラスQuickSortへの移動メソッドであ
る。
委譲クラスへの変数の移動を行う。委譲クラスがもつ変
数の一部を被委譲クラスに移動する。以下では、移動し
た変数を移動変数と呼ぶ。プログラム設計者はどの変数
を移動変数とするかを判断し、被委譲クラスに移動変数
を追加する。図9を例にすると、変数b1と変数numが、
クラスSorterからクラスQuickSortへの移動変数であ
る。
委譲クラスへの動作主体の変更を行う。すなわち、それ
まで委譲クラスのインスタンスが実行していた移動メソ
ッドを被委譲クラスのインスタンスが実行するように変
更する。また、移動変数を被委譲クラスのインスタンス
がアクセスするように変更する。さらに、委譲クラスが
被委譲クラスのインスタンスを取得するための文をプロ
グラムに挿入する。
ラスのインスタンスを参照するための変数saを追加して
いる。次に、行15で被委譲クラスQuickSortのインスタ
ンスを生成し、行16でそのインスタンスを委譲クラスSo
rterの変数saに渡している。また、行33で移動メソッド
sortの呼び出し主体をSorter自身からsaに変更している
(行33のsa.sort()はsaのメソッドsort()を呼び出すこと
を意味する)。さらに、行27で移動変数b1のアクセス主
体をSorter自身から被委譲クラスQuickSortのインスタ
ンスであるsaに変更している(行27のsa.b1はsaの変数b1
の値を取得することを意味する)。
ッドから移動メソッドを呼び出す記述があった場合は、
いったん委譲クラスから被委譲クラスのインスタンスを
呼び出し、そのインスタンスが該移動メソッドを呼び出
すように変更すればよい。例えば、図8でクラスUIWind
owのメソッドmainからクラスSorterのsortを直接呼んで
いたとすると、その記述はs1.sort()となる。図9に変
更する際には、これをs1.sa.sort()に変更する。移動変
数に関しても同様である。
委譲クラスへの動作主体の変更を行う。移動メソッドの
記述の中には、委譲クラスがもつ他のメソッドを呼ぶ文
が含まれることがある。このとき、そのメソッドの呼び
出し主体は委譲クラス自身であるため、呼び出し主体の
記述は通常省略される(図8の行38のメソッドcountData
の呼び出しはこの例である)。
移したときに、呼び出し主体の記述を省略したままだ
と、被委譲クラスが呼び出し主体となってしまって動作
が不正になってしまう。このため、この呼び出し主体が
委譲クラスのインスタンスとなるように陽に記述する必
要がある。移動変数のアクセス主体に関しても同じ問題
が生じる。
手順で行う。図10を例にすると、被委譲クラスQuickS
ortのメソッドsortの中で、委譲クラスSorterのメソッ
ドcountDataが呼ばれている。移動前は、図8の行38の
ように呼び出し主体が省略されていたが、移動後は、委
譲クラスSorterのインスタンスであるs1を呼び出し主体
にしている。このため、行16で被委譲クラスQuickSort
のインスタンスであるsaの変数s1に委譲クラスSorterの
インスタンスs1を渡しており、これが行45のs1の値とな
っている。なお、s1は図8の行14にあるように、分割前
から生成されているため、被委譲クラスQuickSortに渡
すためにあらためて生成する必要はない。
によって、分割対象クラスを委譲クラスと被委譲クラス
に分割することができる。しかしながら、従来は、前記
作業を支援する方法や装置はなく、通常のプログラム開
発用エディタを用いてプログラム設計者が手作業で行っ
ていたため、作業が煩雑になり、工数がかかるという問
題があった。以下、従来例における問題点についてさら
に詳しく説明する。
プログラム設計者が移動メソッドをもれなく選択するの
に手間がかかることである。とくに移動メソッドが別の
メソッドmを呼んでいる場合に、メソッドmも移動すべ
きかどうかを判定するのに手間がかかる。例えば、メソ
ッドmが移動メソッド以外からは呼ばれていなければ、
メソッドmも移動した方が被委譲クラスの独立性を高め
る点で望ましい。このためには、プログラム設計者は委
譲クラスのすべてのメソッドの内容を分析して、メソッ
ドmが移動メソッドだけから呼ばれていることを確認す
る必要があり、工数がかかる。
プログラム設計者が移動変数を選択するのに手間がかか
ることである。例えば、変数xが移動メソッド以外から
アクセスされていなければ、変数xを移動変数にした方
が被委譲クラスの独立性を高める点で望ましい。このた
めには、プログラム設計者は委譲クラスのすべてのメソ
ッドの内容を分析して、変数xが移動メソッドだけから
アクセスされていることを確認する必要があり、工数が
かかる。
委譲クラスに追加したインスタンス参照用変数(例え
ば、図9の行23のsa)に被委譲クラスのインスタンスを
代入する位置を求めるのに手間がかかることである。該
インスタンス参照用変数は、移動メソッドの呼び出しや
移動変数へのアクセスに用いられるため、これらの呼び
出しやアクセスが実行される前に、インスタンス参照用
変数に被委譲クラスのインスタンスが設定されていなけ
ればならない。ところが、プログラム全体を調べて、そ
のような条件を満たす位置を探すには多大な工数がかか
り、しかも誤りが混入する可能性がある。
被委譲クラスが委譲クラスのインスタンスを取得する必
要があるかどうかを判定するのに手間がかかることであ
る。この判定には、移動メソッド内に、委譲クラスに残
ったメソッドや変数へのアクセスがあるかどうかを調べ
る必要があり、工数がかかる。
において、動作主体の変更に手間がかかることである。
変更するには、各メソッド記述から変更すべきメソッド
や変数を探し、エディタ等を用いて呼び出し主体やアク
セス主体を逐一書き換えていく必要があり、工数がかか
る。
委譲クラスにメソッドを移動する作業において、プログ
ラム設計者の作業効率を向上させることである。
委譲クラスに変数を移動する作業において、プログラム
設計者の作業効率を向上させることである。
譲クラスのインスタンスを取得する文を挿入する作業に
おいて、プログラム設計者の作業効率を向上させること
である。
譲クラスのインスタンスを取得する文を挿入する操作に
おいて、プログラム設計者の作業効率を向上させること
である。
る作業において、設計者の作業効率を向上させることで
ある。
るため、本発明の第1の観点にかかるオブジェクト指向
プログラム設計支援装置は、処理の一部を他のクラスに
委譲する委譲クラスと該処理を委譲される被委譲クラス
とを含むオブジェクト指向プログラムのプログラム構造
情報が記憶されるプログラム構造情報記憶手段と、前記
委譲クラスが有するメソッドのうちで前記被委譲クラス
に移動すべき移動メソッドを選択させる移動メソッド選
択手段と、前記プログラム構造情報記憶手段に記憶され
たプログラム構造情報を参照して、前記委譲クラスが有
するメソッドのうちの前記メソッド選択手段によって選
択された移動メソッドのみから呼び出されるメソッドを
さらに移動メソッドとして追加するメソッド追加手段
と、前記メソッド選択手段によって選択或いは前記メソ
ッド追加手段によって追加された移動メソッドに関する
情報を、前記プログラム構造情報記憶手段に記憶されて
いる被委譲クラスのプログラム構造情報に追加するプロ
グラム構造情報変換手段と、を備えることを特徴とす
る。
装置では、移動メソッドだけから呼ばれるメソッド、す
なわち委譲クラスから被委譲クラスに移動すべきメソッ
ドが前記メソッド追加手段によって移動メソッドに加え
られる。このため、移動すべきメソッドに漏れが生じる
ことがなく、オブジェクトの独立性が高いオブジェクト
指向プログラムを容易に生成設計ことが可能となる。
装置において、前記メソッド選択手段は、例えば、前記
プログラム構造情報記憶手段に記憶されたプログラム構
造情報のうちの前記委譲クラスが有するメソッドを表示
させる手段と、該表示されたメソッドから前記移動メソ
ッドを選択させる手段とを備えるものとすることができ
る。
すべきメソッドの選択を対話処理により容易に行えるの
で、オブジェクト指向プログラムの設計がさらに容易に
なる。
第2の観点にかかるオブジェクト指向プログラム設計支
援装置は、処理の一部を他のクラスに委譲する委譲クラ
スと該処理を委譲される被委譲クラスとを含むオブジェ
クト指向プログラムのプログラム構造情報であって、前
記委譲クラスから前記被委譲クラスに移動される移動メ
ソッドに関する情報を前記被委譲クラスのプログラム構
造情報として含むものを記憶するプログラム構造情報記
憶手段と、前記委譲クラスが有する変数のうちで前記被
委譲クラスに移動すべき移動変数を選択させる変数選択
手段と、前記プログラム構造情報記憶手段に記憶された
プログラム構造情報を参照して、前記委譲クラスの変数
のうち前記移動メソッドのみからアクセスされる変数を
移動変数として追加する変数追加手段と、前記変数選択
手段によって選択或いは前記変数追加手段によって追加
された移動変数に関する情報を、前記プログラム構造情
報記憶手段に記憶されている被委譲クラスのプログラム
構造情報に追加するプログラム構造情報変換手段と、を
備えることを特徴とする。
装置では、移動メソッドだけから呼ばれるメソッドのみ
からアクセスされる変数、すなわち委譲クラスから被委
譲クラスに移動すべき変数が前記メソッド追加手段によ
って移動メソッドに加えられる。このため、移動すべき
変数に漏れが生じることがなく、オブジェクトの独立性
が高いオブジェクト指向プログラムを容易に生成設計こ
とが可能となる。
装置において、前記変数選択手段は、例えば、前記プロ
グラム構造情報記憶手段に記憶されたプログラム構造情
報のうちの前記委譲クラスが有する変数を表示させる手
段と、該表示された変数から前記移動変数を選択させる
手段とを備えるものとすることができる。
き変数の選択を対話処理により容易に行えるので、オブ
ジェクト指向プログラムの設計がさらに容易になる。
発明の第3の観点にかかるオブジェクト指向プログラム
設計支援装置は、処理の一部を他のクラスに委譲する委
譲クラスと該処理を委譲される被委譲クラスとを含むオ
ブジェクト指向プログラムのプログラム構造情報が記憶
されるプログラム構造情報記憶手段と、前記委譲クラス
が有するメソッドのうちで前記被委譲クラスに移動すべ
き移動メソッドを選択させる移動メソッド選択手段と、
前記プログラム構造情報記憶手段に記憶されたプログラ
ム構造情報を参照して、前記委譲クラスが有するメソッ
ドのうちの前記メソッド選択手段によって選択された移
動メソッドのみから呼び出されるメソッドをさらに移動
メソッドとして追加するメソッド追加手段と、前記委譲
クラスが有する変数のうちで前記被委譲クラスに移動す
べき移動変数を選択させる変数選択手段と、前記プログ
ラム構造情報記憶手段に記憶されたプログラム構造情報
を参照して、前記委譲クラスの変数のうち前記移動メソ
ッドのみからアクセスされる変数を移動変数として追加
する変数追加手段と、前記メソッド選択手段によって選
択或いは前記メソッド追加手段によって追加された移動
メソッドに関する情報及び前記変数選択手段によって選
択或いは前記変数追加手段によって追加された移動変数
に関する情報を、前記プログラム構造情報記憶手段に記
憶されている被委譲クラスのプログラム構造情報に追加
するプログラム構造情報変換手段と、を備えることを特
徴とする。
発明の第4の観点にかかるオブジェクト指向プログラム
設計支援装置は、処理の一部を他のクラスに委譲する委
譲クラスと該処理を委譲される被委譲クラスとを含むオ
ブジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を前記被委譲ク
ラスのプログラム構造情報として含むものを記憶するプ
ログラム構造情報記憶手段と、前記プログラム構造情報
記憶手段に記憶されている前記委譲クラスに含まれる文
のうちの前記移動メソッドを呼び出す文を抽出する第1
の文抽出手段と、前記プログラム構造情報記憶手段に記
憶されている前記委譲クラスに含まれる文のうちの前記
移動変数にアクセスする文を抽出する第2の文抽出手段
と、前記プログラム構造情報記憶手段を参照して、前記
第1、第2の文抽出手段の少なくとも一方が抽出した文
が実行されるまでの経路を算出する第1の経路算出手段
と、前記第1の経路算出手段が算出した経路に基づい
て、前記委譲クラスが前記被委譲クラスを参照するため
の第1の参照変数と、前記被委譲クラスのインスタンス
を生成するための文と、前記インスタンスを前記第1の
参照変数に代入する文とを入力させる第1の入力手段
と、前記第1の入力手段によって入力された第1の参照
変数に、前記プログラム構造情報記憶手段に記憶されて
いる移動メソッドの呼び出し主体を変更する第1のプロ
グラム構造情報変換手段と、前記第1の入力手段によっ
て入力された第1の参照変数に、前記プログラム構造情
報記憶手段に記憶されている移動変数へのアクセス主体
を変更する第2のプログラム構造情報変換手段と、を備
えることを特徴とする。
装置において、前記第1の入力手段は、例えば、前記第
1の経路算出手段が算出した経路が識別可能となるよう
に前記プログラム構造情報記憶手段に記憶されたプログ
ラム構造情報を表示させる手段と、該表示されたプログ
ラム構造情報から前記被委譲クラスのインスタンスを生
成するための文と前記インスタンスを前記参照変数に代
入する文とを入力させる手段と、を備えるものとするこ
とができる。
装置では、前記第1の経路算出手段が算出した経路に従
って、委譲クラスが被委譲クラスのインスタンスを取得
する文を挿入することができ、また、移動メソッドの呼
び出し主体及び移動変数のアクセス主体を自動的に変更
することができる。このため、プログラム設計者に手間
をかけることなく、オブジェクト指向プログラムの設計
が容易に行えるようになる。
発明の第5の観点にかかるオブジェクト指向プログラム
設計支援装置は、処理の一部を他のクラスに委譲する委
譲クラスと該処理を委譲される被委譲クラスとを含むオ
ブジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を前記被委譲ク
ラスのプログラム構造情報として含むものを記憶するプ
ログラム構造情報記憶手段と、前記プログラム構造情報
記憶手段に記憶されている前記移動メソッドのうちの前
記委譲クラスのメソッドを呼び出す文を抽出す第3の文
抽出手段と、前記プログラム構造情報記憶手段に記憶さ
れている前記移動メソッドのうちの前記委譲クラスの変
数にアクセスする文を抽出する第4の文抽出手段と、前
記プログラム構造情報記憶手段を参照して、前記第3、
第4の文抽出手段の少なくとも一方が抽出した文が実行
されるまでの経路を算出する第2の経路算出手段と、前
記第2の経路算出手段が算出した経路に基づいて、前記
被委譲クラスが前記委譲クラスを参照するための第2の
参照変数と、前記委譲クラスのインスタンスを前記第2
の参照変数に代入する文とを入力させる第2の入力手段
と、前記第2の入力手段によって入力された第2の参照
変数に、前記プログラム構造情報記憶手段に記憶されて
いる前記委譲クラスのメソッドの呼び出し主体を変更す
る第3のプログラム構造情報変換手段と、前記第2の入
力手段によって入力された第2の参照変数に、前記プロ
グラム構造情報記憶手段に記憶されている前記委譲クラ
スの変数へのアクセス主体を変更する第4のプログラム
構造情報変換手段と、を備えることを特徴とする。
装置において、前記第2の入力手段は、例えば、前記第
2の経路算出手段が算出した経路が識別可能となるよう
に前記プログラム構造情報記憶手段に記憶されたプログ
ラム構造情報を表示させる手段と、該表示されたプログ
ラム構造情報から前記委譲クラスのインスタンスを前記
第2の参照変数に代入する文を入力させる手段とを備え
るものとすることができる。
装置では、前記第1の経路算出手段が算出した経路に従
って、被委譲クラスが委譲クラスのインスタンスを取得
する文を挿入することができ、また、委譲クラスのメソ
ッドの呼び出し主体及び委譲クラスの変数のアクセス主
体を自動的に変更することができる。このため、プログ
ラム設計者に手間をかけることなく、オブジェクト指向
プログラムの設計が容易に行えるようになる。
発明の第6の観点にかかるオブジェクト指向プログラム
設計支援装置は、処理の一部を他のクラスに委譲する委
譲クラスと該処理を委譲される被委譲クラスとを含むオ
ブジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を前記被委譲ク
ラスのプログラム構造情報として含むものを記憶するプ
ログラム構造情報記憶手段と、前記プログラム構造情報
記憶手段に記憶されている前記委譲クラスに含まれる文
のうちの前記移動メソッドを呼び出す文を抽出する第1
の文抽出手段と、前記プログラム構造情報記憶手段に記
憶されている前記委譲クラスに含まれる文のうちの前記
移動変数にアクセスする文を抽出する第2の文抽出手段
と、前記プログラム構造情報記憶手段を参照して、前記
第1、第2の文抽出手段の少なくとも一方が抽出した文
が実行されるまでの経路を算出する第1の経路算出手段
と、前記プログラム構造情報記憶手段に記憶されている
前記移動メソッドのうちの前記委譲クラスのメソッドを
呼び出す文を抽出す第3の文抽出手段と、前記プログラ
ム構造情報記憶手段に記憶されている前記移動メソッド
のうちの前記委譲クラスの変数にアクセスする文を抽出
する第4の文抽出手段と、前記プログラム構造情報記憶
手段を参照して、前記第3、第4の文抽出手段の少なく
とも一方が抽出した文が実行されるまでの経路を算出す
る第2の経路算出手段と、前記第1の経路算出手段が算
出した経路に基づいて、前記委譲クラスが前記被委譲ク
ラスを参照するための第1の参照変数と、前記被委譲ク
ラスのインスタンスを生成するための文と、前記インス
タンスを前記第1の参照変数に代入する文とを入力させ
る第1の入力手段と、前記第2の経路算出手段が算出し
た経路に基づいて、前記被委譲クラスが前記委譲クラス
を参照するための第2の参照変数と、前記委譲クラスの
インスタンスを前記第2の参照変数に代入する文とを入
力させる第2の入力手段と、前記第1の入力手段によっ
て入力された第1の参照変数に、前記プログラム構造情
報記憶手段に記憶されている移動メソッドの呼び出し主
体を変更する第1のプログラム構造情報変換手段と、前
記第1の入力手段によって入力された第1の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
移動変数へのアクセス主体を変更する第2のプログラム
構造情報変換手段と、前記第2の入力手段によって入力
された第2の参照変数に、前記プログラム構造情報記憶
手段に記憶されている前記委譲クラスのメソッドの呼び
出し主体を変更する第3のプログラム構造情報変換手段
と、前記第2の入力手段によって入力された第2の参照
変数に、前記プログラム構造情報記憶手段に記憶されて
いる前記委譲クラスの変数へのアクセス主体を変更する
第4のプログラム構造情報変換手段と、を備えることを
特徴とする。
第7の観点にかかるオブジェクト指向プログラム設計支
援方法は、処理の一部を他のクラスに委譲する委譲クラ
スと該処理を委譲される被委譲クラスとを含むオブジェ
クト指向プログラムのプログラム構造情報に従って、オ
ブジェクト指向プログラムの設計を支援するオブジェク
ト指向プログラム設計支援方法であって、前記委譲クラ
スが有するメソッドのうちで前記被委譲クラスに移動す
べき移動メソッドを選択させる移動メソッド選択ステッ
プと、前記プログラム構造情報を参照して、前記委譲ク
ラスが有するメソッドのうちの前記メソッド選択ステッ
プで選択された移動メソッドのみから呼び出されるメソ
ッドをさらに移動メソッドとして追加するメソッド追加
ステップと、前記メソッド選択ステップで選択或いは前
記メソッド追加ステップで追加された移動メソッドに関
する情報を、前記プログラム構造情報のうちの被委譲ク
ラスのプログラム構造情報に追加するプログラム構造情
報変換ステップと、を含むことを特徴とする。
第8の観点にかかるオブジェクト指向プログラム設計支
援方法は、処理の一部を他のクラスに委譲する委譲クラ
スと該処理を委譲される被委譲クラスとを含むオブジェ
クト指向プログラムのプログラム構造情報であって、前
記委譲クラスから前記被委譲クラスに移動される移動メ
ソッドに関する情報を含むものに従って、オブジェクト
指向プログラムの設計を支援するオブジェクト指向プロ
グラム設計支援方法であって、前記委譲クラスが有する
変数のうちで前記被委譲クラスに移動すべき移動変数を
選択させる変数選択ステップと、前記プログラム構造情
報を参照して、前記委譲クラスの変数のうち前記移動メ
ソッドのみからアクセスされる変数を移動変数として追
加する変数追加ステップと、前記変数選択ステップで選
択或いは前記変数追加ステップで追加された移動変数に
関する情報を、前記プログラム構造情報のうちの被委譲
クラスのプログラム構造情報に追加するプログラム構造
情報変換ステップと、を含むことを特徴とする。
発明の第9の観点にかかるオブジェクト指向プログラム
設計支援方法は、処理の一部を他のクラスに委譲する委
譲クラスと該処理を委譲される被委譲クラスとを含むオ
ブジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するオ
ブジェクト指向プログラム設計支援方法であって、前記
プログラム構造情報を参照して、前記委譲クラスに含ま
れる文のうちの前記移動メソッドを呼び出す文を抽出す
る第1の文抽出ステップと、前記プログラム構造情報を
参照して、前記委譲クラスに含まれる文のうちの前記移
動変数にアクセスする文を抽出する第2の文抽出ステッ
プと、前記プログラム構造情報を参照して、前記第1、
第2の文抽出ステップの少なくとも一方で抽出した文が
実行されるまでの経路を算出する第1の経路算出ステッ
プと、前記第1の経路算出ステップで算出した経路に基
づいて、前記委譲クラスが前記被委譲クラスを参照する
ための第1の参照変数と、前記被委譲クラスのインスタ
ンスを生成するための文と、前記インスタンスを前記第
1の参照変数に代入する文とを入力させる第1の入力ス
テップと、前記第1の入力ステップで入力された第1の
参照変数に、前記プログラム構造情報に含まれる移動メ
ソッドの呼び出し主体を変更する第1のプログラム構造
情報変換ステップと、前記第1の入力ステップで入力さ
れた第1の参照変数に、前記プログラム構造情報に含ま
れる移動変数へのアクセス主体を変更する第2のプログ
ラム構造情報変換ステップと、を含むことを特徴とす
る。
発明の第10の観点にかかるオブジェクト指向プログラ
ム設計支援方法は、処理の一部を他のクラスに委譲する
委譲クラスと該処理を委譲される被委譲クラスとを含む
オブジェクト指向プログラムのプログラム構造情報であ
って、前記委譲クラスから前記被委譲クラスに移動され
る移動メソッド及び移動変数に関する情報を含むものに
従って、オブジェクト指向プログラムの設計を支援する
オブジェクト指向プログラム設計支援方法であって、前
記プログラム構造情報を参照して、前記移動メソッドの
うちの前記委譲クラスのメソッドを呼び出す文を抽出す
第3の文抽出ステップと、前記プログラム構造を参照し
て、前記移動メソッドのうちの前記委譲クラスの変数に
アクセスする文を抽出する第4の文抽出ステップと、前
記プログラム構造情報を参照して、前記第3、第4の文
抽出ステップの少なくとも一方で抽出した文が実行され
るまでの経路を算出する第2の経路算出ステップと、前
記第2の経路算出ステップ算出した経路に基づいて、前
記被委譲クラスが前記委譲クラスを参照するための第2
の参照変数と、前記委譲クラスのインスタンスを前記第
2の参照変数に代入する文とを入力させる第2の入力ス
テップと、前記第2の入力ステップで入力された第2の
参照変数に、前記プログラム構造情報に含まれる前記委
譲クラスのメソッドの呼び出し主体を変更する第3のプ
ログラム構造情報変換ステップと、前記第2の入力ステ
ップで入力された第2の参照変数に、前記プログラム構
造情報記憶に含まれる前記委譲クラスの変数へのアクセ
ス主体を変更する第4のプログラム構造情報変換ステッ
プと、を含むことを特徴とする。
第11の観点にかかるコンピュータ読み取り可能な記録
媒体は、処理の一部を他のクラスに委譲する委譲クラス
と該処理を委譲される被委譲クラスとを含むオブジェク
ト指向プログラムのプログラム構造情報に従って、オブ
ジェクト指向プログラムの設計を支援するプログラムを
記憶するコンピュータ読み取り可能な記録媒体であっ
て、前記委譲クラスが有するメソッドのうちで前記被委
譲クラスに移動すべき移動メソッドを選択させる移動メ
ソッド選択ステップと、前記プログラム構造情報を参照
して、前記委譲クラスが有するメソッドのうちの前記メ
ソッド選択ステップで選択された移動メソッドのみから
呼び出されるメソッドをさらに移動メソッドとして追加
するメソッド追加ステップと、前記メソッド選択ステッ
プで選択或いは前記メソッド追加ステップで追加された
移動メソッドに関する情報を、前記プログラム構造情報
のうちの被委譲クラスのプログラム構造情報に追加する
プログラム構造情報変換ステップと、を実行するプログ
ラムを記憶することを特徴とする。
第12の観点にかかるコンピュータ読み取り可能な記録
媒体は、処理の一部を他のクラスに委譲する委譲クラス
と該処理を委譲される被委譲クラスとを含むオブジェク
ト指向プログラムのプログラム構造情報であって、前記
委譲クラスから前記被委譲クラスに移動される移動メソ
ッドに関する情報を含むものに従って、オブジェクト指
向プログラムの設計を支援するプログラムを記憶するコ
ンピュータ読み取り可能な記録媒体であって、前記委譲
クラスが有する変数のうちで前記被委譲クラスに移動す
べき移動変数を選択させる変数選択ステップと、前記プ
ログラム構造情報を参照して、前記委譲クラスの変数の
うち前記移動メソッドのみからアクセスされる変数を移
動変数として追加する変数追加ステップと、前記変数選
択ステップで選択或いは前記変数追加ステップで追加さ
れた移動変数に関する情報を、前記プログラム構造情報
のうちの被委譲クラスのプログラム構造情報に追加する
プログラム構造情報変換ステップと、を実行するプログ
ラムを記憶することを特徴とする。
発明の第13の観点にかかるコンピュータ読み取り可能
な記録媒体は、処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するプ
ログラムを記憶するコンピュータ読み取り可能な記録媒
体であって、前記プログラム構造情報を参照して、前記
委譲クラスに含まれる文のうちの前記移動メソッドを呼
び出す文を抽出する第1の文抽出ステップと、前記プロ
グラム構造情報を参照して、前記委譲クラスに含まれる
文のうちの前記移動変数にアクセスする文を抽出する第
2の文抽出ステップと、前記プログラム構造情報を参照
して、前記第1、第2の文抽出ステップの少なくとも一
方で抽出した文が実行されるまでの経路を算出する第1
の経路算出ステップと、前記第1の経路算出ステップで
算出した経路に基づいて、前記委譲クラスが前記被委譲
クラスを参照するための第1の参照変数と、前記被委譲
クラスのインスタンスを生成するための文と、前記イン
スタンスを前記第1の参照変数に代入する文とを入力さ
せる第1の入力ステップと、前記第1の入力ステップで
入力された第1の参照変数に、前記プログラム構造情報
に含まれる移動メソッドの呼び出し主体を変更する第1
のプログラム構造情報変換ステップと、前記第1の入力
ステップで入力された第1の参照変数に、前記プログラ
ム構造情報に含まれる移動変数へのアクセス主体を変更
する第2のプログラム構造情報変換ステップと、を実行
するプログラムを記憶することを特徴とする。
発明の第14の観点にかかるコンピュータ読み取り可能
な記録媒体は、処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するプ
ログラムを記憶するコンピュータ読み取り可能な記録媒
体であって、前記プログラム構造情報を参照して、前記
移動メソッドのうちの前記委譲クラスのメソッドを呼び
出す文を抽出す第3の文抽出ステップと、前記プログラ
ム構造を参照して、前記移動メソッドのうちの前記委譲
クラスの変数にアクセスする文を抽出する第4の文抽出
ステップと、前記プログラム構造情報を参照して、前記
第3、第4の文抽出ステップの少なくとも一方で抽出し
た文が実行されるまでの経路を算出する第2の経路算出
ステップと、前記第2の経路算出ステップ算出した経路
に基づいて、前記被委譲クラスが前記委譲クラスを参照
するための第2の参照変数と、前記委譲クラスのインス
タンスを前記第2の参照変数に代入する文とを入力させ
る第2の入力ステップと、前記第2の入力ステップで入
力された第2の参照変数に、前記プログラム構造情報に
含まれる前記委譲クラスのメソッドの呼び出し主体を変
更する第3のプログラム構造情報変換ステップと、前記
第2の入力ステップで入力された第2の参照変数に、前
記プログラム構造情報に含まれる前記委譲クラスの変数
へのアクセス主体を変更する第4のプログラム構造情報
変換ステップと、を実行するプログラムを記憶すること
を特徴とする。
て図面を参照して詳細に説明する。
かかるオブジェクト指向プログラム設計支援装置は、キ
ーボードおよびマウス等を含む入力装置1と、ディスプ
レイ装置などの出力装置2と、プログラム制御により動
作するデータ処理装置3と、情報を記憶する記憶装置4
とを含む。
1と、プログラム構造情報記憶部42とを備えている。
オブジェクト指向プログラムのソースコードを記憶す
る。プログラム構造情報記憶部42は、設計対象のオブ
ジェクト指向プログラムをプログラム構造情報に変換し
た結果を記憶する。
ログラムを解析するために用いる内部表現であり、クラ
スグラフとメソッドグラフからなる。クラスグラフは、
クラス構造およびクラス間の関係を表す。クラスは、ク
ラスがもつ変数とメソッドからなる。クラス間の関係に
は、参照関係と継承関係がある。図11に、図8のプロ
グラムに対するクラスグラフの例を示す。
れる。参照関係はクラス間の矢印つき線分で表される。
例えば、図11では、クラスUIWindowがクラスSorterを
参照している。参照関係は、変数に参照先クラスのイン
スタンスを代入することで実現される。継承関係は白抜
きの三角形をもつ線分で表される。例えば、図11で
は、クラスQuickSortがクラスSortAlgorithmを継承して
いる。参照関係に付随したs1,saは参照のラベルであ
る。なお、r1,r2,i1は後述の図12(b)との対応づけ
のために便宜上つけた関係idである。また、図8で行03
のStringや行20のFileもクラスであるが、簡単のため、
図11では省略している。
表現したものである。プログラムの文をノードとし、文
の実行順序をエッジで表す。図13に、図8のクラスSo
rterのメソッドinputDataに対するメソッドグラフを示
す。図13において、長方形がノード、矢印がエッジを
表している。
ートに示すプログラムを記憶するメモリおよびこれらの
プログラムを実行するプロセッサとによって構成され
る。データ処理装置3は、プロセッサがプログラムを実
行することによって、プログラムを設計者対話部31
と、プログラム構造情報生成部32と、プログラム表示
情報生成部33と、プログラム変換部34と、プログラ
ム解析部35との各機能を実現する。
ラムソース記憶部41からプログラムソースコードを読
み出し、該プログラムソースコードを解析してプログラ
ム構造情報を生成する。生成されたプログラム構造情報
はプログラム構造情報記憶部42に格納する。
を生成するには、プログラムソースコードを構文解析
し、クラスグラフの構成要素と要素間の関係を抽出す
る。まず、クラスが持つ変数とメソッドを抽出すること
で、図12(b)に示すようなクラス構造を生成する。
(c)に示すような参照関係情報を生成する。例えば、
図9で行02の記述により、変数s1を通してクラスUIWind
owからクラスSorterへの参照があることがわかり、参照
関係情報の中に、起点フィールドにUIWindow、終点にフ
ィールドにSorterを設定する。また、ラベルフィールド
には変数名s1を設定する。
抽出し、図12(d)に示すような継承関係情報を生成
する。例えば、図9で行36のextends文がスーパークラ
スを記述する構文であり、クラスQuickSortのスーパー
クラスがSortAlgorithmであることを意味しており、こ
れにより継承関係情報の中に、起点フィールドにQuickS
ort、終点フィールドにSortAlgorithmを設定する。以上
の情報をまとめて、図12(a)に示すようなクラスグ
ラフ情報を生成する。
フを生成するには、プログラムソースコードを構文解析
し、メソッドグラフの構成要素と要素間の関係を抽出す
る。具体的には、メソッド内の文をノードとし、文間の
実行順序の関係をエッジで表す。エッジは、通常のフロ
ーチャートと同様にして、順次実行、if文、while文、
メソッド呼び出しなどの制御構造ごとにノード間に設定
する。ノード情報は、図14(c)に示すような形式
で、内容フィールドに文そのものを、メソッドフィール
ドにはクラスグラフ生成時につけられたメソッドidを設
定する。
示すようなメソッド情報を生成する。インタフェースフ
ィールドには、メソッドのインタフェース(メソッド
名、引数の型、返値の型)を設定する。
報を生成する。起点フィールドにはエッジの起点である
ノードid、終点フィールドにはエッジの終点であるノー
ドidを設定する。タイプフィールドには、同一メソッド
内でのノードの遷移を表すflowと、あるメソッドから他
のメソッドを呼び出すcallがある。オブジェクト指向プ
ログラムの場合、同一名のメソッドが複数存在し、実際
にどのメソッドが呼ばれるかは実行時に決まるため、ca
llエッジは呼ばれる可能性のある各メソッドに張る。呼
ばれる可能性のあるメソッドはそれを呼び出すインスタ
ンスのクラスかそのサブクラスに限られる。
情報を参照して、クラス分割のためのプログラム変換指
示情報やプログラム設計者への作業支援情報を生成す
る。例えば、移動メソッドだけから呼ばれているメソッ
ドを抽出したり、移動メソッドだけからアクセスされて
いる変数を抽出したり、委譲クラスに残ったメソッドや
変数へのアクセスが移動メソッド内にあるかどうかを判
定したり、委譲クラスが被委譲クラスのインスタンスを
取得する文を挿入する適切な位置として該インスタンス
を使用するすべての文の支配ノードを求めたりする。こ
こで、文Aに対する支配ノードとは、メソッドグラフの
開始ノードから文Aを表すノードに到達する際に、必ず
通過するノードのことを言う。
ラム解析部35が生成した情報をプログラム設計者が見
やすい形式に加工した表示情報を生成する。また、プロ
グラム構造情報からプログラムソースコードの生成も行
う。
生成部33が生成した表示情報を出力装置2に表示し、
プログラム設計者に入力装置1からプログラム変換指示
情報を入力するよう促す。プログラム変換指示情報とし
て、分割対象クラスの指定、被委譲クラス名、移動メソ
ッド、移動変数、インスタンス生成文などの挿入などが
ある。
ム解析部35あるいは設計者対話部31からのプログラ
ム変換指示情報にもとづいて、プログラム構造情報を変
更する。
ト指向プログラム設計支援装置の動作について、図1〜
図7を参照して説明する。
プログラム設計支援装置においてクラス分割を行うため
の作業手順の概略について、図2のフローチャートを参
照して説明する。
めて被委譲クラスの生成を行う。次に、ステップS2
で、委譲クラスから被委譲クラスへメソッドを移動す
る。次に、ステップS3で委譲クラスから被委譲クラス
へ変数を移動する。次に、ステップS4で委譲クラスか
ら被委譲クラスへの動作主体の変更を行う。そして、ス
テップS5で、被委譲クラスから委譲クラスへの動作主
体の変更を行う。この実施の形態では、上記の処理は、
従来例の場合と異なり、オブジェクト指向プログラム設
計支援装置の支援の下に行われる。
において、この実施の形態のオブジェクト指向プログラ
ム設計支援装置が行うプログラム設計の支援のための処
理について、図3〜図7のフローチャートを参照して、
それぞれ詳細に説明する。
S1における委譲クラスから被委譲クラスへの変数の移
動を支援するための処理を詳細に示すフローチャートで
ある。
において、設計対象のオブジェクト指向プログラムから
プログラム構造情報を生成する。具体的には、設計者対
話部31からプログラム設計者に設計対象であるプログ
ラム名を入力させ、プログラム構造情報生成部32がそ
のプログラム名をもとに、プログラムソース記憶部41
にあらかじめ記憶されていたプログラムソースコードを
読みとってプログラム構造情報を生成し、プログラム構
造情報記憶部42に格納する。その詳細は、プログラム
構造情報生成部32の説明で述べた通りである。
ム設計者にクラス構成を表示して、分割対象クラスを指
定させる。具体的には、プログラム表示情報生成部33
がプログラム構造情報記憶部42からクラスグラフを読
みとって、クラス構成の表示形式を生成して設計者対話
部31に渡し、出力装置2に表示する。
ラス図でもよいし、単なるクラス名の一覧でもよい。図
12に示すようなクラスグラフの情報があれば、クラス
図を作成することは可能である。ただし、クラス図を表
示するための座標値などのレイアウト情報をどのように
生成してもよい。また、プログラムソースコードをその
まま、あるいはクラス定義の部分だけを抽出して表示し
てもよい。
ティングデバイスを用いて、クラス構成に表示されたク
ラスの中から分割対象クラスを指定する。表示形式がク
ラス図の場合は、クラスを表す長方形はマウスに反応す
るGUI(Graphical User Interface)部品を用いて作
成すればよい。クラス名一覧の場合は、リストボックス
などの一覧用のGUI部品を用いることができる。プロ
グラムソースコードを表示する場合は、例えば、クラス
名の部分だけマウスに反応するGUI部品を用いて表示
して、マウスによる選択を可能にすればよい。
ラス名をプログラム設計者に入力させる。具体的には、
設計者対話部31が文字列入力用のGUI部品を表示し
て行う。
のステップで入力された分割対象クラス名と被委譲クラ
ス名をもとに、被委譲クラスを生成して、プログラム構
造情報記憶部42のプログラム構造情報に追加する。具
体的には、プログラム変換部34が設計者対話部31か
ら分割対象クラス名と被委譲クラス名を受け取り、図1
2(a)に示すようなクラスグラフ情報に被委譲クラス
名と新たな参照関係名を追加する。前記参照関係名で示
される参照関係の実体として、図12(c)に示すよう
な情報を設定する。
を前記分割対象クラス名、終点を前記被委譲クラス名と
し、ラベルは空のままとする。また、被委譲クラスの実
体として、図12(b)に示すようなクラス情報を生成
する。この段階では、クラス名を前記被委譲クラスとす
るだけで、他のフィールドは空のままとする。
なメソッド内容をもたないクラス。インタフェースだけ
を規定する)とし、そのサブクラスを実際の被委譲クラ
スにすることも多い。図9の例でもそのようになってい
る。この場合は、ステップS23において、被委譲クラ
ス名として、スーパークラスとサブクラスの両方をプロ
グラム設計者に入力させる。クラスグラフには、スーパ
ークラスとサブクラスの両方の情報を追加する。図12
(a)の例では、クラスSortAlgorithmがスーパークラ
ス、クラスQuickSortがサブクラスになる。
S2における委譲クラスから被委譲クラスへのメソッド
の移動を支援するための処理を詳細に示すフローチャー
トである。
において被委譲クラスへの移動メソッドをプログラム設
計者に選択させる。具体的には、プログラム表示情報生
成部33がプログラム構造情報を参照してメソッド一覧
情報を生成し、設計者対話部31がこのメソッド一覧を
出力装置2に表示する。プログラム設計者は表示された
メソッド一覧から移動したいメソッドをマウスなどを用
いて選択する。次に、ステップS32において、委譲ク
ラスのメソッドのうち、ステップS31で得た移動メソ
ッドだけから呼ばれるものを抽出して、移動メソッドに
追加する。
14に示すようなメソッドグラフを参照して、委譲クラ
スの各メソッドについて、その開始ノードを終点とする
すべてのcallエッジの起点を調べ、該起点がすべて移動
メソッドのノードであるものを選ぶ。なお、このような
メソッドは移動メソッドが追加されるに従って増える可
能性があるため、完全に求めたい場合は、移動メソッド
が増えなくなるまで前記処理を繰り返す。処理時間を短
くしたい場合は、繰り返しを行わないようにしてもよ
い。
本当に移動メソッドに追加するかどうかをプログラム設
計者に問い合わせてもよい。その場合は、設計者対話部
31が、追加された移動メソッドの一覧をプログラム解
析部35から受け取って出力装置2に表示し、プログラ
ム設計者に本当に追加すべきメソッドを選択させる。
動メソッドをプログラム構造情報記憶部42のプログラ
ム構造情報に反映する。具体的には、プログラム変換部
34がプログラム解析部35から移動メソッド情報を受
け取り、被委譲クラスに関する図12(b)に示すよう
なクラス情報のメソッドフィールドに該移動メソッドを
追加する。該メソッドのメソッド情報(図14(b))は
そのままにする。
サブクラスからなる場合は、スーパークラス側のメソッ
ド情報は、インタフェースフィールドだけを与え、開始
ノードフィールドおよびノードフィールドは空にしてお
く。これは、被委譲クラスのスーパークラスは抽象クラ
スとするため、そのメソッドはインタフェースしかもた
ないからである。
S3における委譲クラスから被委譲クラスへの変数の移
動を支援するための処理を詳細に示すフローチャートで
ある。
において被委譲クラスへの移動変数をプログラム設計者
に選択させる。具体的には、プログラム表示情報生成部
33がプログラム構造情報を参照して変数一覧情報を生
成し、設計者対話部31がこの変数一覧を出力装置2に
表示する。プログラム設計者は表示された変数一覧から
移動したい変数をマウスなどを用いて選択する。
スの変数のうち、ステップS2で得た移動メソッドだけ
から呼ばれる変数を抽出して、移動変数に追加する。具
体的には、プログラム解析部35が、図14に示すよう
なメソッドグラフを参照して、すべてのクラスの各メソ
ッドの各ノードに対して内容フィールドの文を解析し、
委譲クラスの変数がアクセスされているかどうかを調
べ、委譲クラス以外のメソッドからはアクセスされず、
委譲クラスのメソッドのうちでも移動メソッドからしか
アクセスされていないものを選択する。
数名が委譲クラスの変数名と一致しており、しかも、ア
クセス主体が委譲クラスであるかどうかを調べることで
判定する。オブジェクト指向プログラムでは、同一名の
変数でもクラスが異なれば違う変数となるため、アクセ
ス主体が委譲クラスであることを確認する必要がある。
委譲クラスがアクセス主体かどうかを判定する方法は、
委譲クラス以外のクラスのメソッドの場合と委譲クラス
のメソッドの場合で異なる。
は、アクセス主体記述が委譲クラスのインスタンスを表
す変数であるとき、委譲クラスがアクセス主体となる。
委譲クラスのメソッドの中では、アクセス主体記述が委
譲クラスのインスタンスを表す変数であるとき、また
は、アクセス主体記述が省略されていてしかも該変数が
メソッドのローカル変数でないとき、または、呼び出し
主体記述が"this"あるいは"self"など自分自身を指す予
約語であるとき、委譲クラスがアクセス主体となる。
動変数をb1とすると、行26のb1.add(x)におけるb1の部
分は変数アクセス記述で、しかもアクセス主体記述は省
略されていてかつローカル変数ではないのでクラスSort
er自身がアクセス主体となる。一方、図8にはないが、
仮にx.b1という記述があったとして、変数xのクラスがS
orter以外のクラスであったとすると、アクセス主体がS
orterとはならないため、x.b1は委譲クラスのアクセス
記述にはならない。もし、変数xが表すインスタンスの
クラスがSorterであれば、Sorterがアクセス主体とな
る。
に移動変数に追加するかどうかをプログラム設計者に問
い合わせてもよい。その場合は、設計者対話部31が、
追加された移動変数の一覧をプログラム解析部35から
受け取って出力装置2に表示し、プログラム設計者に本
当に追加すべき変数を選択させる。
動変数をプログラム構造情報記憶部42のプログラム構
造情報に反映する。具体的には、プログラム変換部34
がプログラム解析部35から移動変数情報を受け取り、
被委譲クラスに関する図12(b)に示すようなクラス
情報の変数フィールドに該移動変数を追加する。
つ場合、スーパークラスにも移動変数を追加する。すな
わち、図12(b)に示すようなクラス情報において、
変数フィールドに移動変数を追加する。
S4における委譲クラスから被委譲クラスへの動作主体
の変更を支援するための処理を示すフローチャートであ
る。
において、すべてのクラスのメソッドの中で移動メソッ
ド呼び出しを含む文をすべて抽出する。具体的には、プ
ログラム解析部35が、プログラム構造情報を参照し
て、メソッド名が移動メソッドと一致しており、しか
も、呼び出し主体が委譲クラスであるものを選ぶ。
のメソッドでもクラスが異なれば違うメソッドとなるた
め、移動メソッド呼び出しを正しく求めるには、呼び出
し主体が委譲クラスであることを確認する必要がある。
委譲クラスが呼び出し主体かどうかを判定する方法は、
委譲クラス以外のクラスのメソッドの場合と委譲クラス
のメソッドの場合で異なる。
は、呼び出し主体記述が委譲クラスのインスタンスを表
す変数であるとき、委譲クラスが呼び出し主体となる。
委譲クラスのメソッドの中では、呼び出し主体記述が委
譲クラスのインスタンスを表す変数であるとき、また
は、呼び出し主体記述が省略されているとき、または、
呼び出し主体記述が"this"あるいは"self"など自分自身
を指す予約語であるとき、委譲クラスが呼び出し主体と
なる。
動メソッドをsortとすると、行35のsort()はメソッド呼
び出し記述であり、しかも呼び出し主体は省略されてい
るのでクラスSorter自身が呼び出し主体となる。一方、
図8にはないが、仮にx.sort()という記述があったとし
て、変数xが表すインスタンスのクラスがSorter以外の
クラスであったとすると、呼び出し主体はSorterになら
ない。もし、変数xが表すインスタンスのクラスがSorte
rであれば、Sorterが呼び出し主体となる。
クラスのメソッドの中で、移動変数アクセスを含む文を
すべて抽出する。具体的には、プログラム解析部35
が、プログラム構造情報を参照して、変数名が移動変数
と一致しており、しかも、アクセス主体が委譲クラスで
あるものを選ぶ。その方法は、ステップS42で述べた
方法と同様である。
ッド呼び出しおよび移動変数アクセスを含む文すべてに
対する支配ノードを求める。ここで、文Aの支配ノード
とは、メソッドグラフにおいて、開始ノードから文Aを
表すノードまでの経路が必ず通るノードのことを言う。
この定義から、文Aを実行するまでに支配ノードは必ず
実行されることになる。
析部35が、求めた移動メソッド呼び出しノードおよび
移動変数アクセスノードそれぞれに対する支配ノードの
集合を求め、その共通集合をとる。支配ノードを求める
には、公知のアルゴリズムを用いればよい。
スでのインスタンス参照用変数R1宣言文、被委譲クラ
スのインスタンスを生成する文、および、該インスタン
スを変数R1に代入する文をプログラム設計者に追加さ
せる。具体的には、設計者対話部31が、まず変数R1
の名前をプログラム設計者に入力させる。
集合Sをプログラム解析部35から受け取って、プログ
ラム表示情報生成部33に渡して、プログラム構造情報
と支配ノード集合Sから支配ノードの位置がよくわかる
ようなプログラム表示情報を生成させる。
えば、支配ノードに対応する文だけ他と異なる色をつけ
たソースコードを用いる。そして、そのプログラム表示
情報を出力装置2に表示して、プログラム設計者に支配
ノードの位置を示し、被委譲クラスのインスタンスを生
成する文と該インスタンスを変数R1に代入する文をプ
ログラム設計者に追加させる。追加された文は、プログ
ラム構造情報生成部32に渡されて、プログラム構造情
報に変換され、プログラム構造情報記憶部42に記憶さ
れる。
表示する意味を説明する。前述のように、文Aの支配ノ
ードは文Aが実行される前に必ず実行される。従って、
移動メソッド呼び出しおよび移動変数アクセスを含む文
の支配ノードは、移動メソッド呼び出しおよび移動変数
アクセスが実行される前に必ず実行される。
セスの動作主体を委譲クラスから被委譲クラスのインス
タンスに変更するには、委譲クラスが該インスタンスを
取得しなくてはならない。ところが、該インスタンス取
得が移動メソッド呼び出しおよび移動変数アクセスの実
行前に行われなければ、移動メソッド呼び出しおよび移
動変数アクセスは動作主体が存在しないために実行でき
ない。このため、該インスタンス取得を行う適切な位置
として、移動メソッド呼び出しおよび移動変数アクセス
の支配ノードを用いる。
ッドの呼び出し主体を変数R1に変更する。ステップS
54により変数R1は被委譲クラスのインスタンスを指
すので、ステップS55によって移動メソッドの呼び出
し主体は被委譲クラスのインスタンスに変更されること
になる。
換部34が、設計者対話部31から変数R1の名前を受
け取り、また、プログラム解析部35からステップS5
1で求めた移動メソッド呼び出しを含むノードを受け取
る。そして、図14(c)に示すようなノード情報の内
容フィールドの記述を変数R1によるメソッド呼び出し
に変更し、プログラム構造情報記憶部42に記憶させ
る。
saであり、行33において移動メソッドsortの呼び出し主
体記述をsaに変更している(図8の行35を参照)。また、
図9にはないが、仮に変数s1をSorterクラスのインスタ
ンスとしてs1.sort()というメソッド呼び出しがあった
とすると、この呼び出し主体記述をs1.saに変更し、s1.
sa.sort()というメソッド呼び出しに変更する。
のアクセス主体を変数R1に変更する。ステップS54
により変数R1は被委譲クラスのインスタンスを指すの
で、ステップS56によって移動変数のアクセス主体は
被委譲クラスのインスタンスに変更されることになる。
換部34が、設計者対話部31から変数R1の名前を受
け取り、また、プログラム解析部35からステップS5
2で求めた移動変数アクセスを含むノードを受け取る。
そして、図14(c)に示すようなノード情報の内容フ
ィールドの記述を変数R1による変数アクセスに変更
し、プログラム構造情報記憶部42に記憶させる。例え
ば、図9の例では、変数R1の名前はsaであり、行27に
おいて移動変数b1のアクセス主体記述をsaに変更してい
る(図8の行26を参照)。
erクラスのインスタンスとしてs1.b1という変数アクセ
スがあったとすると、このアクセス主体記述をs1.saに
変更し、s1.sa.b1という変数アクセスに変更する。
述や変数アクセス記述の構文はプログラミング言語によ
り異なるため、前記変換処理は対象プログラミング言語
の構文に合わせた形式で行う。
S5における被委譲クラスから委譲クラスへの動作主体
の変更を支援するための処理を示すフローチャートであ
る。
において、被委譲クラスのメソッド内で委譲クラスのメ
ソッド呼び出しを含む文を求める。具体的には、プログ
ラム解析部35が被委譲クラスのメソッド(すなわち移
動メソッド)の各ノードについて、呼び出し主体が委譲
クラスで、かつ、メソッド名が委譲クラスのメソッド
(移動メソッドは除く)と一致するものを求める。この
判定は、メソッドの呼び出し主体記述が省略されている
か、呼び出し主体記述が"this"あるいは"self"などの自
分自身を指す予約語である場合に、呼び出し主体が委譲
クラスであると判断する。
ラスのメソッド内で委譲クラスの変数アクセスを含む文
を求める。具体的には、プログラム解析部35が被委譲
クラスのメソッド(すなわち移動メソッド)の各ノード
について、アクセス主体が委譲クラスで、かつ、変数名
が委譲クラスの変数(移動変数は除く)と一致するもの
を求める。アクセス主体記述が省略されていてしかもロ
ーカル変数でないか、アクセス主体記述が"this"あるい
は"self"などの自分自身を指す予約語である場合に、ア
クセス主体が委譲クラスであると判断する。
S61およびステップS62で求めた文の集合が空でな
いかをチェックする。もし空ならば、処理を終了する。
空でなければステップS64に進む。
ラスのメソッド内での委譲クラスのメソッド呼び出し文
および委譲クラスの変数アクセス文に対する支配ノード
の集合Sを求める。求め方は、ステップS53と同じで
ある。
S64で求めた支配ノード集合Sを表示して、被委譲ク
ラスでのインスタンス参照用変数R2宣言文、および、
委譲クラスのインスタンスを変数R2に代入する文をプ
ログラム設計者に追加させる。この方法は、ステップS
54と同じである。ただし、委譲クラスのインスタンス
はすでに存在するため、委譲クラスのインスタンス生成
文は追加しない点が異なる。
スのメソッドの呼び出し主体を変数R2に変更する。具
体的な方法は、他インスタンスが呼び出し主体になるこ
とがない以外は、ステップS55と同様である。
スの変数のアクセス主体を変数R2に変更する。具体的
な方法は、他インスタンスがアクセス主体になることが
ないこと以外は、ステップS56と同様である。
のフローチャートのステップS2〜S2について、具体
的な例を適用したときのオブジェクト指向プログラム設
計支援装置の動作を説明する。
のプログラム例を用いて説明する。図8において、クラ
スSorterを分割して、図9にあるような被委譲クラスSo
rtAlgorithmおよびQuickSortを生成したいとする。分割
の目的は、従来の技術で述べたように、種々のソートア
ルゴリズムを容易に取り換えられるようにすることであ
る。
ドとして第一に選択するのは、メソッドsortである。な
ぜなら、メソッドsortがソートアルゴリズムの本体だか
らである。ところが、メソッドsortの中でメソッドcoun
tDataが呼ばれており、しかも、これは他のメソッドか
らは呼ばれていない。よって、メソッドcountDataも移
動メソッドに入れた方が、被委譲クラスの独立性が高く
なる。
図4において、ステップS32で、委譲クラスSorterの
メソッドのうち、移動メソッドだけから呼ばれるものを
抽出する。図8でクラスSorterのメソッドには、inputD
ata、countData、do、sortの4つがあるが、このうち、
それまでに移動メソッドとして選択されたsortだけから
呼ばれるのはcountDataである。countDataの呼び出しは
行38にしかない。行38では、countDataの呼び出し主体
の記述が省略されているため、呼び出し主体は委譲クラ
スSorter自身であることがわかり、Sorterのメソッドco
untDataの呼び出しであることが確認される。従って、
移動の対象になる。以上により、移動メソッドはsortと
countDataの2つになる。
に図8のプログラム例を用いて説明する。ステップS2
で移動メソッドを抽出した後、ステップS41において
プログラム設計者は移動変数を選択するが、ここではb1
を選択したとする。委譲クラスSorterの変数は、f、b
1、numの3つであるが、ステップS42において、移動
メソッドsortとcountDataだけからアクセスされるもの
を抽出する。numが該当する。
けである(行38、および、図8では省略してあるが、ソ
ート処理本体で用いるとする)。しかも、numのアクセス
主体の記述は省略されているため、アクセス主体は主体
は委譲クラスSorter自身であることがわかり、Sorterの
変数numのアクセスであることが確認される。従って、
移動の対象になる。他の変数f、移動メソッドでないメ
ソッドinputDataでアクセスされているため、移動変数
には追加しない。以上により、移動変数はb1とnumとな
る。
のプログラム例を用いて説明する。ステップS2、S3
により、移動メソッドとしてsortとcountData、移動変
数としてb1とnumが選択され、被委譲クラスQuickSortに
移されている。
いて、委譲クラスSorterのメソッドから、これら移動メ
ソッドおよび移動変数をアクセスしている文を求める
と、行27および行33が得られる(図9は変換が完了した
プログラムを示しているが、変換途中では、行27はb1.a
dd(x)、行33はsort()のままである。また、行15および
行16も、この時点ではまだ挿入されていない)。
び行33に共通の支配ノードを求めると、行04から行07、
行11から行14、行24から行26、行31となる(ただし、行2
7自身は除外する)。これらの行は、行27および行33が実
行される前に必ず実行される。次に、ステップS54で
支配ノードをディスプレイ画面上に表示し、プログラム
設計者にインスタンス取得文の挿入を促す。プログラム
設計者は、図8のプログラム全体を調べるのではなく、
前記の支配ノードの中で、被委譲クラスのインスタンス
を取得する文の適当な挿入位置を捜せばよい。
のインスタンスを生成し、行16でインスタンス参照用変
数sa(行23で宣言文を挿入)に該インスタンスを設定して
いる。これらは、いずれも前記支配ノードに含まれる位
置である。
ッドの呼び出し主体を変更する。図9では、行33のメソ
ッドsortの呼び出し主体をインスタンス参照用変数saに
変換している。 次に、ステップS56において、移動
変数のアクセス主体を変更する。図9では、行27の変数
b1のアクセス主体をインスタンス参照用変数saに変換し
ている。
図10のプログラム例を用いて説明する。図9の例で
は、被委譲クラスQuickSortから委譲クラスSorterのメ
ソッドや変数へのアクセスはないため、ステップS63
で処理が終了する。
になっており、そのためメソッドsortの中から委譲クラ
スSorterのメソッドcountDataを呼ぶことになる(行4
5)。そこで、ステップS64において、行45の支配ノー
ドを求めると、行35から行36、行25から行30、行11か
ら行16、行04から行07となる(この時点では、行17はま
だ挿入されていない)。これ以降は、ステップS5と同
様に処理すればよい。
かるオブジェクト指向プログラム設計支援装置によれ
ば、以下に示すような効果がある。
スにメソッドを移動する作業において、プログラム設計
者の作業効率が向上することである。その理由は、図4
で説明したように、移動メソッドだけから呼ばれるメソ
ッドを自動抽出することにより、プログラム設計者が移
動すべきメソッドをもれなく抽出することを支援するた
めである。
スに変数を移動する作業において、プログラム設計者の
作業効率が向上することである。その理由は、図5で説
明したように、移動メソッドだけから呼ばれる変数を自
動抽出することにより、プログラム設計者が移動すべき
変数をもれなく抽出することを支援するためである。
のインスタンスを取得する文を挿入する作業において、
プログラム設計者の作業効率が向上することである。そ
の理由は、図6で説明したように、インスタンスを取得
する文の適切な挿入位置の候補を自動的に求めて、プロ
グラム設計者に提示するためである。
のインスタンスを取得する文を挿入する作業において、
プログラム設計者の作業効率が向上することである。そ
の理由は、図7で説明したように、まず、被委譲クラス
が委譲クラスのインスタンスを取得する必要があるかど
うかを調べ、さらに、必要がある場合には、インスタン
スを取得する文の適切な挿入位置の候補を自動的に求め
て、プログラム設計者に提示するためである。
体や移動変数のアクセス主体を変更する作業において、
設計者の作業効率が向上することである。その理由は、
図6および図7で説明したように、各メソッド記述から
変更すべきメソッド呼び出しおよび変数アクセスを抽出
して、その呼び出し主体およびアクセス主体を自動的に
変更するためである。
様々な変形、応用が可能である。以下、上記の実施の形
態の変形例について説明する。
委譲クラスと被委譲クラスとに分割して設計し直すとき
のすべての工程を、オブジェクト指向プログラム設計支
援装置によって支援していた。しかしながら、これらの
工程の一部のみを支援するオブジェクト指向プログラム
設計支援装置として構成することも可能である。
被委譲クラスと委譲クラスとへの分割は、図2のフロー
チャートに示す手順に従って行われていた。しかしなが
ら、この中で、ステップS4とステップS5の処理につ
いては、ステップS3までの処理が終了していることを
条件として、その順序は任意である。
ジェクト指向プログラムの設計を支援するためのプログ
ラムは、データ処理装置3を構成するメモリの中に記憶
されているものとして説明した。しかしながら、これら
のプログラムは、CD−ROMやフロッピーディスクな
どのコンピュータ読み取り可能な記録媒体に格納して配
布してもよい。
プログラムの設計時における作業効率をよくすることが
できる。
プログラム生成装置の構成を示すブロック図である。
プログラム生成装置においてクラス分割を行うための作
業手順の概略を示すフローチャートである。
生成を支援するための処理を詳細に示すフローチャート
である。
被委譲クラスへのメソッドの移動を支援するための処理
を詳細に示すフローチャートである。
被委譲クラスへの変数の移動を支援するための処理を詳
細に示すフローチャートである。
被委譲クラスへの動作主体の変更を支援するための処理
を示すフローチャートである。
ら委譲クラスへの動作主体の変更を支援するための処理
を示すフローチャートである。
る。
ラス分割を行った後のオブジェクト指向プログラムの例
を示す図である。
クラス分割を行った後のオブジェクト指向プログラムの
例を示す図である。
る。
ある。
Claims (18)
- 【請求項1】処理の一部を他のクラスに委譲する委譲ク
ラスと該処理を委譲される被委譲クラスとを含むオブジ
ェクト指向プログラムのプログラム構造情報が記憶され
るプログラム構造情報記憶手段と、 前記委譲クラスが有するメソッドのうちで前記被委譲ク
ラスに移動すべき移動メソッドを選択させる移動メソッ
ド選択手段と、 前記プログラム構造情報記憶手段に記憶されたプログラ
ム構造情報を参照して、前記委譲クラスが有するメソッ
ドのうちの前記メソッド選択手段によって選択された移
動メソッドのみから呼び出されるメソッドをさらに移動
メソッドとして追加するメソッド追加手段と、 前記メソッド選択手段によって選択或いは前記メソッド
追加手段によって追加された移動メソッドに関する情報
を、前記プログラム構造情報記憶手段に記憶されている
被委譲クラスのプログラム構造情報に追加するプログラ
ム構造情報変換手段と、を備えることを特徴とするオブ
ジェクト指向プログラム設計支援装置。 - 【請求項2】前記メソッド選択手段は、前記プログラム
構造情報記憶手段に記憶されたプログラム構造情報のう
ちの前記委譲クラスが有するメソッドを表示させる手段
と、該表示されたメソッドから前記移動メソッドを選択
させる手段とを備えることを特徴とする請求項1に記載
のオブジェクト指向プログラム設計支援装置。 - 【請求項3】処理の一部を他のクラスに委譲する委譲ク
ラスと該処理を委譲される被委譲クラスとを含むオブジ
ェクト指向プログラムのプログラム構造情報であって、
前記委譲クラスから前記被委譲クラスに移動される移動
メソッドに関する情報を前記被委譲クラスのプログラム
構造情報として含むものを記憶するプログラム構造情報
記憶手段と、 前記委譲クラスが有する変数のうちで前記被委譲クラス
に移動すべき移動変数を選択させる変数選択手段と、 前記プログラム構造情報記憶手段に記憶されたプログラ
ム構造情報を参照して、前記委譲クラスの変数のうち前
記移動メソッドのみからアクセスされる変数を移動変数
として追加する変数追加手段と、 前記変数選択手段によって選択或いは前記変数追加手段
によって追加された移動変数に関する情報を、前記プロ
グラム構造情報記憶手段に記憶されている被委譲クラス
のプログラム構造情報に追加するプログラム構造情報変
換手段と、を備えることを特徴とするオブジェクト指向
プログラム設計支援装置。 - 【請求項4】前記変数選択手段は、前記プログラム構造
情報記憶手段に記憶されたプログラム構造情報のうちの
前記委譲クラスが有する変数を表示させる手段と、該表
示された変数から前記移動変数を選択させる手段とを備
えることを特徴とする請求項3に記載のオブジェクト指
向プログラム設計支援装置。 - 【請求項5】処理の一部を他のクラスに委譲する委譲ク
ラスと該処理を委譲される被委譲クラスとを含むオブジ
ェクト指向プログラムのプログラム構造情報が記憶され
るプログラム構造情報記憶手段と、 前記委譲クラスが有するメソッドのうちで前記被委譲ク
ラスに移動すべき移動メソッドを選択させる移動メソッ
ド選択手段と、 前記プログラム構造情報記憶手段に記憶されたプログラ
ム構造情報を参照して、前記委譲クラスが有するメソッ
ドのうちの前記メソッド選択手段によって選択された移
動メソッドのみから呼び出されるメソッドをさらに移動
メソッドとして追加するメソッド追加手段と、 前記委譲クラスが有する変数のうちで前記被委譲クラス
に移動すべき移動変数を選択させる変数選択手段と、 前記プログラム構造情報記憶手段に記憶されたプログラ
ム構造情報を参照して、前記委譲クラスの変数のうち前
記移動メソッドのみからアクセスされる変数を移動変数
として追加する変数追加手段と、 前記メソッド選択手段によって選択或いは前記メソッド
追加手段によって追加された移動メソッドに関する情報
及び前記変数選択手段によって選択或いは前記変数追加
手段によって追加された移動変数に関する情報を、前記
プログラム構造情報記憶手段に記憶されている被委譲ク
ラスのプログラム構造情報に追加するプログラム構造情
報変換手段と、を備えることを特徴とするオブジェクト
指向プログラム設計支援装置。 - 【請求項6】処理の一部を他のクラスに委譲する委譲ク
ラスと該処理を委譲される被委譲クラスとを含むオブジ
ェクト指向プログラムのプログラム構造情報であって、
前記委譲クラスから前記被委譲クラスに移動される移動
メソッド及び移動変数に関する情報を前記被委譲クラス
のプログラム構造情報として含むものを記憶するプログ
ラム構造情報記憶手段と、 前記プログラム構造情報記憶手段に記憶されている前記
委譲クラスに含まれる文のうちの前記移動メソッドを呼
び出す文を抽出する第1の文抽出手段と、 前記プログラム構造情報記憶手段に記憶されている前記
委譲クラスに含まれる文のうちの前記移動変数にアクセ
スする文を抽出する第2の文抽出手段と、 前記プログラム構造情報記憶手段を参照して、前記第
1、第2の文抽出手段の少なくとも一方が抽出した文が
実行されるまでの経路を算出する第1の経路算出手段
と、 前記第1の経路算出手段が算出した経路に基づいて、前
記委譲クラスが前記被委譲クラスを参照するための第1
の参照変数と、前記被委譲クラスのインスタンスを生成
するための文と、前記インスタンスを前記第1の参照変
数に代入する文とを入力させる第1の入力手段と、 前記第1の入力手段によって入力された第1の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
移動メソッドの呼び出し主体を変更する第1のプログラ
ム構造情報変換手段と、 前記第1の入力手段によって入力された第1の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
移動変数へのアクセス主体を変更する第2のプログラム
構造情報変換手段と、を備えることを特徴とするオブジ
ェクト指向プログラム設計支援装置。 - 【請求項7】前記第1の入力手段は、前記第1の経路算
出手段が算出した経路が識別可能となるように前記プロ
グラム構造情報記憶手段に記憶されたプログラム構造情
報を表示させる手段と、該表示されたプログラム構造情
報から前記被委譲クラスのインスタンスを生成するため
の文と前記インスタンスを前記参照変数に代入する文と
を入力させる手段と、を備えることを特徴とする請求項
6に記載のオブジェクト指向プログラム設計支援装置。 - 【請求項8】処理の一部を他のクラスに委譲する委譲ク
ラスと該処理を委譲される被委譲クラスとを含むオブジ
ェクト指向プログラムのプログラム構造情報であって、
前記委譲クラスから前記被委譲クラスに移動される移動
メソッド及び移動変数に関する情報を前記被委譲クラス
のプログラム構造情報として含むものを記憶するプログ
ラム構造情報記憶手段と、 前記プログラム構造情報記憶手段に記憶されている前記
移動メソッドのうちの前記委譲クラスのメソッドを呼び
出す文を抽出す第3の文抽出手段と、 前記プログラム構造情報記憶手段に記憶されている前記
移動メソッドのうちの前記委譲クラスの変数にアクセス
する文を抽出する第4の文抽出手段と、 前記プログラム構造情報記憶手段を参照して、前記第
3、第4の文抽出手段の少なくとも一方が抽出した文が
実行されるまでの経路を算出する第2の経路算出手段
と、 前記第2の経路算出手段が算出した経路に基づいて、前
記被委譲クラスが前記委譲クラスを参照するための第2
の参照変数と、前記委譲クラスのインスタンスを前記第
2の参照変数に代入する文とを入力させる第2の入力手
段と、 前記第2の入力手段によって入力された第2の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
前記委譲クラスのメソッドの呼び出し主体を変更する第
3のプログラム構造情報変換手段と、 前記第2の入力手段によって入力された第2の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
前記委譲クラスの変数へのアクセス主体を変更する第4
のプログラム構造情報変換手段と、を備えることを特徴
とするオブジェクト指向プログラム設計支援装置。 - 【請求項9】前記第2の入力手段は、前記第2の経路算
出手段が算出した経路が識別可能となるように前記プロ
グラム構造情報記憶手段に記憶されたプログラム構造情
報を表示させる手段と、該表示されたプログラム構造情
報から前記委譲クラスのインスタンスを前記第2の参照
変数に代入する文を入力させる手段とを備えることを特
徴とする請求項8に記載のオブジェクト指向プログラム
設計支援装置。 - 【請求項10】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を前記被委譲ク
ラスのプログラム構造情報として含むものを記憶するプ
ログラム構造情報記憶手段と、 前記プログラム構造情報記憶手段に記憶されている前記
委譲クラスに含まれる文のうちの前記移動メソッドを呼
び出す文を抽出する第1の文抽出手段と、 前記プログラム構造情報記憶手段に記憶されている前記
委譲クラスに含まれる文のうちの前記移動変数にアクセ
スする文を抽出する第2の文抽出手段と、 前記プログラム構造情報記憶手段を参照して、前記第
1、第2の文抽出手段の少なくとも一方が抽出した文が
実行されるまでの経路を算出する第1の経路算出手段
と、 前記プログラム構造情報記憶手段に記憶されている前記
移動メソッドのうちの前記委譲クラスのメソッドを呼び
出す文を抽出す第3の文抽出手段と、 前記プログラム構造情報記憶手段に記憶されている前記
移動メソッドのうちの前記委譲クラスの変数にアクセス
する文を抽出する第4の文抽出手段と、 前記プログラム構造情報記憶手段を参照して、前記第
3、第4の文抽出手段の少なくとも一方が抽出した文が
実行されるまでの経路を算出する第2の経路算出手段
と、 前記第1の経路算出手段が算出した経路に基づいて、前
記委譲クラスが前記被委譲クラスを参照するための第1
の参照変数と、前記被委譲クラスのインスタンスを生成
するための文と、前記インスタンスを前記第1の参照変
数に代入する文とを入力させる第1の入力手段と、 前記第2の経路算出手段が算出した経路に基づいて、前
記被委譲クラスが前記委譲クラスを参照するための第2
の参照変数と、前記委譲クラスのインスタンスを前記第
2の参照変数に代入する文とを入力させる第2の入力手
段と、 前記第1の入力手段によって入力された第1の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
移動メソッドの呼び出し主体を変更する第1のプログラ
ム構造情報変換手段と、 前記第1の入力手段によって入力された第1の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
移動変数へのアクセス主体を変更する第2のプログラム
構造情報変換手段と、 前記第2の入力手段によって入力された第2の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
前記委譲クラスのメソッドの呼び出し主体を変更する第
3のプログラム構造情報変換手段と、 前記第2の入力手段によって入力された第2の参照変数
に、前記プログラム構造情報記憶手段に記憶されている
前記委譲クラスの変数へのアクセス主体を変更する第4
のプログラム構造情報変換手段と、を備えることを特徴
とするオブジェクト指向プログラム設計支援装置。 - 【請求項11】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報に従っ
て、オブジェクト指向プログラムの設計を支援するオブ
ジェクト指向プログラム設計支援方法であって、 前記委譲クラスが有するメソッドのうちで前記被委譲ク
ラスに移動すべき移動メソッドを選択させる移動メソッ
ド選択ステップと、 前記プログラム構造情報を参照して、前記委譲クラスが
有するメソッドのうちの前記メソッド選択ステップで選
択された移動メソッドのみから呼び出されるメソッドを
さらに移動メソッドとして追加するメソッド追加ステッ
プと、 前記メソッド選択ステップで選択或いは前記メソッド追
加ステップで追加された移動メソッドに関する情報を、
前記プログラム構造情報のうちの被委譲クラスのプログ
ラム構造情報に追加するプログラム構造情報変換ステッ
プと、を含むことを特徴とするオブジェクト指向プログ
ラム設計支援方法。 - 【請求項12】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッドに関する情報を含むものに従って、オブジ
ェクト指向プログラムの設計を支援するオブジェクト指
向プログラム設計支援方法であって、 前記委譲クラスが有する変数のうちで前記被委譲クラス
に移動すべき移動変数を選択させる変数選択ステップ
と、 前記プログラム構造情報を参照して、前記委譲クラスの
変数のうち前記移動メソッドのみからアクセスされる変
数を移動変数として追加する変数追加ステップと、 前記変数選択ステップで選択或いは前記変数追加ステッ
プで追加された移動変数に関する情報を、前記プログラ
ム構造情報のうちの被委譲クラスのプログラム構造情報
に追加するプログラム構造情報変換ステップと、を含む
ことを特徴とするオブジェクト指向プログラム設計支援
方法。 - 【請求項13】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するオ
ブジェクト指向プログラム設計支援方法であって、 前記プログラム構造情報を参照して、前記委譲クラスに
含まれる文のうちの前記移動メソッドを呼び出す文を抽
出する第1の文抽出ステップと、 前記プログラム構造情報を参照して、前記委譲クラスに
含まれる文のうちの前記移動変数にアクセスする文を抽
出する第2の文抽出ステップと、 前記プログラム構造情報を参照して、前記第1、第2の
文抽出ステップの少なくとも一方で抽出した文が実行さ
れるまでの経路を算出する第1の経路算出ステップと、 前記第1の経路算出ステップで算出した経路に基づい
て、前記委譲クラスが前記被委譲クラスを参照するため
の第1の参照変数と、前記被委譲クラスのインスタンス
を生成するための文と、前記インスタンスを前記第1の
参照変数に代入する文とを入力させる第1の入力ステッ
プと、 前記第1の入力ステップで入力された第1の参照変数
に、前記プログラム構造情報に含まれる移動メソッドの
呼び出し主体を変更する第1のプログラム構造情報変換
ステップと、 前記第1の入力ステップで入力された第1の参照変数
に、前記プログラム構造情報に含まれる移動変数へのア
クセス主体を変更する第2のプログラム構造情報変換ス
テップと、を含むことを特徴とするオブジェクト指向プ
ログラム設計支援方法。 - 【請求項14】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するオ
ブジェクト指向プログラム設計支援方法であって、 前記プログラム構造情報を参照して、前記移動メソッド
のうちの前記委譲クラスのメソッドを呼び出す文を抽出
す第3の文抽出ステップと、 前記プログラム構造を参照して、前記移動メソッドのう
ちの前記委譲クラスの変数にアクセスする文を抽出する
第4の文抽出ステップと、 前記プログラム構造情報を参照して、前記第3、第4の
文抽出ステップの少なくとも一方で抽出した文が実行さ
れるまでの経路を算出する第2の経路算出ステップと、 前記第2の経路算出ステップ算出した経路に基づいて、
前記被委譲クラスが前記委譲クラスを参照するための第
2の参照変数と、前記委譲クラスのインスタンスを前記
第2の参照変数に代入する文とを入力させる第2の入力
ステップと、 前記第2の入力ステップで入力された第2の参照変数
に、前記プログラム構造情報に含まれる前記委譲クラス
のメソッドの呼び出し主体を変更する第3のプログラム
構造情報変換ステップと、 前記第2の入力ステップで入力された第2の参照変数
に、前記プログラム構造情報記憶に含まれる前記委譲ク
ラスの変数へのアクセス主体を変更する第4のプログラ
ム構造情報変換ステップと、を含むことを特徴とするオ
ブジェクト指向プログラム設計支援方法。 - 【請求項15】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報に従っ
て、オブジェクト指向プログラムの設計を支援するプロ
グラムを記憶するコンピュータ読み取り可能な記録媒体
であって、 前記委譲クラスが有するメソッドのうちで前記被委譲ク
ラスに移動すべき移動メソッドを選択させる移動メソッ
ド選択ステップと、 前記プログラム構造情報を参照して、前記委譲クラスが
有するメソッドのうちの前記メソッド選択ステップで選
択された移動メソッドのみから呼び出されるメソッドを
さらに移動メソッドとして追加するメソッド追加ステッ
プと、 前記メソッド選択ステップで選択或いは前記メソッド追
加ステップで追加された移動メソッドに関する情報を、
前記プログラム構造情報のうちの被委譲クラスのプログ
ラム構造情報に追加するプログラム構造情報変換ステッ
プと、を実行するプログラムを記憶することを特徴とす
るコンピュータ読み取り可能な記録媒体。 - 【請求項16】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッドに関する情報を含むものに従って、オブジ
ェクト指向プログラムの設計を支援するプログラムを記
憶するコンピュータ読み取り可能な記録媒体であって、 前記委譲クラスが有する変数のうちで前記被委譲クラス
に移動すべき移動変数を選択させる変数選択ステップ
と、 前記プログラム構造情報を参照して、前記委譲クラスの
変数のうち前記移動メソッドのみからアクセスされる変
数を移動変数として追加する変数追加ステップと、 前記変数選択ステップで選択或いは前記変数追加ステッ
プで追加された移動変数に関する情報を、前記プログラ
ム構造情報のうちの被委譲クラスのプログラム構造情報
に追加するプログラム構造情報変換ステップと、を実行
するプログラムを記憶することを特徴とするコンピュー
タ読み取り可能な記録媒体。 - 【請求項17】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するプ
ログラムを記憶するコンピュータ読み取り可能な記録媒
体であって、 前記プログラム構造情報を参照して、前記委譲クラスに
含まれる文のうちの前記移動メソッドを呼び出す文を抽
出する第1の文抽出ステップと、 前記プログラム構造情報を参照して、前記委譲クラスに
含まれる文のうちの前記移動変数にアクセスする文を抽
出する第2の文抽出ステップと、 前記プログラム構造情報を参照して、前記第1、第2の
文抽出ステップの少なくとも一方で抽出した文が実行さ
れるまでの経路を算出する第1の経路算出ステップと、 前記第1の経路算出ステップで算出した経路に基づい
て、前記委譲クラスが前記被委譲クラスを参照するため
の第1の参照変数と、前記被委譲クラスのインスタンス
を生成するための文と、前記インスタンスを前記第1の
参照変数に代入する文とを入力させる第1の入力ステッ
プと、 前記第1の入力ステップで入力された第1の参照変数
に、前記プログラム構造情報に含まれる移動メソッドの
呼び出し主体を変更する第1のプログラム構造情報変換
ステップと、 前記第1の入力ステップで入力された第1の参照変数
に、前記プログラム構造情報に含まれる移動変数へのア
クセス主体を変更する第2のプログラム構造情報変換ス
テップと、を実行するプログラムを記憶することを特徴
とするコンピュータ読み取り可能な記録媒体。 - 【請求項18】処理の一部を他のクラスに委譲する委譲
クラスと該処理を委譲される被委譲クラスとを含むオブ
ジェクト指向プログラムのプログラム構造情報であっ
て、前記委譲クラスから前記被委譲クラスに移動される
移動メソッド及び移動変数に関する情報を含むものに従
って、オブジェクト指向プログラムの設計を支援するプ
ログラムを記憶するコンピュータ読み取り可能な記録媒
体であって、 前記プログラム構造情報を参照して、前記移動メソッド
のうちの前記委譲クラスのメソッドを呼び出す文を抽出
す第3の文抽出ステップと、 前記プログラム構造を参照して、前記移動メソッドのう
ちの前記委譲クラスの変数にアクセスする文を抽出する
第4の文抽出ステップと、 前記プログラム構造情報を参照して、前記第3、第4の
文抽出ステップの少なくとも一方で抽出した文が実行さ
れるまでの経路を算出する第2の経路算出ステップと、 前記第2の経路算出ステップ算出した経路に基づいて、
前記被委譲クラスが前記委譲クラスを参照するための第
2の参照変数と、前記委譲クラスのインスタンスを前記
第2の参照変数に代入する文とを入力させる第2の入力
ステップと、 前記第2の入力ステップで入力された第2の参照変数
に、前記プログラム構造情報に含まれる前記委譲クラス
のメソッドの呼び出し主体を変更する第3のプログラム
構造情報変換ステップと、 前記第2の入力ステップで入力された第2の参照変数
に、前記プログラム構造情報に含まれる前記委譲クラス
の変数へのアクセス主体を変更する第4のプログラム構
造情報変換ステップと、を実行するプログラムを記憶す
ることを特徴とするコンピュータ読み取り可能な記録媒
体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03769698A JP3166699B2 (ja) | 1998-02-19 | 1998-02-19 | オブジェクト指向プログラム設計支援装置、方法および記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03769698A JP3166699B2 (ja) | 1998-02-19 | 1998-02-19 | オブジェクト指向プログラム設計支援装置、方法および記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11237984A true JPH11237984A (ja) | 1999-08-31 |
JP3166699B2 JP3166699B2 (ja) | 2001-05-14 |
Family
ID=12504722
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03769698A Expired - Fee Related JP3166699B2 (ja) | 1998-02-19 | 1998-02-19 | オブジェクト指向プログラム設計支援装置、方法および記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3166699B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7363613B2 (en) | 2003-06-23 | 2008-04-22 | International Business Machines Corporation | Program maintenance support device, program maintenance supporting method, and program for the same |
US7712079B2 (en) | 2002-12-27 | 2010-05-04 | International Business Machines Corporation | Program editing apparatus, program editing method, and program for splitting a program file |
JP7126637B1 (ja) * | 2022-01-14 | 2022-08-26 | 三菱電機株式会社 | プログラミング支援プログラム、プログラミング支援方法及びプログラミング支援装置 |
-
1998
- 1998-02-19 JP JP03769698A patent/JP3166699B2/ja not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7712079B2 (en) | 2002-12-27 | 2010-05-04 | International Business Machines Corporation | Program editing apparatus, program editing method, and program for splitting a program file |
US7363613B2 (en) | 2003-06-23 | 2008-04-22 | International Business Machines Corporation | Program maintenance support device, program maintenance supporting method, and program for the same |
US8006229B2 (en) | 2003-06-23 | 2011-08-23 | International Business Machines Corporation | Program maintenance support device and program for the same |
US8185878B2 (en) | 2003-06-23 | 2012-05-22 | International Business Machines Corporation | Program maintenance support device, program maintenance supporting method, and program for the same |
JP7126637B1 (ja) * | 2022-01-14 | 2022-08-26 | 三菱電機株式会社 | プログラミング支援プログラム、プログラミング支援方法及びプログラミング支援装置 |
WO2023135735A1 (ja) * | 2022-01-14 | 2023-07-20 | 三菱電機株式会社 | プログラミング支援プログラム、プログラミング支援方法及びプログラミング支援装置 |
Also Published As
Publication number | Publication date |
---|---|
JP3166699B2 (ja) | 2001-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5933139A (en) | Method and apparatus for creating help functions | |
US8006229B2 (en) | Program maintenance support device and program for the same | |
JP4448881B2 (ja) | コンピュータプログラムを発生する方法及びシステム | |
US5812851A (en) | Compiler with generic front end and dynamically loadable back ends | |
Nayak et al. | Automatic Test Data Synthesis using UML Sequence Diagrams. | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
JP2788850B2 (ja) | 最適メニュー問い合わせ方式及び階層的メニュー問い合わせによる構造データの編集方式 | |
US5386558A (en) | Method and apparatus for executing control system functions in a computer system | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
US8701086B2 (en) | Simplifying analysis of software code used in software systems | |
US7831964B2 (en) | Program automatic converting method and program automatic converting device | |
JP3418544B2 (ja) | プログラムのテストデータ自動生成装置 | |
JP3166699B2 (ja) | オブジェクト指向プログラム設計支援装置、方法および記録媒体 | |
JPH07182179A (ja) | オブジェクト指向データベース管理装置 | |
EP0202007A2 (en) | A generator of program generators | |
JP2000039998A (ja) | オブジェクト指向ソフトウェア部品変更支援方法及び装置及びオブジェクト指向ソフトウェア部品変更支援プログラムを格納した記憶媒体 | |
JPH06290039A (ja) | プログラム変更方法 | |
JP2000181691A (ja) | プログラム構造解析方式 | |
KR19990032183A (ko) | 웹 데이터베이스를 위한 하이퍼텍스트의 시각적 설계 방법 | |
CN105224293A (zh) | 目标对象的生成方法及服务器 | |
JPH07281879A (ja) | アプリケーションプログラム編集装置 | |
CN114757163A (zh) | 基于资源的pe文件相似性比对方法 | |
JP2021002276A (ja) | 分析プログラム、プログラム分析方法およびプログラム分析装置 | |
JPH11149368A (ja) | 図式編集プログラム開発方法および方式 | |
JPH07105014A (ja) | 言語処理システムのシンボル処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20010206 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080309 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090309 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090309 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100309 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100309 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110309 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110309 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120309 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120309 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130309 Year of fee payment: 12 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130309 Year of fee payment: 12 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140309 Year of fee payment: 13 |
|
LAPS | Cancellation because of no payment of annual fees |