JPH09231077A - コンピュータプログラムのサイズを縮小する方法 - Google Patents

コンピュータプログラムのサイズを縮小する方法

Info

Publication number
JPH09231077A
JPH09231077A JP8250428A JP25042896A JPH09231077A JP H09231077 A JPH09231077 A JP H09231077A JP 8250428 A JP8250428 A JP 8250428A JP 25042896 A JP25042896 A JP 25042896A JP H09231077 A JPH09231077 A JP H09231077A
Authority
JP
Japan
Prior art keywords
class
computer program
size
oriented programming
implementation
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
JP8250428A
Other languages
English (en)
Inventor
Thomas Boehme
ボーメ・トーマス
Juergen Uhl
ウーハーエル・ドクトール・ユルゲン
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH09231077A publication Critical patent/JPH09231077A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4492Inheritance

Abstract

(57)【要約】 (修正有) 【課題】 オブジェクト指向プログラミング手法を使用
してコンパイルされた実行可能コンピュータプログラム
のサイズを縮小する。 【解決手段】 オブジェクト指向プログラミング手法に
よって生成されたプログラムの共通部分を、型指定され
ないインプリメンテーションクラスとして、仮引数化さ
れたテンプレートを有する型指定されたインターフェー
スクラスから分離するようにする。ここで、型指定され
たインターフェースクラスは仮想関数を含んでいない。
型指定されないインプリメンテーションクラスは第2の
多様クラス階層に配置され、インターフェースクラスへ
のメソッド呼び出しはインプリメンテーションクラスへ
委任される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンピュータプログ
ラムのサイズを縮小する方法に関し、さらに具体的に
は、オブジェクト指向プログラミング手法の助けを借り
て編集されたコンパイル済み実行可能コンピュータプロ
グラムのサイズを縮小する方法に関する。本発明は、特
に、オブジェクト指向プログラミング言語用のクラスラ
イブラリを作成する技術分野に適用することができる。
【0002】
【従来の技術】オブジェクト指向プログラミング手法
は、種々の利点があるために、コンピュータプログラム
の開発上確立されてきた手法である。特に、オブジェク
ト指向プログラミング手法によって生成されるソースコ
ードの再利用性が、そのプログラミング手法が使用され
る理由の決定的要因である。
【0003】オブジェクト指向プログラミング手法で
は、ソースコードは機能ではなくデータに従って構成さ
れる。そのため、特別のデータ構造体(すなわち、オブ
ジェクト)が使用される。オブジェクト指向プログラミ
ング言語の典型はC++プログラミング言語である。こ
こで、オブジェクトは、いわゆるクラスから取ることが
できる(技術用語では、インスタンス化することができ
る)。オブジェクトは、それがインスタンス化されたク
ラスからある種の機能性を受け取り、インスタンス化の
過程で付加されたデータフィールドによって具体化され
る。
【0004】オブジェクト指向プログラミング手法の用
語の紹介、および関連用語の説明は、G.Booc
h:”Object−Oriented Analyi
s and Design with Applica
tions”,Benjamin/Cummings
Publishing、2nd Edition,19
94に書かれている。
【0005】C++プログラミング言語は、たとえば
A.Koenig:”Programming Lan
guage C++”,ANSI Comittee,
WG21/No545,1994およびB.Stro
ustrup: ”The C++ Programm
ing Language”,2nd Editio
n,AT&T Bell Telephone Lab
oratories,1991で説明されている。
【0006】オブジェクト指向プログラミング手法は、
しばしば階層リンクを有するクラスの構造化を必要とす
る。そのため、クラス階層が設計される。クラス階層の
中の個々のクラスは、いわゆる仮想関数を公開すること
ができる。この仮想関数は、派生されたすべてのクラス
へ渡すことができ、また、その機能の範囲は、派生され
たクラスの中のインプリメンテーションによってさらに
厳密に定義することができる。クラスが少なくとも1つ
のそのような仮想関数を公開するとき、一般に抽象クラ
スまたは抽象クラス階層について話している。仮想関数
をベースとしたこのような抽象化によって、階層的にリ
ンクされたクラスの多様的使用が可能となる。すなわ
ち、オブジェクトを抽象的視点から見ることによって、
派生された所望のクラスの所望のオブジェクトを記述す
ることができる。
【0007】クラス階層に加えて、クラス階層のインス
タンスを厳密に型指定し、また、同時に柔軟性をもたせ
るために、しばしば1つまたは複数のデータ型を使用し
てクラス階層を仮引数化することが必要である。たとえ
ば、STRINGやINTEGERのような要素の型
は、仮引数化されたクラスまたは仮引数化されたクラス
階層の仮引数に対する実引数として転送される。そのた
め、総称の型(いわゆるテンプレート)が使用される。
C++プログラミング言語において、上記のインスタン
スは、このテンプレートメカニズムによって実現され
る。
【0008】仮想関数およびそれに関連する多様クラス
の使用、および仮引数化されたテンプートクラスの使用
により、実行可能コンピュータプログラムのサイズは、
次の単純化された公式に従って著しく増大する。
【0009】 プログラムのサイズ = 仮想関数の数(多様化) x テンプレートのインスタンスの数(仮引数化)
【0010】この問題は、B.Stroustrup:
”The Design andEvolution
of C++”,AT&T Bell Teleph
one Laboratories,1994でも論じ
られている。テンプレートクラスの共通構成要素を取り
出して、関連する具象的なテンプレートクラスに対する
別個の基底クラスにそれを保持するようにした共通コー
ド法が、問題の解決法として論じられている。このプロ
セスの結果、クラスは2つの部分に分けられる。すなわ
ち、1つはインターフェースとして考えられるもので、
型指定されたテンプレートクラスであり、他方は、イン
プリメンテーションとして考えられるもので、型指定さ
れない共通コードである。
【0011】オブジェクト指向プログラミング手法の助
けを借りてコンピュータプログラムのサイズを縮小する
既知の方法は、コンピュータプログラムのサイズの縮小
について満足できる結果を達成しない。既知の方法によ
れば、少なくとも型指定されたテンプレートクラス(お
よび、一般的に、型指定されない関連の基底クラス)は
仮想関数を有するので、たとえインスタンスのサイズが
縮小されても、仮想関数の存在により、コンピュータプ
ログラムは線形的に拡張される。
【0012】そのようなコンピュータプログラムのサイ
ズは大きいため、中規模または小規模の問題を解決しよ
うとする場合であっても、プログラムを電子的に記憶し
実行するためには、コンピュータシステムの多大な費用
を必要とする。したがって、たとえば作業メモリおよび
大容量メモリとしての大型かつ高価な記憶装置と多大な
計算能力とを割り振る必要が生じる。さらに、大きなコ
ンピュータプログラムは、長いロード時間と実行時間と
を必要とする。
【0013】
【発明が解決しようとする課題】本発明の目的は、コン
ピュータプログラムのサイズを縮小する方法、またその
縮小を効果的に行う方法を提供することである。
【課題を解決するための手段】
【0014】本発明の目的は、独立した特許請求の範囲
に記載された方法およびその実施例によって達成され
る。本発明の実施による利点は、従属した特許請求の範
囲から明らかである。
【0015】本発明は、オブジェクト指向プログラミン
グ手法により生成された1つまたは複数のテンプレート
クラスが、仮引数化(パラメタライズ)されたテンプレ
ートを有する、型指定されたインターフェースクラスか
ら分離されるという方法に立脚している。ここで、型指
定されたインターフェースクラスは仮想関数を公開しな
い。本発明によれば、型指定されないインプリメンテー
ションクラスは第2の多様クラス階層に配置され、イン
ターフェースクラスへのメソッド呼び出しはインプリメ
ンテーションクラスへ委任される。
【0016】本発明は、オブジェクト指向プログラミン
グ言語のためのクラスライブラリを構築する技術分野へ
特に応用することができる。本発明がコンピュータプロ
グラムのサイズを効果的にまた著しく縮小し、したがっ
てコンピュータプログラムの記憶と実行に関して、コン
ピュータシステムのハードウェア要件を軽減すること
は、本発明の利点である。
【0017】本発明の目的は、特に請求項1に記載され
た方法によって達成される。その利点は、テンプレート
クラスを表示する型指定されたインターフェースクラス
から、仮想関数を表示する型指定されないインプリメン
テーションクラスを分離したものである第2の多様クラ
ス階層へ、型指定されないインプリメンテーションクラ
スを配置することによって、テンプレートクラスと仮想
関数の完全な分離が達成されることである。
【0018】さらに、型指定されたインターフェースク
ラスへのメソッド呼び出しがインプリメンテーションク
ラスへ委任されることも、本発明の利点である。なぜな
ら、この方法によって、大多数の関数を非常に簡潔にま
た完全に保持することができるからである。ここで、
「委任(delegation)」の意味は、メソッド
呼び出しまたは関数呼び出しをインプリメンテーション
クラスへリダイレクションまたはバイパスすることと解
釈されたい。このようにして、コンパイル過程で呼び出
されたソースコードの中へ、上記のような関数をいわゆ
るインライン関数として組み込めることは、本発明の利
点である。
【0019】さらに、本発明に従ってテンプレートクラ
スを有する型指定されたインターフェースクラスと、仮
想関数を有する型指定されないインプリメンテーション
クラスとを分離した場合の利点として、テンプレートク
ラスの使用は、もはやほとんど実行可能コンピュータプ
ログラムのサイズに影響を及ぼさないことである。なぜ
なら、テンプレートクラスは、今やプログラムのサイズ
に対する影響という点で、型指定されない関数呼び出し
と非常に類似しているからである。インプリメンテーシ
ョンクラスが共用ライブラリまたはダイナミックリンク
ライブラリ(DLL)で使用される場合に、上記の利点
は大きな意味をもっている。
【0020】1つの実施例で、本発明は請求項2の特徴
を示している。抽象クラス階層とテンプレートクラス
は、コンテナクラスの実施において特に広く使用されて
おり、したがって本発明の根底にある問題の全面的な範
囲を示している。本発明によれば、コンピュータプログ
ラムのサイズを大幅にかつ非常に効果的に縮小すること
ができるので、本発明の利点は、特にコンテナクラスを
使用したときに顕著である。
【0021】他の実施例で、本発明は請求項3の特徴を
示している。この場合、利点として、クラスライブラリ
に依存してコンピュータプログラムが作成されるとき、
実行可能コンピュータプログラムのサイズが特に顕著に
縮小されることが挙げられる。さらに、本発明の利点と
して、ライブラリのクラスに対して本発明の方法を一度
だけ(すなわち、最初にのみ)使用すれば十分であり、
その後では、ライブラリクラスへのすべてのアクセスは
実行可能プログラムの縮小という点で本発明の利点を享
受することができる。
【0022】他の実施例において、本発明は請求項4の
特徴を示している。この実施例はC++プログラミング
言語に特定されたものである。C++プログラミング言
語が現時点で周知であり広く使用されていることは、本
発明にとって有利である。本発明をC++プログラミン
グ言語で使用できることは本発明の有利な点であり、し
たがって、企業内に存在する大多数の問題に本発明を使
用できる。
【0023】さらに、今まで使用してきた技術用語(た
とえば、仮想関数、テンプレートクラスなど)は、語句
の意味としてすべてのオブジェクト指向プログラミング
言語に対して当てはまるものであるが、そのような用語
はC++プログラミング言語の用語を借用したものであ
る。そのような用語は概念の理解を容易にするためにの
み使用したもので、本発明に従う解法の全面的な有効性
と、基本的問題に対するその適用可能性に関して、制限
があることを意味するものではない。
【0024】他の実施例において、本発明は請求項5の
特徴を示している。「コンパイル」の語は、一般的に、
非マシン指向プログラミング言語で書かれたソースコー
ド表現から、マシン指向プログラミング言語のターゲッ
ト命令へ変換することを意味する。この場合、コンパイ
ラによって直接に、大多数の関数をマシン指向コンピュ
ータプログラムのインライン関数として変換できること
は、本発明の利点である。それによって、ジャンプ命令
とジャンプアドレスの設定と管理が有効に除去され、実
行可能プログラムの記憶と処理がより早く行われ、コン
ピュータハードウェアの費用が少なくなる。
【0025】他の実施例において、本発明は請求項6の
特徴を示している。この請求項で表現された発明は、請
求項2から4までの特徴を含んでおり、したがって、す
でに説明した利点を有している。この請求項で表現され
た発明は、特にオブジェクト指向プログラミング言語用
のクラスライブラリを設定する場合を対象としている。
【0026】請求項7で記述されるデータキャリアは、
これまでの請求項に関して説明した利点を有している。
【0027】請求項8で開示される委任は、型指定され
たインターフェースクラスへのメソッド呼び出しを、仮
想関数を表示する型指定されないインプリメンテーショ
ンクラスへ委任するものであるが、このような委任は、
本発明の根底を形成する目的の解法として重要な概念を
与えるものである。このような委任の使用によって、初
めてインターフェースクラスを仮想関数から解放するこ
とが可能となり、これまで説明してきたような、本発明
およびその実施例の利点がすべて実現されるのである。
【0028】
【発明の実施の形態】図1は、本発明の方法をフローチ
ャートの形で表したものである。この方法の第1ステッ
プとして、仮引数化されたテンプレートクラスの中の共
通部分が決定される。次に、型指定されないインプリメ
ンテーションクラスとしての共通部分を、仮引数化され
たテンプレートを有する型指定されたインターフェース
クラスとしての非共通部分から分離する。ここで、型指
定されたインターフェースクラスは仮想関数を表示しな
い。次のステップで、型指定されないインプリメンテー
ションクラスは、多様クラス階層へ配置される。最後
に、インターフェースクラスへのメソッド呼び出しは、
インプリメンテーションクラスへ委任される。
【0029】高度に単純化されたクラス階層が図2に示
される。基底(Base)クラス201は、2つの関数
fooとbarを有する。派生(Derived)クラ
ス202は、2つの関数fooとzakを有する。抽象
クラスの多様行動は仮想関数により達成される。たとえ
ば、図2では、関数barは仮想関数として宣言され
る。なぜなら、基底クラスは、そこから派生されたクラ
スの1つが、関数barの異なったインプリメンテーシ
ョンを遂行できると仮定するからである。この場合、派
生クラスは基底クラスから関数barを継承(203)
したことになる。
【0030】C++プログラミング言語の場合、図2の
ソースコードは次のようになる。
【0031】他方、基底クラスから派生されたすべての
クラスが、自分自身の特定のインプリメンテーションを
有する抽象関数によって上書きされるようなことがあれ
ば、このクラスは「純粋仮想(pure virtua
l)」と表現される。上記の例で、関数fooはそのよ
うな純粋仮想関数である。
【0032】さらに、図2は、派生クラスが基底クラス
から関数barを継承するのみであり、この仮想関数を
上書きせず、純粋仮想関数fooのためにそれ自体のイ
ンプリメンテーションを準備し、そして自分の方では他
の仮想関数zakを付け加えることを示す。仮想関数z
akは、この派生クラスから派生されたクラスによって
継承または上書きされることができる。
【0033】少なくとも1つの仮想関数を有するすべて
のオブジェクトは、いわゆるポインタを有する。このポ
インタは仮想関数のテーブルを指し示す。仮想関数のこ
のテーブルは、仮想関数がオブジェクトクラスそれ自体
の中で定義されようと基底クラスの1つで定義されよう
と、すべての仮想関数の開始アドレスを含んでいる。
【0034】図3は、そのような仮想関数のテーブル3
01を示す。派生クラスのオブジェクト302は、仮想
関数のテーブル301を指し示すポインタ303を有す
る。仮想関数のテーブル301には、すべての仮想関数
のアドレス(すなわち、これら関数の開始アドレスを参
照するもの)が含まれている。この例では、仮想関数の
テーブル301には、仮想関数Derived::fo
o()への参照305を有するアドレス304と、仮想
関数Base::bar()への参照307を有するア
ドレス306と、仮想関数Derived::za
k()への参照309を有するアドレス308が保持さ
れている。
【0035】一般的に、コンテナクラスは、その要素の
型とキーの型を後のインスタンスの仮引数として使用す
ることを許している。それによって、たとえば、STR
INGの集合は、INTEGERの集合から分離され
る。問題としている関数は、1つまたは複数のインスタ
ンス化実引数を想定しているので、INTEGERの値
をSTRINGの集合に付け加えることはできず、また
STRINGの値をINTEGERの集合に付け加える
こともできない。その結果、各インスタンスについて、
関数addのためのプログラミングコードが重複され
る。そのため、仮想関数によるクラス階層の多様化と一
緒になって、コンピュータプログラムのサイズが大きく
なる。
【0036】基底クラスの仮想関数のために、その後に
表現されるテンプレートクラスは、特に派生テンプレー
ト(DerivedTemplate)クラスが多様的
に使用されない場合でも、そのすべての仮想関数と共に
表される。これは図4に示される。基底クラス401
は、派生テンプレート(DerivedTemplat
e)クラス402へ、「純粋仮想」関数fooと仮想関
数barを継承(403)させる。派生テンプレート
(DerivedTemplate)クラス402の側
では、仮想関数zakを付け加える。対応するC++ソ
ースコードは次のように表現される。
【0037】このようになる理由は、コンパイラが仮想
関数の開始アドレスを仮想関数のテーブルへ入れなけれ
ばならないからである。
【0038】図5は、プログラムのサイズを縮小する方
法、すなわち派生テンプレートクラス503のすべての
インスタンスの共通部分を取り出す方法を示す。この共
通部分は型指定されておらず、たとえばvoid*型で
ある。基底クラス501と同じように、それは具象的な
派生テンプレートクラス503のための別個の基底クラ
ス502として保持される。このようにして、派生テン
プレートクラス503は、元の基底クラス501の多様
性と、別個の基底クラス502からのインプリメンテー
ションとを承継する。
【0039】次に示すものは、対応するC++のソース
コードである。 template <class AType> class DerivedTemplate : public Base, public DerivedImpl { public : virtual void foo () { DerivedImpl::foo () ; } virtual void zak () { DerivedImpl::zak () ; } };
【0040】この方法は共通コード法(コモン・コード
・アプローチ)として知られており、図6に示されるよ
うに、インターフェースクラス602中の型指定された
ソースコードと、インプリメンテーションクラス601
中の型指定されないソースコードとの、水平分離603
として考えることができる。
【0041】共通コード法とは対照的に、本発明は、図
7に示すように、インターフェースクラスとインプリメ
ンテーションクラスの垂直分離を達成する。そこでは、
型指定されたインターフェースクラス702は、型指定
されないインプリメンテーションクラス701から分離
され、型指定されたインターフェースクラスは、もはや
仮想関数を有しないようにされる。属性「型指定」と属
性「仮想」とは完全に分離される。インターフェースク
ラスの関数は、単にメソッド呼び出しを委任するという
点で機能性を与えられるので、その関数は、呼び出して
いるソースコードの中へインライン関数として直接に組
み込むことができる。インターフェースクラスとインプ
リメンテーションクラスは、並列になった2つの階層を
典型的に示している。
【0042】図8は、基底クラス801が派生テンプレ
ート(DerivedTemplate)クラス803
へ関数を継承(805)させること、多様関数はもはや
関数foo()およびbar()を除いてコンピュータ
プログラムへインライン関数として組み込めないことを
示している。基底クラス801への関数呼び出しまたは
メソッド呼び出しは、いまやデータフィールド(ivI
mpl)806中の情報に従って、基底インプリメンテ
ーション(BaseImpl)クラス802のオブジェ
クトへ委任される。基底インプリメンテーション(Ba
seImpl)クラス802は、派生インプリメンテー
ション(DeriveImpl)クラス804へ関数
(たとえば「純粋仮想」関数foo)を多様的に継承
(807)させる。次に、派生インプリメンテーション
(DeriveImpl)クラス804のオブジェクト
は、派生テンプレート(DerivedTemplat
e)クラス803によってインスタンス化(808)さ
れる。
【0043】次のコード例は、インターフェースおよび
対応するインプリメンテーションを示す。これらは双方
とも2段階の階層形式になっている。 class BaseImpl { public : virtual BaseImpl () { /* */ } virtual void foo () = 0 virtual void bar () { /* */ } }; class DerivedImpl : public BaseImpl { public : virtual void foo () { /* */ } virtual void zak () { /* */ } }; class Base { protected: BaseImpl* ivImpl; public : Base (BaseImpl* impl) : ivImpl (impl) { /* */ } Base () { delete ivImpl; } inline void foo () { ivImpl -> foo (); } inline void bar () { ivImpl -> bar (); } }; template <class AType> class DerivedTemplate : public Base { public : DerivedTemplate () : Base (new DerivedImpl) { /* */ } inline void zak () { ((DerivedImpl*)ivImpl) -> zak (); } };
【0044】DerivedTemplate<ATy
pe>::zak()のような関数は、この関数に対し
て少なくとも1つの呼び出しが存在するときにのみイン
スタンス化されてプログラムコードの中に組み込まれ
る。派生テンプレート(DerivedTemplat
e)クラス803は、呼び出しを派生インプリメンテー
ション(DerivedImpl)クラス804へ委任
するだけであるから、関数DerivedTempla
te<AType>::zak()のコードの大きさ
は、本質的に非テンプレートクラスのコードの大きさと
同じである。
【0045】まとめとして、本発明の構成に関して以下
の事項を開示する。 (1) コンピュータプログラムがオブジェクト指向プ
ログラミング手法によって生成され、上記オブジェクト
指向プログラミング手法がクラスとオブジェクトを有
し、上記オブジェクト指向プログラミング手法が第1の
多様クラス階層を有し、上記オブジェクト指向プログラ
ミング手法が仮引数化されたテンプレートクラスを有す
る場合に、上記コンピュータプログラムのサイズを縮小
する方法であって、上記仮引数化されたテンプレートク
ラスの中の共通構成要素を決定し、仮引数化されたテン
プレートを有する型指定されたインターフェースクラス
としての非共通構成要素から、型指定されないインプリ
メンテーションクラスとしての共通構成要素を分離する
ステップを含み、さらに型指定されないインプリメンテ
ーションクラスを第2の多様クラス階層に配置し、イン
ターフェースクラスへのメソッド呼び出しをインプリメ
ンテーションクラスへ自動的に委任するステップを含
む、コンピュータプログラムのサイズの縮小方法。 (2)上記(1)において、コンピュータプログラムが
コンテナクラスを含むことを特徴とする、コンピュータ
プログラムのサイズの縮小方法。 (3)上記(1)または(2)において、コンピュータ
プログラムがクラスライブラリを使用して生成されるこ
とを特徴とする、コンピュータプログラムのサイズの縮
小方法。 (4)上記(1)から(3)までの1つにおいて、上記
オブジェクト指向プログラミング手法がC++プログラ
ミング言語であり、上記C++プログラミング言語が仮
想関数の構造を有し、クラス階層の多様化が仮想関数に
よって実現され、型指定されないインプリメンテーショ
ンクラスのみが仮想関数を含むことを特徴とする、コン
ピュータプログラムのサイズの縮小方法。 (5)上記(1)から(4)までの1つにおいて、コン
パイルの間に、委任を行う関数がコンピュータプログラ
ム内のインライン関数へ自動的に変換されることを特徴
とする、コンピュータプログラムのサイズの縮小方法。 (6)上記(1)から(5)までの方法の1つを、オブ
ジェクト指向プログラミング言語用のクラスライブラリ
を作成する場合に使用することを特徴とする、コンピュ
ータプログラムのサイズの縮小方法。 (7)オブジェクト指向プログラミング手法用のクラス
ライブラリを記憶するデータキャリアにして、上記クラ
スライブラリが上記(1)から(5)までの1つの方法
に従って作成されることを特徴とするデータキャリア。 (8)型指定されたインターフェースクラスへのメソッ
ド呼び出しを、仮想関数を有する型指定されないインプ
リメンテーションクラスへ移す自動的委任の使用を特徴
とする、コンピュータプログラムのサイズの縮小方法。
【図面の簡単な説明】
【図1】本発明の方法をフローチャートの形で示す図で
ある。
【図2】著しく単純化されたクラス階層を示す図であ
る。
【図3】仮想関数のテーブルを示す図である。
【図4】仮引数化されたクラスを有する、著しく単純化
されたクラス階層を示す図である。
【図5】コンピータプログラムのサイズを縮小する共通
コード法の可能性を示す図である。
【図6】インターフェースクラスとインプリメンテーシ
ョンクラスとの水平分離を示す図である。
【図7】本発明に従った、インターフェースクラスとイ
ンプリメンテーションクラスとの垂直分離を示す図であ
る。
【図8】本発明に従った、並列になった2つのクラス階
層を示す図である。
【符号の説明】
101 ステップ 102 ステップ 103 ステップ 104 ステップ 105 ステップ 106 ステップ 201 基底クラス 202 派生クラス 203 継承 301 仮想関数のテーブル 302 オブジェクト 303 ポインタ 304 アドレス 305 参照 306 アドレス 307 参照 308 アドレス 309 参照 401 基底クラス 402 派生テンプレートクラス 403 継承 501 基底クラス 502 派生インプリメンテーションクラス 503 派生テンプレートクラス 601 インプリメンテーションクラス 602 インターフェースクラス 603 水平分離 701 型指定されないインプリメンテーショ
ンクラス 702 型指定されたインターフェースクラス 703 垂直分離 801 基底クラス 802 基底インプリメンテーションクラス 803 派生テンプレートクラス 804 派生インプリメンテーションクラス 805 継承 806 データフィールド 807 継承 808 インスタンス化
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ウーハーエル・ドクトール・ユルゲン ドイツ連邦共和国デー−71032、 ボェプ リンゲン ティエルガルテンシュトラッセ 57

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータプログラムがオブジェクト
    指向プログラミング手法によって生成され、上記オブジ
    ェクト指向プログラミング手法がクラスとオブジェクト
    を有し、上記オブジェクト指向プログラミング手法が第
    1の多様クラス階層を有し、上記オブジェクト指向プロ
    グラミング手法が仮引数化されたテンプレートクラスを
    有する場合に、上記コンピュータプログラムのサイズを
    縮小する方法であって、上記仮引数化されたテンプレー
    トクラスの中の共通構成要素を決定し、仮引数化された
    テンプレートを有する型指定されたインターフェースク
    ラスとしての非共通構成要素から、型指定されないイン
    プリメンテーションクラスとしての共通構成要素を分離
    するステップを含み、さらに型指定されないインプリメ
    ンテーションクラスを第2の多様クラス階層に配置し、
    インターフェースクラスへのメソッド呼び出しをインプ
    リメンテーションクラスへ自動的に委任するステップを
    含む、コンピュータプログラムのサイズの縮小方法。
  2. 【請求項2】請求項1において、コンピュータプログラ
    ムがコンテナクラスを含むことを特徴とする、コンピュ
    ータプログラムのサイズの縮小方法。
  3. 【請求項3】請求項1または2において、コンピュータ
    プログラムがクラスライブラリを使用して生成されるこ
    とを特徴とする、コンピュータプログラムのサイズの縮
    小方法。
  4. 【請求項4】請求項1から3までの1つにおいて、上記
    オブジェクト指向プログラミング手法がC++プログラ
    ミング言語であり、上記C++プログラミング言語が仮
    想関数の構造を有し、クラス階層の多様化が仮想関数に
    よって実現され、型指定されないインプリメンテーショ
    ンクラスのみが仮想関数を含むことを特徴とする、コン
    ピュータプログラムのサイズの縮小方法。
  5. 【請求項5】請求項1から4までの1つにおいて、コン
    パイルの間に、委任を行う関数がコンピュータプログラ
    ム内のインライン関数へ自動的に変換されることを特徴
    とする、コンピュータプログラムのサイズの縮小方法。
  6. 【請求項6】請求項1から5までの方法の1つを、オブ
    ジェクト指向プログラミング言語用のクラスライブラリ
    を作成する場合に使用することを特徴とする、コンピュ
    ータプログラムのサイズの縮小方法。
  7. 【請求項7】オブジェクト指向プログラミング手法用の
    クラスライブラリを記憶するデータキャリアにして、上
    記クラスライブラリが請求項1から5までの1つの方法
    に従って作成されることを特徴とするデータキャリア。
  8. 【請求項8】型指定されたインターフェースクラスへの
    メソッド呼び出しを、仮想関数を有する型指定されない
    インプリメンテーションクラスへ移す自動的委任の使用
    を特徴とする、コンピュータプログラムのサイズの縮小
    方法。
JP8250428A 1995-09-25 1996-09-20 コンピュータプログラムのサイズを縮小する方法 Pending JPH09231077A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE19535519A DE19535519C2 (de) 1995-09-25 1995-09-25 Verfahren zur Reduzierung des Umfanges von Computerprogrammen
DE19535519.9 1995-09-25

Publications (1)

Publication Number Publication Date
JPH09231077A true JPH09231077A (ja) 1997-09-05

Family

ID=7773060

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8250428A Pending JPH09231077A (ja) 1995-09-25 1996-09-20 コンピュータプログラムのサイズを縮小する方法

Country Status (3)

Country Link
US (1) US5901314A (ja)
JP (1) JPH09231077A (ja)
DE (1) DE19535519C2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012212449A (ja) * 1999-05-25 2012-11-01 Oracle Internatl Corp 第4世代プログラミングツールを用いて生成されるアプリケーションの属性の拡張

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058396A (en) * 1997-02-06 2000-05-02 Sterling Software, Inc. Product interface method and system which allow class evolution
US6715147B1 (en) * 1997-03-31 2004-03-30 International Business Machines Corporation Method and system for interfacing a plurality of applications conforming to a standard
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
US6381734B1 (en) * 1998-06-03 2002-04-30 Microsoft Corporation Method, software and apparatus for referencing a method in object-based programming
GB2342882B (en) 1998-10-20 2003-05-14 H R Adcock Ltd Apparatus for and method of manufacturing spindle components
US6654951B1 (en) * 1998-12-14 2003-11-25 International Business Machines Corporation Removal of unreachable methods in object-oriented applications based on program interface analysis
CA2396094C (en) * 1999-02-03 2013-06-25 Gates, William H., Iii Method and system for generating a user interface for distributed devices
US6718543B2 (en) * 1999-11-08 2004-04-06 Hewlett-Packard Development Company, L.P. Method and apparatus for optimization of the performance of an application program in a computer system while preserving the system behavior
US6760905B1 (en) * 2000-09-21 2004-07-06 Curl Corporation Lazy compilation of template-generated classes in dynamic compilation execution environments
JP2003308213A (ja) * 2002-04-17 2003-10-31 Hitachi Ltd ジョブ処理方法、ジョブ処理装置及びストレージ管理システム
JP2005141380A (ja) * 2003-11-05 2005-06-02 Matsushita Electric Ind Co Ltd テンプレートコンパイル方法
JP4768984B2 (ja) * 2004-12-06 2011-09-07 パナソニック株式会社 コンパイル方法、コンパイルプログラムおよびコンパイル装置
US8543994B2 (en) * 2007-12-07 2013-09-24 Sap Ag Developing java server components without restarting the application server
JPWO2012077302A1 (ja) * 2010-12-09 2014-05-19 日本電気株式会社 モデル編集支援装置、モデル編集支援方法およびモデル編集支援プログラム
US10073974B2 (en) 2016-07-21 2018-09-11 International Business Machines Corporation Generating containers for applications utilizing reduced sets of libraries based on risk analysis
KR20200084695A (ko) 2019-01-03 2020-07-13 삼성전자주식회사 응용프로그램의 관리 장치 및 방법

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
DE4131380A1 (de) * 1991-09-20 1993-03-25 Siemens Ag Verfahren zur adaption einer objektorientierten applikation
JPH05257664A (ja) * 1991-12-12 1993-10-08 Internatl Business Mach Corp <Ibm> バージョン独立のオブジェクト指向アプリケーション・プログラムを生成するシステム及び方法
US5371891A (en) * 1992-04-09 1994-12-06 Microsoft Corporation Method for object construction in a compiler for an object-oriented programming language
US5327562A (en) * 1992-05-06 1994-07-05 Microsoft Corporation Method for implementing virtual function tables in a compiler for an object-oriented programming language
US5481708A (en) * 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5560005A (en) * 1994-02-25 1996-09-24 Actamed Corp. Methods and systems for object-based relational distributed databases
US5710894A (en) * 1995-04-04 1998-01-20 Apple Computer, Inc. Dynamic classes and graphical user interface for same
US5740443A (en) * 1995-08-14 1998-04-14 International Business Machines Corporation Call-site specific selective automatic inlining

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012212449A (ja) * 1999-05-25 2012-11-01 Oracle Internatl Corp 第4世代プログラミングツールを用いて生成されるアプリケーションの属性の拡張

Also Published As

Publication number Publication date
DE19535519C2 (de) 1999-03-04
DE19535519A1 (de) 1997-03-27
US5901314A (en) 1999-05-04

Similar Documents

Publication Publication Date Title
Tatsubori et al. OpenJava: A class-based macro system for Java
JPH09231077A (ja) コンピュータプログラムのサイズを縮小する方法
US6185728B1 (en) Development system with methods for type-safe delegation of object events to event handlers of other objects
Yakimovich et al. Software architecture classification for estimating the cost of COTS integration
CA2115464C (en) Concurrent processing in object oriented parallel and near parallel systems
US5953526A (en) Object oriented programming system with displayable natural language documentation through dual translation of program source code
US6275979B1 (en) Implementation for an object oriented run-time extensible item
US5943497A (en) Object-oriented apparatus and method for controlling configuration of object creation
US5327562A (en) Method for implementing virtual function tables in a compiler for an object-oriented programming language
US5754855A (en) System and method for managing control flow of computer programs executing in a computer system
US6038565A (en) Object oriented data format mapping mechanism
US5872977A (en) Object-oriented method and apparatus for creating a makefile
JPH02272627A (ja) デイジタル・コンピユータ・システムとその手続呼び出し方法
JPH01306923A (ja) 異種言語間連絡方式
US6085034A (en) Constructor based object initialization with overrides
US6163813A (en) Pattern for instantiating objects of unknown type in object-oriented applications
US20040123308A1 (en) Hybird of implicit and explicit linkage of windows dynamic link labraries
US20010016866A1 (en) Computer and computer-readable storage medium
Szyperski Insight ETHOS: On object-orientation in operating systems
JP2000187587A (ja) ジェネリックメインオブジェクトによって実現されるインタ―プリティブネットワ―クデ―モン
US5970250A (en) System, method, and computer program product for scoping operating system semanticis in a computing environment supporting multi-enclave processes
US7246135B2 (en) Sharing classes between programs
Ichbiah et al. General concepts of the simula 67 programming language
US6769119B1 (en) System, method, and computer program product for scoping operating system semantics in a computing environment supporting multi-enclave processes
US5765148A (en) Database processing apparatus and database processing method for variable length objects, and computer-readable memory medium for storing database processing program

Legal Events

Date Code Title Description
A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050318

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20050705

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20050705