JP2001282537A - 抽象クラスの自動生成方法および装置 - Google Patents

抽象クラスの自動生成方法および装置

Info

Publication number
JP2001282537A
JP2001282537A JP2000094923A JP2000094923A JP2001282537A JP 2001282537 A JP2001282537 A JP 2001282537A JP 2000094923 A JP2000094923 A JP 2000094923A JP 2000094923 A JP2000094923 A JP 2000094923A JP 2001282537 A JP2001282537 A JP 2001282537A
Authority
JP
Japan
Prior art keywords
class
classes
interface
abstract
customer
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
JP2000094923A
Other languages
English (en)
Inventor
Norikazu Kijima
教和 木島
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.)
Hitachi Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co 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 Hitachi Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP2000094923A priority Critical patent/JP2001282537A/ja
Publication of JP2001282537A publication Critical patent/JP2001282537A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 クラスの再利用性、可読性(分かり易さ、理
解のし易さ)を高めることが可能なクラス間の関連に基
づいた抽象クラスの自動生成方法および装置を提供する
こと。 【解決手段】 任意の業務システムを構成するクラス群
の中の各クラスのメソッド内で呼ばれる他クラスのメソ
ッドを取得するステップと、複数の他クラスに対する自
クラスのインタフェースクラスを生成するステップと、
複数の他クラスに対する自クラスのそれぞれのインタフ
ェースクラスを継承した1つのインタフェースクラスを
生成するステップとを含む。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
技術を用いたソフトウェア開発においてクラス間の関連
に基づいた抽象クラスを自動生成する方法および装置に
に関するものである。
【0002】
【従来の技術】オブジェクト指向のソフトウェア開発に
おいて、抽象クラスを作成する場合、主に2つの役割に
基づいて作成する。ここで、抽象クラスとは、直接のイ
ンスタンスを持たないクラスのことである。1つ目は同
一業務の別システムを作成していくにつれ、同じような
役割のクラスの同じメソッドや属性を見つけ出すことに
よって共通の属性、メソッドを抽象クラスにすること。
2つ目はクラス間の関連からインタフェースクラス(純
粋仮想関数しか持たない抽象クラス)を作成し、クラス
間の役割を明確にすること。
【0003】上記の1つ目の抽象化を行う技術は、例え
ば特開平8−166873号公報に記載の技術が知られ
ている。上記の2つ目におけるクラス間の関連をインタ
フェースクラス化するものは未だないが、クラス間の関
連を理解し易くするものとして、特開平9−34706
号公報に記載の技術や特開平10−301767号公報
に記載の技術が知られている。
【0004】特開平8−166873号公報に記載の技
術は、例えば、オブジェクト指向により開発されたシス
テムのクラス群を解析し、クラスの属性やメソッドの型
や引数の情報を他のクラスと比較することによって、再
利用可能な最適な抽象クラスを抽出するものである。
【0005】特開平9−34706号公報に記載の技術
は例えば、クラス図においてクラス間の関連を基底クラ
スのもののみ表示する機能と、全ての関連を表示する機
能を有したものである。
【0006】特開平10−301767号公報に記載の
技術は、例えばオブジェクト指向により開発されたシス
テムのクラス群を解析し、クラス間の関連を抽出するこ
とによって、関数本体を呼び出したソースを表示する機
能と、関数本体が呼び出す関数を順にツリー表示する機
能を有したものである。
【0007】
【発明が解決しようとする課題】ところで、オブジェク
ト指向技術によるソフトウェア開発において、インタフ
ェースクラスを抽出すると、以下の利点がある。 (1)インタフェースクラスを作成することにより、各
クラスの役割が明確になり、インタフェースクラスの関
連のみで1つの業務システムを表すことが出来る。この
結果、業務システムを関連のみを使用したモデルで表す
ことができる。(2)さらにこれらのインタフェースク
ラスのメソッドを実装するのに最小限の属性とメソッド
を実装したクラスは、業務で最低限必要とされるメソッ
ドを実装したクラスであり、1つの業務システムを表す
業務フレームワークとなる。
【0008】しかしながら、上記従来の技術の2つ目に
示した抽象化技術にあっては、クラス間の関連を表示す
る機能や抽出する機能を備えているが、クラス間の関連
をインタフェースクラス(純粋仮想関数しか持たない抽
象クラス)として抽象化することはできない。
【0009】本発明は、上記従来の問題点を解決し、ク
ラスの再利用性、可読性(分かり易さ、理解のし易さ)
を高めることが可能なクラス間の関連に基づいた抽象ク
ラスの自動生成方法および装置を提供することを目的と
する。
【0010】
【課題を解決するための手段】上記の目的を達成するた
めに、本発明の抽象クラスの自動生成方法は、任意の業
務システムを構成するクラス群の中の各クラスのメソッ
ド内で呼ばれる他クラスのメソッドを取得するステップ
と、複数の他クラスに対する自クラスのインタフェース
クラスを生成するステップと、複数の他クラスに対する
自クラスのそれぞれのインタフェースクラスを継承した
1つのインタフェースクラスを生成するステップとを含
むことを特徴とする。
【0011】また、前記任意の業務システムを構成する
クラス群の中の各クラスの属性、メソッド、メソッド内
で呼ばれる他クラスのメソッド、メソッド内で呼ばれる
自クラス内のメソッド、メソッド内で呼ばれる自クラス
内の属性を取得するステップと、前記1つのインタフェ
ースクラスのメソッドを実装するのに最小限の属性とメ
ソッドを持つ抽象クラスを作成するステップとを含むこ
とを特徴とする。
【0012】また、前記1つのインタフェースクラスの
クラス図を生成するステップを含むことを特徴とする。
また、前記1つの抽象クラスのクラス図を生成するステ
ップを含むことを特徴とする。また、前記1つのインタ
フェースクラスのソースコードを生成するステップを含
むことを特徴とする。また、前記1つの抽象クラスのソ
ースコードを生成するステップを含むことを特徴とす
る。
【0013】さらに、本発明の抽象クラス自動生成装置
は、任意の業務システムを構成するクラス群の中の各ク
ラスのメソッド内で呼ばれる他クラスのメソッドを取得
する手段と、複数の他クラスに対する自クラスのインタ
フェースクラスを生成する手段と、複数の他クラスに対
する自クラスのそれぞれのインタフェースクラスを継承
した1つのインタフェースクラスを生成する手段とを備
えることを特徴とする。
【0014】また、前記任意の業務システムを構成する
クラス群の中の各クラスの属性、メソッド、メソッド内
で呼ばれる他クラスのメソッド、メソッド内で呼ばれる
自クラス内のメソッド、メソッド内で呼ばれる自クラス
内の属性を取得する手段と、前記1つのインタフェース
クラスのメソッドを実装するのに最小限の属性とメソッ
ドを持つ抽象クラスを作成する手段とを備えることを特
徴とする。
【0015】
【発明の実施の形態】以下、図面を参照しながら本発明
の実施例を説明する。
【0016】図1は、本発明によるクラス間の関連に基
づいた抽象クラス自動生成システムの一実施形態を示す
システム構成図である。
【0017】ここで示す抽象クラス自動生成システム
は、プログラムのソースコード111からクラス情報
(クラスの属性、メソッド、メソッド内で呼ばれる他ク
ラスのメソッド、メソッド内で呼ばれる自クラス内のメ
ソッド、メソッド内で呼ばれる自クラス内の属性)を抽
出するソースコード解析装置112と、クラス図121
からクラス情報(クラスの属性、メソッド、メソッド内
で呼ばれる他クラスのメソッド、メソッド内で呼ばれる
自クラス内のメソッド、メソッド内で呼ばれる自クラス
内の属性)を抽出するクラス図解析装置122とを備え
ている。
【0018】さらに、これらの解析装置112および1
22の解析結果の情報からクラス情報を抽出するクラス
情報抽出装置191と、抽出されたクラス情報に基づ
き、任意の業務システムを構成するクラス群のクラス間
関連に基づいた抽象クラス化を行い、この抽象クラス化
によって生成されたインタフェースクラス、抽象クラ
ス、具象クラスから成るソースコード113、同じくイ
ンタフェースクラス、抽象クラス、具象クラスからなる
クラス図123を生成する抽象クラス自動生成装置19
2から構成される。
【0019】以下、図2〜図12を参照しながら任意の
業務システムを構成するクラス群のインタフェースクラ
ス化と抽象クラス化について説明する。以下では、業務
システムの具体例として保険契約システムで使用される
「顧客クラス」と言うクラスの抽象化を行う場合を例に
挙げて説明する。
【0020】図2は、保険契約システムで使用される
「顧客クラス」の具体例を示すクラス図である。この例
のクラス図は、顧客クラス220を集約している会社ク
ラス210と、顧客クラス220と関連を持つ保険料ク
ラス230で構成されている。会社クラス210のメソ
ッド内では顧客クラス220のメソッドであるgetI
D()、getName()、getCode()のみが呼ばれる。保険料ク
ラス230のメソッド内では顧客クラスのメソッドであ
るgetID()、getRestLife()のみが呼ばれる。
【0021】顧客クラス220は、属性であるid、nam
e、birthday、sexとメソッドであるgetID()、getNam
e()、getAge()、getSex()、dump()、getCode()、getRes
tLife()を持っている。なお、クラスの表記にはUML
表記法を使用し、属性およびメソッドの前の符号は属性
およびメソッドの修飾子を表しており、それぞれの修飾
子は、「+」が「public」、「#」が「protected」、
「−」が「private」を表すものである。
【0022】図3は、顧客クラス220の抽象化の全過
程を示すフローチャートである。ここで示す抽象化プロ
セスでは、まず、図5のようなクラス図を取得し(ステ
ップ301)、顧客クラス220の第1段階の抽象クラ
ス化を行い、第1段階の抽象クラス化の結果のクラス図
を作成する(ステップ302)。この後、第1段階の抽
象クラス化の結果のクラス図から顧客クラス220の第
2段階の抽象クラス化を行い、第2段階の抽象クラス化
の結果のクラス図を作成する(ステップ303,30
4)。次に、第2段階の抽象クラス化の結果のクラス図
から顧客クラス220の第3段階の抽象クラス化を行
い、第3段階の抽象クラス化の結果のクラス図を作成す
る(ステップ305,306,307)。
【0023】第2段階目の抽象クラス化により、顧客ク
ラス220のインタフェースクラスが生成される。第3
段階目の抽象クラス化により、顧客クラス220の抽象
クラスが生成される。この第3段階目の抽象クラス化処
理では、抽象クラスで定義される属性かの判断処理(ス
テップ308)が行われ、さらにその結果によって抽象
クラスで実装されるメソッドかの判断処理(ステップ3
09)が行われる。
【0024】第1段階目の抽象クラス化の処理手順を図
4に示し、第2段階目の抽象クラス化の処理手順を図6
に示し、第3段階目の抽象クラス化の処理手順を図8に
示す。そして、第1段階目の抽象クラス化によって生成
されたクラス図を図5に示し、第2段階目の抽象クラス
化によって生成されたクラス図を図7に示し、第3段階
目の抽象クラス化によって生成されたクラス図を図9に
示している。また、ステップ308の処理の詳細を図1
0に、ステップ309の処理の詳細を図11にそれぞれ
示す。
【0025】最初に、図4及び図5を参照して第1段階
目の抽象クラス化の詳細について説明する。
【0026】第1段階目の抽象クラス化では、クラスの
役割を明確にするため、各クラス間でそれぞれ使用され
ているメソッドを調べ、インタフェースクラスを生成す
る。すなわち、各クラス間でそれぞれ使用されているメ
ソッドに基づいてクラスをインタフェースクラス化す
る。ただし、クラスライブラリのようにあらかじめ作成
されているクラスに対しては行わない。例えば、図5が
図2の顧客クラス220の抽象化を進めた場合の結果を
示すクラス図である。図5のクラス図に対して順に図4
の処理を適用していったといても、顧客クラス220
(図4ではクラスX)が関連を持っているクラスは未だ
存在するので、ステップ400の処理はtrueとなる。顧
客クラス220が集約されている会社クラス210(図
4ではクラスY)で使用しているメソッドがあるか否か
を調べ(ステップ401)、ある場合には、さらに顧客
クラス220のどのメソッドが使用されているかを読み
込む(ステップ402)。図2の例の会社クラス210の
メソッド内では、顧客クラス220のメソッドであるge
tID()、getName()、getCode()のみを呼んでいる。この
ように会社クラス210は、顧客クラス220のすべて
のメソッドを呼んではおらず、特定のメソッドだけを使
用している。そこで、会社クラス210で使用している
顧客クラス220のメソッドgetID()、getName()、getC
ode()のみを定義している顧客クラス220の会社クラ
ス210へのインタフェースクラス512(図4ではク
ラスZ)を生成する(ステップ403)。
【0027】顧客クラス220は、当該顧客クラス22
0の会社クラス210へのインターフェース512を継
承する(ステップ404)。会社クラス210は顧客クラ
ス220の会社クラス210へのインターフェース51
2を集約する(ステップ405)。すなわち、ステップ4
05では、顧客クラス220の会社クラス210への集
約関係、関連をそれぞれインタフェースクラス512へ
の集約関係および関連に変更する。
【0028】この後、ステップ400に戻って、顧客ク
ラス22が関係を持っているクラスがあるか否を判断す
る。図2の例のクラス図では、顧客クラス220は保険
料クラス230とも関係を持っている。このため、ステ
ップ400の判断結果はtrueとなり、ステップ401以
降の処理に進む。
【0029】このステップ401以降の処理において
は、顧客クラス220の保険料クラスへ230のインタ
フェースクラス522も同様にして作成される。すなわ
ち、顧客クラス220が関連を持っている保険料クラス
230で顧客クラス220のどのメソッドが使用されて
いるかを読み込む(ステップ402)。保険料クラス23
0のメソッド内では顧客クラス220のメソッドgetI
D()、getRestLife()のみが呼ばれている。そこで、getI
D()、getRestLife()のみを定義した顧客クラス220の
保険料クラス230へのインタフェースクラス522を
生成する(ステップ403)。
【0030】これにより、顧客クラス220は顧客クラ
ス220の保険料クラス230へのインタフェースクラ
ス522を継承する(ステップ404)。保険料クラス2
30は顧客クラス220の保険料クラス230へのイン
タフェースクラス522へ関連を持つものとなる(ステ
ップ405)。すなわち、ステップ405では、顧客ク
ラス220の保険料クラス230への集約関係、関連を
それぞれインタフェースクラス522への集約関係およ
び関連に変更する。
【0031】図2の例では、顧客クラス220が関連を
持っているクラスはもう存在しないのでステップ200
の判断結果はfalseとなる。そこで、全てのクラスに着
目したか否かを調べる(ステップ406)。しかし、図
2の例では、未だ全てのクラスに着目していないので、
ステップ406の処理はfalseとなる。そこで、再度ス
テップ400に戻って同様の処理を行う。
【0032】図2の例では、会社クラス210に注目
し、これに関係を持っている他のクラスを調べていない
ので、会社クラス210を新たな注目クラスとしてその
関連を調べる。しかし、図2の例では、会社クラス21
0が関連を持っているクラスはないので、ステップ40
0の判断結果はfalseとなる。そこで、再び全てのクラ
スに着目したか否かを調べる(ステップ406)。しか
し、図2の例では、未だ全てのクラスに着目していない
ので、ステップ406の処理はfalseとなる。そこで、
再度ステップ400に戻って同様の処理を行う。
【0033】図2の例では、保険クラス230に注目
し、これに関係を持っている他のクラスを調べていない
ので、保険クラス230を新たな注目クラスとしてその
関連を調べる。しかし、図2の例では、保険クラス23
0が関連を持っているクラスはないので、ステップ40
0の判断結果はfalseとなる。そこで、再び全てのクラ
スに着目したか否かを調べる(ステップ406)。今度
は、全てのクラスに着目し終えたので、ステップ406
の処理はtrueとなる。
【0034】この結果、図5に示すように、顧客クラス
220の会社クラス210へのインタフェースクラス5
12と、顧客クラス22の保険料クラス230へのイン
タフェースクラス522という2つのインタフェースク
ラスが生成される。
【0035】次に、上記のようにして生成された1つの
クラスが継承している複数のインタフェースクラス(図
5の512と522)を1つにまとめる処理を第2段階
目の抽象クラス化処理で行う。
【0036】図7において、まず、1つのクラスが継承
している複数のインタフェースクラスを1つのインタフ
ェースクラスに継承し、その1つのインタフェースクラ
スを継承したクラスを生成する。ただし、図4の処理に
よって生成されたインタフェースクラス以外は除く。
【0037】具体的には、まず、システム内で1つのク
ラスX、図2の例では顧客クラス220に着目する(ス
テップ601)。顧客クラス220が継承している顧客
クラス220の会社クラス210へのインタフェースク
ラス512と顧客クラス220の保険料クラス230へ
のインタフェースクラス522を全て継承した1つのイ
ンタフェースクラスPを作成する(ステップ602)。
このインタフェースクラスPは実装をもたず、メソッド
の定義のみ行うので、多重継承によるメソッドの重複が
おきても問題が無い。
【0038】図5の例では、顧客クラス220の会社ク
ラス210へのインタフェースクラス512にはメソッ
ドgetID()、getName()、getCode()が定義されている。
また、顧客クラス220の保険料クラス230へのイン
タフェースクラス522にはメソッドgetID()、getRest
Life()が定義されている。顧客クラス220の会社クラ
ス210へのインタフェースクラス512と顧客クラス
220の保険料クラス230へのインタフェースクラス
522ではメソッドgetID()が重複しているため、顧客
クラス220のインタフェースクラス722にはgetI
D()、getName()、getCode()、getRestLife()の4つのメ
ソッドが定義されることになる。
【0039】これにより、顧客クラス220はインタフ
ェースクラス722を継承する(ステップ603)。すな
わち、顧客クラス22は、インタフェースクラス51
2,522からの継承を止め、インタフェースクラス7
22を継承する。そこで、次に全てのクラスに着目した
か否かを調べる(ステップ604)。しかし、図5の例
のクラス図では未だ全てのクラスに着目していないの
で、その判断結果ははfalseとなる。そこで、ステップ
601に戻り、今度は注目クラスを他のクラス、例えば
会社クラス210に設定し、同様の処理を行う。
【0040】この段階では、会社クラスの210のイン
タフェースクラスは生成されていないので、ステッ60
2,603の処理は行わない。この後、全てのクラスに
着目したか否かを調べる(ステップ604)。しかし、
図5の例のクラス図では未だ全てのクラスに着目してい
ないので、その判断結果はfalseとなる。そこで、ステ
ップ601に戻り、今度は注目クラスを他のクラス、保
険料クラス230に設定し、同様の処理を行う。しか
し、保険料クラス230のインタフェースクラスは生成
されていないので、ステップ602、ステップ603の
処理を行わない。次に、全てのクラスに着目したか否か
を再度調べる(ステップ604)。今度は全てのクラス
に着目し終わっているのでtrueとなる。
【0041】ここまでの説明では、顧客クラス220に
おいてのみ抽象クラス化を行った場合について説明し
た。このようにして1つの業務システムにおいて、1つ
のクラスのインタフェースクラスが1つずつ作成され
る。
【0042】次に、インタフェースクラスの抽象クラス
化を行う。その抽象クラス化は上記のようにして作成さ
れた1つのクラスにおける1つのインタフェースクラス
で定義されているメソッドを実装するのに最小限の属性
とメソッドを実装するように図8、図10、図11の処
理に従って、設計、実装される。さらに生成された抽象
クラスを継承した具象クラスには元のクラスの操作が全
て実装される。
【0043】図9は、図8の第3段階目の抽象クラス化
処理に従って図7の顧客クラス220の抽象化を進めた
場合の結果を示すクラス図である。図7のクラス図に対
して順に図8の処理を適用する。
【0044】まず、1つのクラスX、例えば顧客クラス
220に着目する(ステップ801)。顧客クラス220
のインタフェースクラス722で定義されているメソッ
ドを実装するのに最小限の属性とメソッドを持つ顧客ク
ラス220の抽象クラス822(図8では抽象クラス
Q)を作成する(ステップ802)。
【0045】次に、顧客クラス220の全ての操作を行
うことができる抽象クラス822を継承した顧客クラス
220の具象クラス821(図8では具象クラスR)を
作成する(ステップ803)。なお、抽象クラスの生成、
具象クラスの生成については後述する。
【0046】次に、顧客クラス220の抽象クラス82
2を継承した顧客クラス220の具象クラス821を作
成する(ステップ804)。
【0047】次に、全てのクラスに着目したか否かを調
べる(ステップ805)。しかし、図7のクラス図の例
では、未だ全てのクラスに着目し終わっていないので、
falseとなる。そこで、ステップ801に戻り、今度は
注目クラスを他のクラス、会社クラス210に設定し、
同様の処理を行う。しかし、会社クラス210のインタ
フェースクラスは生成されていないので、ステップ80
2〜804の処理を行わない。そこで、再度ステップ8
01に戻り、今度は注目クラスを他のクラス、保険料ク
ラス230に設定し、同様の処理を行う。しかし、保険
料クラス230のインタフェースクラスは生成されてい
ないので、ステップ802〜804の処理を行わない。
次に、全てのクラスに着目したか否かを再度調べる(ス
テップ805)。今度は全てのクラスに着目し終わって
いるのでtrueとなる。
【0048】ここで、顧客クラス220の抽象化を行う
ために必要な情報を以下に示す。
【0049】顧客クラス220から抽出、解析された情
報である図1のクラス解析情報191とインタフェース
クラス722の情報を図12に示している。顧客クラス
220に定義されている属性、メソッドは顧客クラス2
20から得ることが出来る。顧客クラス220に書かれ
ていないクラス解析情報は図12に記載されている。属
性はid、name、birthday、sexであり、メソッドはgetID
()、getName()、getAge()、getSex()、dump()、getCode
()、getRestLife()である。1つのメソッド当り、次の
3つの情報を持ち、図12にそれらの情報を示してい
る。
【0050】図12のテーブル1200では左から1列
目にはメソッド名1210を、左から2列目にはメソッ
ド内で呼ぶ自クラスの属性1211を、左から3列目に
はメソッド内で呼ぶ自クラスのメソッド1212を、左
から4列目には他クラスから呼ばれるメソッドか121
3を表にして示してある。
【0051】このテーブル1200のメソッドgetID()
1210の場合、メソッド内で呼ぶ自クラスの属性12
11がid 1214、メソッド内で呼ぶ自クラス内のメ
ソッド1212が「なし」1215と、インタフェース
クラスのメソッドかを判断できる「他クラスから呼ばれ
るメソッドか」1213が「○」1216である。
【0052】1216で示した「○」はインタフェース
クラス722で定義されているメソッドであることを示
す。「×」の場合はインタフェースクラス722で定義
されていないことを示す。以下、顧客クラス220の全
てのメソッドについてメソッドの情報が同様にテーブル
1210に記載されている。
【0053】以上の情報を元にして顧客クラス220の
抽象化を図10、図11のフローを適用して進める(ス
テップ802、803に該当する)。
【0054】図10では、クラスの属性が抽象クラスで
定義される属性か、具象クラスで定義される属性かを判
断する処理が示されている。
【0055】例えば、顧客クラス220について図10
の処理を行う。まず、全ての属性に着目したか否かを判
断する(ステップ1001)。この段階では、全ての属
性に着目していないのでステップ1001の処理はfals
eとなる。1つのクラスXの1つの属性Sに着目する(ス
テップ1002)。例えば属性idに着目する。そして、
自クラスにおいてインタフェースクラスで定義されてい
ないメソッドのみで属性Sが使用されているか否かを判
断し(ステップ1003)、さらに自クラスにおいてイ
ンタフェースクラスで定義されているメソッドのみで属
性Sが使用されているか否かを判断する(ステップ10
04)。
【0056】属性id(1214)はインタフェースクラ
ス722で定義されている(1216)メソッドgetID()
1210のみで使用されており、getName()1220やg
etAge()1230等の他のメソッドでは使用されていな
い。このため、ステップ1003の処理はfalse、ステ
ップ1004の処理はtrueとなり、属性idは抽象クラス
822で定義される(ステップ1006)。
【0057】この後、ステップ1001に戻り、同様の
処理を繰り返す。この段階では、未だ全ての属性に着目
していないのでステップ1001の処理はfalseとな
る。そして、今度は属性nameに着目する(ステップ90
2)。属性name(1224,1254)はインタフェース
クラス722で定義されている(1226)メソッドgetN
ame()1220とインタフェースクラス722で定義さ
れていない(1256)メソッドdump()1250で使用さ
れている。このため、ステップ1003の処理はfals
e、ステップ1004の処理はfalseとなり、属性nameは
抽象クラス822で定義されるが、属性nameを返すprot
ected修飾子を指定したメソッドName()も抽象クラス8
22で定義される(ステップ1005)。
【0058】この後、ステップ1001に戻り、同様の
処理を繰り返す。この段階では、未だ全ての属性に着目
していないのでステップ1001の処理はfalseとな
る。そして、今度は属性birthdayに着目する(ステップ
1002)。属性birthday(1234)はインタフェース
クラス722で定義されていない(1236)メソッドge
tAge()1230でのみ使用されている。このため、ステ
ップ1003の処理はtrueとなり、具象クラス821で
定義される(ステップ1007)。
【0059】この後、ステップ1001に戻り、同様の
処理を繰り返す。この段階では、未だ全ての属性に着目
していないのでステップ1001の処理はfalseとな
る。そして、今度は属性sexに着目する(ステップ100
2)。属性sex(1214)はインタフェースクラス722
で定義されていない(1246)メソッドgetSex()124
0でのみ使用されている。このため、ステップ1003
の処理はtrueとなり、具象クラス821で定義される
(ステップ1007)。全ての属性に着目し終わったこと
により、ステップ1001の処理はtureとなる。
【0060】故に属性idおよびnameは顧客クラス220
の抽象クラス822で定義され、属性birthdayおよびse
xは顧客クラス220の具象クラス821で定義され
る。
【0061】図11は、クラスのメソッドが抽象クラス
で定義されるメソッドか、具象クラスで定義されるメソ
ッドかを判断する処理を示すものである。
【0062】例えば、顧客クラス220について図11
の処理を行う。まず、全てのメソッドに着目したか否か
を判断する(ステップ1101)。この段階では、未だ
全てのメソッドに着目していないのでステップ1101
の処理はfalseとなる。そこで、1つのクラスXの1つ
のメソッドMに着目する(ステップ1102)。例え
ば、メソッドgetID()に着目する。そして、メソッドM
は自クラスにおいてインタフェースクラスで定義されて
いないメソッドであるか否かを判断し(ステップ110
3)、さらにメソッドM内で呼ばれるメソッドが全てイ
ンタフェースクラスで定義されているメソッドであるか
否かを判断する(ステップ1104)。
【0063】メソッドgetID()1210はインタフェー
スクラス722で定義されている(1216)メソッドで
あり、メソッドgetID()内で呼ばれる自クラスのメソッ
ドは無い(1215)。このため、ステップ1103はfa
lse、ステップ1104はtrueとなり、抽象クラス82
2で実装される(ステップ1105)。
【0064】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。そして、今度は他のメソッドに着目する(ステッ
プ1102)。例えば、メソッドgetName()に着目する。
メソッドgetName()1220はインタフェースクラス7
22で定義されている(1226)メソッドであり、メソ
ッドgetName()内で呼ばれる自クラス内のメソッドは無
い(1225)。このため、ステップ1103はfalse、
ステップ1104はtrueとなり、抽象クラス822で実
装される(ステップ1105)。
【0065】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。そして、今度は他のメソッドに着目する(ステッ
プ1102)。例えば、メソッドgetAge()に着目する。
メソッドgetAge()1230はインタフェースクラス72
2で定義されていない(1236)メソッドであり、メソ
ッドgetAge()内で呼ばれる自クラス内のメソッドは無い
(1234)。さらにgetAge()内で呼ばれている属性 bir
thday1234は図10の処理により具象クラス821
で定義される属性であることが分かっている。このた
め、ステップ1103はtrueとなる。ステップ1106
では、具象クラス内で呼ばれていた属性が抽象クラスの
属性である場合、抽象クラスの属性を取得するメソッド
を呼ぶように変換する処理が行われるが、この場合には
ステップ1106の処理は行わずに具象クラス821で
実装される(ステップ1107)。
【0066】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。今度は、メソッドgetSex()に着目する(ステップ
1102)。メソッドgetSex()1240はインタフェー
スクラス722で定義されていない(1246)メソッド
であり、メソッドgetSex()内で呼ばれる自クラス内のメ
ソッドは無い(1244)。さらにgetSex()内で呼ばれて
いる属性sex1244は図10の処理により具象クラス
821で定義される属性であることが分かっている。こ
のため、ステップ1103はture、ステップ1106の
処理は行わずに具象クラス821で実装される(ステッ
プ1107)。
【0067】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。今度は、メソッドdump()に着目する(ステップ1
102)。メソッドdump()1250はインタフェースク
ラス722で定義されていない(1256)メソッドであ
り、dump()内で呼ばれている属性はname1254であ
り、属性nameは図10の処理により抽象クラス822で
定義される属性であることが分かっている。このため、
ステップ1103はtrue、ステップ1106の処理は行
うこととなり、属性nameの部分をName()に置き換えて具
象クラス821を実装する(ステップ1107)。
【0068】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。
【0069】今度はメソッドgetCode()に着目する(ステ
ップ1102)。メソッドgetCode()1260はインタフ
ェースクラス722で定義されている(1266)メソッ
ドであり、getCode()内で呼ばれている属性は無い。get
Code()メソッド内で呼ばれているメソッドgetID()、get
Name()1265はインタフェースクラス722で定義さ
れている(1216、1226)メソッドである。このた
め、ステップ1103はfasle、ステップ1104はtru
eとなり、抽象クラス821で実装される(ステップ11
05)。
【0070】この後、ステップ1101に戻り、同様の
処理を繰り返す。この段階では、未だ全てのメソッドに
着目していないのでステップ1101の処理はfalseと
なる。
【0071】今度はメソッドgetRestLife()に着目する
(ステップ1102)。メソッドgetRestLife()1270
はインタフェースクラス722で定義されている(12
76)メソッドであり、getRestLife()内で呼ばれている
属性は無い。getRestLife()メソッド内で呼ばれている
メソッドgetAge()1275はインタフェースクラス72
2で定義されていない(1236)メソッドである。この
ため、ステップ1103はfalse、ステップ1104はf
alseとなり、ステップ1106の処理は行わずに具象ク
ラス821で実装される(ステップ1107)。
【0072】以上のようにして全てのメソッドに着目し
終わったならばステップ1101の処理はtrueとなる。
【0073】故に顧客クラス220の抽象クラス822
で実装されるメソッドはgetID()、getName()、getCod
e()となり、具象クラス821で実装されるメソッドはg
etAge()、getSex()、dump()、getRestLife()となる。
【0074】以上のようにして図8の処理(ステップ8
02、ステップ803)は完了し、顧客クラス220に
おいて、顧客クラス220の抽象クラス822の属性は
id、name、メソッドはgetID()、getName()、getCode()
となる。また、顧客クラス220の具象クラス821の
属性はbirthday、sex、メソッドはgetAge()、getSe
x()、dump()、getRestLife()となる。
【0075】
【発明の効果】以上説明したように本発明によれば、ク
ラスの関連を容易に理解し、再利用可能なクラスをイン
タフェースクラス、抽象クラス、具象クラスの3通りの
方法で与えることが出来る。インタフェースクラスには
クラス間に最低限必要なメソッドが定義され、抽象クラ
スにはインターフェースのメソッドを実装するのに必要
最小限な属性とメソッドが実装される。具象クラスは元
となったクラスのすべての操作を行うことができる。
【0076】オブジェクト指向プログラムのソースコー
ドに対して本方法を適用すれば、実際に動作するインタ
フェースクラス、抽象クラス、具象クラスを与えること
が出来る。また、クラス図の設計に対して適用すれば、
インタフェースクラス、抽象クラス、具象クラスの設計
を与えることが出来、クラス毎の役割を明確にし、設計
を支援することが出来る。
【0077】また、業務システムに適用すれば、上記の
インタフェースクラス群、抽象クラス群を業務モデルの
関連を表したフレームワークとして得ることが出来る。
このように整理した形で業務システムを理解できること
は同様な別の業務システム構築の際に重要となるメソッ
ドを容易に見つけ出すことにも役立つなどの極めて有用
な効果を発揮するものとなる。
【図面の簡単な説明】
【図1】本発明によるクラス間の関連に基づいた抽象ク
ラス自動生成システムの実施形態を示すシステム構成図
である。
【図2】顧客クラスの具体例を示すクラス図である。
【図3】顧客クラスの抽象化の全過程を示すフローチャ
ートである。
【図4】クラスの第1段階の抽象クラス化処理のフロー
チャートである。
【図5】顧客クラスを第1段階の抽象クラス化したクラ
ス図である。
【図6】クラスの第2段階の抽象クラス化処理のフロー
チャートである。
【図7】顧客クラスを第2段階の抽象クラス化したクラ
ス図である。
【図8】クラスの第3段階の抽象クラス化処理のフロー
チャートである。
【図9】顧客クラスを第3段階の抽象クラス化したクラ
ス図である。
【図10】抽象クラスで定義される属性かの判断処理を
示すフローチャートである。
【図11】抽象クラスで実装されるメソッドかの判断処
理を示すフローチャートである。
【図12】顧客クラスの各メソッドの情報テーブルの構
成図である。
【符号の説明】
111…ソースコード、112…ソースコード解析装
置、113…抽象クラス化を行ったソースコード、12
1…クラス図、122…クラス図解析装置、123…抽
象クラス化を行ったクラス図、191…クラス情報抽出
装置、192…クラス間の関連に基づいた抽象クラス自
動生成装置、210…会社クラス、220…顧客クラ
ス、230…保険料クラス、512,522…インタフ
ェースクラス、722…顧客クラスのインタフェースク
ラス、821…顧客クラスの具象クラス、822…顧客
クラスの抽象クラス。

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向技術を用いたソフトウ
    ェア開発における抽象クラスを生成する方法であって、 任意の業務システムを構成するクラス群の中の各クラス
    のメソッド内で呼ばれる他クラスのメソッドを取得する
    ステップと、複数の他クラスに対する自クラスのインタ
    フェースクラスを生成するステップと、複数の他クラス
    に対する自クラスのそれぞれのインタフェースクラスを
    継承した1つのインタフェースクラスを生成するステッ
    プとを含むことを特徴とするクラス間の関連に基づいた
    抽象クラスの自動生成方法。
  2. 【請求項2】 前記任意の業務システムを構成するクラ
    ス群の中の各クラスの属性、メソッド、メソッド内で呼
    ばれる他クラスのメソッド、メソッド内で呼ばれる自ク
    ラス内のメソッド、メソッド内で呼ばれる自クラス内の
    属性を取得するステップと、前記1つのインタフェース
    クラスのメソッドを実装するのに最小限の属性とメソッ
    ドを持つ抽象クラスを作成するステップとを含むことを
    特徴とする請求項1に記載のクラス間の関連に基づいた
    抽象クラスの自動生成方法。
  3. 【請求項3】 前記1つのインタフェースクラスのクラ
    ス図を生成するステップを含むことを特徴とする請求項
    1に記載のクラス間の関連に基づいた抽象クラスの自動
    生成方法。
  4. 【請求項4】 前記1つの抽象クラスのクラス図を生成
    するステップを含むことを特徴とする請求項2に記載の
    クラス間の関連に基づいた抽象クラスの自動生成方法。
  5. 【請求項5】 前記1つのインタフェースクラスのソー
    スコードを生成するステップを含むことを特徴とする請
    求項1に記載のクラス間の関連に基づいた抽象クラスの
    自動生成方法。
  6. 【請求項6】 前記1つの抽象クラスのソースコードを
    生成するステップを含むことを特徴とする請求項2に記
    載のクラス間の関連に基づいた抽象クラスの自動生成方
    法。
  7. 【請求項7】 オブジェクト指向技術を用いたソフトウ
    ェア開発における抽象クラスを生成する装置であって、 任意の業務システムを構成するクラス群の中の各クラス
    のメソッド内で呼ばれる他クラスのメソッドを取得する
    手段と、複数の他クラスに対する自クラスのインタフェ
    ースクラスを生成する手段と、複数の他クラスに対する
    自クラスのそれぞれのインタフェースクラスを継承した
    1つのインタフェースクラスを生成する手段とを備える
    ことを特徴とするクラス間の関連に基づいた抽象クラス
    の自動生成装置。
  8. 【請求項8】 前記任意の業務システムを構成するクラ
    ス群の中の各クラスの属性、メソッド、メソッド内で呼
    ばれる他クラスのメソッド、メソッド内で呼ばれる自ク
    ラス内のメソッド、メソッド内で呼ばれる自クラス内の
    属性を取得する手段と、前記1つのインタフェースクラ
    スのメソッドを実装するのに最小限の属性とメソッドを
    持つ抽象クラスを作成する手段とを備えることを特徴と
    する請求項7に記載のクラス間の関連に基づいた抽象ク
    ラスの自動生成装置。
JP2000094923A 2000-03-30 2000-03-30 抽象クラスの自動生成方法および装置 Pending JP2001282537A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000094923A JP2001282537A (ja) 2000-03-30 2000-03-30 抽象クラスの自動生成方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000094923A JP2001282537A (ja) 2000-03-30 2000-03-30 抽象クラスの自動生成方法および装置

Publications (1)

Publication Number Publication Date
JP2001282537A true JP2001282537A (ja) 2001-10-12

Family

ID=18609887

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000094923A Pending JP2001282537A (ja) 2000-03-30 2000-03-30 抽象クラスの自動生成方法および装置

Country Status (1)

Country Link
JP (1) JP2001282537A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513875B2 (en) 2011-11-22 2016-12-06 International Business Machines Corporation Processing instruction information

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513875B2 (en) 2011-11-22 2016-12-06 International Business Machines Corporation Processing instruction information

Similar Documents

Publication Publication Date Title
Riva et al. Combining static and dynamic views for architecture reconstruction
US20110016452A1 (en) Method and system for identifying regression test cases for a software
CN108427646A (zh) 基于Appium的安卓App自动化测试框架构建方法和装置
US8086642B2 (en) Apparatus, system, and method for processing hierarchical data in disparate data repositories
US8640088B2 (en) Software reuse utilizing naive group annotation of incomplete software descriptions employing a self-reporting element
CN108469955B (zh) 一种基于注解的Android注入框架实现方法
US7640538B2 (en) Virtual threads in business process programs
WO2006122494A1 (fr) Procede et systeme de description et de mise au point d'un systeme d'application a comportement dynamique
JPH1124901A (ja) プログラム情報の解析・表示方法およびシステム
US7444618B2 (en) Automatic generation of batch programs with identification, insertion of invariables, declarative statements and variables with the use of place-marks
CN115292058A (zh) 一种业务场景级别服务拓扑生成方法、装置及电子设备
JP4948126B2 (ja) Java(登録商標)言語プログラムを用いた大規模業務システムを分析するプログラム及びその処理方法
JP2001282537A (ja) 抽象クラスの自動生成方法および装置
CN110555732A (zh) 一种营销策略推送方法、装置及营销策略运营平台
US8010572B1 (en) Kstore scenario simulator processor and XML file
Nyssen et al. Are aspects useful for managing variability in software product lines? A case study
CN111124386B (zh) 基于Unity的动画事件处理方法、装置、设备和存储介质
Kauppinen et al. RITA Environment for Testing Framework-based Software Product Lines.
Dietrich et al. Formal methods for communication services: meeting the industry expectations
JP2002116911A (ja) オブジェクト指向プログラムの自動生成装置
Goulão et al. Streamlining scenario modeling with model-driven development: A case study
JPH08328840A (ja) プログラム合成方法
WO2023155487A1 (zh) 代码重构方法及装置
JP3150065B2 (ja) 操作画面自動生成方法および操作画面自動生成システム
JP2000039998A (ja) オブジェクト指向ソフトウェア部品変更支援方法及び装置及びオブジェクト指向ソフトウェア部品変更支援プログラムを格納した記憶媒体