DE19535519A1 - Verfahren zur Reduzierung des Umfanges von Computerprogrammen - Google Patents

Verfahren zur Reduzierung des Umfanges von Computerprogrammen

Info

Publication number
DE19535519A1
DE19535519A1 DE19535519A DE19535519A DE19535519A1 DE 19535519 A1 DE19535519 A1 DE 19535519A1 DE 19535519 A DE19535519 A DE 19535519A DE 19535519 A DE19535519 A DE 19535519A DE 19535519 A1 DE19535519 A1 DE 19535519A1
Authority
DE
Germany
Prior art keywords
classes
class
oriented programming
functions
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.)
Granted
Application number
DE19535519A
Other languages
English (en)
Other versions
DE19535519C2 (de
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
Priority to DE19535519A priority Critical patent/DE19535519C2/de
Priority to US08/697,972 priority patent/US5901314A/en
Priority to JP8250428A priority patent/JPH09231077A/ja
Publication of DE19535519A1 publication Critical patent/DE19535519A1/de
Application granted granted Critical
Publication of DE19535519C2 publication Critical patent/DE19535519C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related 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

Description

Technisches Gebiet
Die Erfindung betrifft ein Verfahren zur Reduzierung von Computerprogrammen, insbesondere ein Verfahren zur Reduzierung des Umfanges von compilierten und ausführbaren Computerprogrammen, die mit Hilfe einer objekt-orientierten Programmiertechnik editiert wurden. Die Erfindung ist insbesondere einsetzbar auf dem technischen Gebiet der Erstellung von Klassenbibliotheken für eine objekt-orientierte Programmiersprache.
Stand der Technik
Objekt-orientierte Programmiertechniken halten aufgrund ihrer spezifischen Vorteile verstärkt Einzug in die Entwicklung von Computerprogrammen. Insbesondere die Wiederverwendbarkeit von Quellcode, der mit objekt-orientierten Programmiertechniken erstellt wurden, ist ein entscheidender Faktor für den Einsatz dieser Programmiertechniken.
Bei der objekt-orientierten Programmiertechnik erfolgt eine Strukturierung des Quellcodes nicht nach Funktionen sondern nach Daten; hierzu werden spezielle Datenstrukturen eingeführt, die sogenannten Objekte. Ein typischer Vertreter der objekt-orientierten Programmiersprachen ist die Programmiersprache C++. Hierbei können die Objekte aus sogenannten Klassen abgeleitet werden oder, in der Fachsprache ausgedrückt, instanziiert werden. Die Objekte erhalten bestimmte Funktionalitäten aus der Klasse, aus der sie instanziiert wurden, und werden mittels zusätzlicher Datenfelder durch den Vorgang der Instanziierung spezifiziert.
Eine Einführung in die Technologie objekt-orientierter Programmiertechniken und eine Erläuterung der zugehörigen Fachterminologie ist in G. Booch: "Object-Oriented Analysis and Design with Applications", Benjamin/Cummings Publishing, 2. Auflage, 1994, gegeben.
Die Programmiersprache C++ wird beispielsweise in A. Koenig: "Programming Language C++", ANSI Commitee, WG21/No545, 1994, und in B. Stroustrup: "The C++ Programming Language", 2. Auflage, AT Bell Telephone Laboratories, 1991, vorgestellt und beschrieben.
Die objekt-orientierte Programmiertechnik erfordert häufig eine Strukturierung der Klassen mit hierarchischen Verknüpfungen. Dies führt zu dem Entwurf einer Klassenhierarchie. Die einzelnen Klassen der Klassenhierarchie können sogenannte virtuelle Funktionen aufweisen, die an alle abgeleiteten Klassen weitergegeben werden, und deren Funktionsumfang durch eine Implementierung in den abgeleiteten Klassen genauer bestimmt werden kann. Wenn eine Klasse mindestens eine solche virtuelle Funktion aufweist, spricht man von einer abstrakten Klasse beziehungsweise von einer abstrakten Klassenhierarchie. Diese Abstraktion aufgrund von virtuellen Funktionen erlaubt den polymorphen Gebrauch der hierarchisch verknüpften Klassen, das heißt, durch die abstrakte Sicht auf ein Objekt kann jedes beliebige Objekt jeder beliebigen abgeleiteten Klasse angesprochen werden.
Häufig ist neben der Klassenhierarchie auch eine Parametrisierung der Klassenhierarchie mittels einem oder mehreren Datentypen erforderlich, um eine typensichere und zugleich flexible Ausprägung der Klassenhierarchie zu ermöglichen. Beispielsweise werden Elementtypen wie STRING oder INTEGER als Argumente für die formalen Parameter einer parametrisierten Klasse oder einer parametrisierten Klassenhierarchie übergeben. Zu diesem Zweck werden generische Typen, sogenannte Templates, eingesetzt. In der Programmiersprache C++ werden besagte Ausprägungen durch diesen Template-Mechanismus realisiert.
Durch die Verwendung der virtuellen Funktionen mit der damit einhergehenden polymorphen Gestalt der Klassen und die Verwendung von parametrisierten Templateklassen kommt es zu einem starken Anwachsen des Umfanges des ausführbaren Computerprogrammes gemäß der Faustformel:
Programmumfang = Anzahl der virtuellen Funktionen (Polymorphisierung) × Anzahl der Ausprägungen der Templates (Parametrisierung)
Dieses Problem wird auch in B. Stroustrup: "The Design and Evolution of C++", AT Bell Telephone Laboratories, 1994, adressiert. Als mögliche Lösung wird ein sogenannter Common Code Approach diskutiert, wobei gemeinsame Anteile der Templateklassen herausgearbeitet werden und in einer separaten Basisklasse für die zugehörige konkrete Templateklasse vorgehalten werden. Durch dieses Verfahren wird eine Klasse in zwei Teile geteilt: In einem Teil, der als Schnittstelle betrachtet werden kann, steht die typisierte Templateklasse, in dem anderen Teil, der als Implementierung betrachtet werden kann, steht der untypisierte Common-Code.
Nachteile des Standes der Technik
Die bekannten Verfahren zur Reduzierung des Umfanges von Computerprogrammen, die mit Hilfe von objekt-orientierten Programmiertechniken erstellt wurden, leisten keine befriedigende Reduktion des Umfanges des Computerprogrammes. Nach dem bekannten Verfahren weisen mindestens die typisierten Templateklassen, meist auch die zugehörigen untypisierten Basisklassen, virtuelle Funktionen auf, das heißt, auch wenn die Größe einer Ausprägung schrumpft, so führt die Existenz der virtuellen Funktionen weiterhin zu linear anwachsenden Computerprogrammen.
Durch den großen Umfang solcher Computerprogramme, selbst für mittlere und sogar kleine Problemstellungen, erfordert die elektronische Speicherung und die Ausführung dieser Programme einen hohen Aufwand bezüglich des zugehörigen Computersystems. So müssen beispielsweise umfangreiche und kostenintensive Speichermittel, etwa Arbeitsspeicher aber auch Massenspeicher, und eine hohe Rechenleistung des Computersystems bereitgestellt werden. Außerdem bedingt ein großer Umfang des Computerprogrammes sowohl eine lange Ladezeit als auch eine lange Ausführungszeit des Computerprogrammes.
Aufgabe
Der Erfindung liegt daher die Aufgabe zugrunde, ein Verfahren zur Reduzierung des Umfanges von Computerprogrammen bereitzustellen, welches eine effektive Reduzierung des Umfanges des Computerprogrammes leistet.
Lösung der Aufgabe
Die Aufgabe wird durch die in den unabhängigen Patentansprüchen offenbarten Verfahren und Verwendungen gelöst. Vorteilhafte Ausgestaltungen der Erfindung sind in den zugehörigen abhängigen Patentansprüchen offenbart.
Die Erfindung basiert auf einem Verfahren, bei dem die gemeinsamen Anteile einer oder mehrerer mit einer objekt­ orientierten Programmiertechnik erstellten Templateklassen als untypisierte Implementierungsklassen von den typisierten Schnittstellenklassen mit parametrisierten Templates abgetrennt werden, wobei die typisierten Schnittstellenklassen keine virtuellen Funktionen aufweisen. Gemäß dem offenbarten Verfahren werden die untypisierten Implementierungsklassen in einer zweiten polymorphen Klassenhierarchie angeordnet und Methodenaufrufe gegen die Schnittstellenklassen werden an die Implementierungsklassen delegiert.
Die Erfindung ist insbesondere einsetzbar auf dem technischen Gebiet der Erstellung von Klassenbibliotheken für eine objekt­ orientierte Programmiersprache. Die Erfindung erzielt vorteilhafterweise eine effektive und signifikante Reduktion des Umfanges von Computerprogrammen und erlaubt somit eine Speicherung und Ausführung des Computerprogrammes mit geringeren Anforderungen an die Hardwarevoraussetzungen des Computersystems.
Insbesondere ist die Aufgabe gelöst durch das Verfahren mit den im Patentanspruch 1 beschriebenen Merkmalen. Dabei ist vorteilhaft, daß durch die Anordnung der untypisierten Implementierungsklassen in einer zweiten polymorphen Klassenhierarchie die Trennung der untypisierten Implementierungsklassen, die virtuelle Funktionen aufweisen, von den typisierten Schnittstellenklassen, die Templateklassen aufweisen, eine vollständige Trennung von Templateklassen und virtuellen Funktionen erreicht wird.
Weiterhin ist vorteilhaft, daß Methodenaufrufe gegen die typisierten Schnittstellenklassen an die Implementierungsklassen delegiert werden, da hierdurch die meisten Funktionen sehr knapp aber dennoch vollständig gehalten werden können. Unter der Delegation versteht man in diesem Zusammenhang insbesondere eine Weiterleitung oder Überbrückung der Methoden- beziehungsweise Funktionsaufrufe an die Implementierungsklassen. Dadurch ist es vorteilhaft möglich diese Funktionen als sogenannte Inline-Funktionen während des Compilierungsvorganges direkt in den aufrufenden Quellcode einzubinden.
Weiterhin ist vorteilhaft, daß aufgrund der erfindungsgemäßen Trennung von typisierten Schnittstellenklassen mit Templateklassen und untypisierten Implementierungsklassen mit virtuellen Funktionen die Verwendung von Templateklassen nahezu keinen Einfluß mehr auf den Umfang des ausführbaren Computerprogrammes haben, da sie in ihrer Auswirkung auf den Programmumfang nun einem unparametrisierten Funktionsaufruf sehr ähnlich sind. Dieser Vorteil gewinnt an Bedeutung bei der Verwendung der Implementierungsklassen in einer Shared Library oder einer Dynamic Link Library (DLL).
In einer Ausgestaltung weist die Erfindung die Merkmale des Patentanspruches 2 auf. Die Verwendung von abstrakten Klassenhierarchien und Templateklassen ist gerade bei der Implementierung von Containerklassen weit verbreitet und läßt dabei das dieser Erfindung zugrundeliegende Problem in seiner vollen Tragweite in Erscheinung treten. Es ist vorteilhaft, daß durch die Anwendung des erfindungsgemäßen Verfahrens gerade bei der Verwendung von Containerklassen der Umfang des Computerprogrammes erheblich und sehr effektiv reduziert werden kann.
In einer weiteren Ausgestaltung weist die Erfindung die Merkmale des Patentanspruches 3 auf. Dabei ist vorteilhaft, daß die Reduktion des Umfanges des ausführbaren Computerprogrammes besonders zum Tragen kommt, wenn bei der Erstellung dem Computerprogrammes auf eine Klassenbibliothek zurückgegriffen wird. Es ist weiterhin vorteilhaft, daß die Anwendung des erfindungsgemäßen Verfahrens auf die Klassen der Bibliothek nur einmal, nämlich zu Beginn, erforderlich ist, und fortfolgend alle Zugriffe auf diese Klassen der Bibliothek von den Vorteilen des erfindungsgemäßen Verfahren bezüglich der Reduzierung des ausführbaren Computerprogrammes profitieren.
In einer weiteren Ausgestaltung weist die Erfindung die Merkmale des Patentanspruches 4 auf; diese Ausgestaltung ist für die Programmiersprache C++ spezifiziert. Dabei ist vorteilhaft, daß die Programmiersprache C++ gegenwartig eine hohe Bekanntheit besitzt und eine weite Verbreitung findet. Die Erfindung ist vorteilhafterweise auch für die Programmiersprache C++ und damit für einen großen Anteil der in der Praxis existenten Probleme anwendbar.
Mehr noch: Einige der oben angeführten technischen Ausdrücke wie "virtuelle Funktionen" oder "Templateklassen" sind zwar in ihrem Bedeutungsgehalt für alle objekt-orientierten Programmiertechniken gültig, aber in dieser sprachlichen Ausprägung der Programmiersprache C++ entlehnt; dies dient jedoch lediglich einer leichteren Verständlichkeit des Lösungsgedanken und bedeutet insbesondere keine Einschränkung der allgemeinen Gültigkeit und Anwendbarkeit der erfindungsgemäßen Lösung auf die zugrundeliegende Aufgabe.
In einer weiteren Ausgestaltung weist die Erfindung die Merkmale des Patentanspruches 5 auf. Unter dem Compilieren versteht man in der Regel das Umwandeln von Quellenanweisungen, die in einer nichtmaschinenorientierten Programmiersprache abgefaßt worden sind, in Zielanweisungen einer maschinenorientierten Programmiesprache. Dabei ist vorteilhaft, daß die meisten Funktionen beim Compilieren direkt als Inline-Funktionen in das maschinenorientierte Computerprogramm übersetzt werden können. Dadurch kann vorteilhafterweise die Erstellung und Verwaltung von Sprungbefehlen und Sprungadressen entfallen, und sowohl die Abspeicherung als auch die Abarbeitung des ausführbaren Computerprogrammes erfolgt mit höherer Geschwindigkeit und/oder erfordert weniger Aufwand hinsichtlich der Computer- Hardware.
In einer weiteren Ausgestaltung weist die Erfindung die Merkmale des Patentanspruches 6 auf. Die in diesem Patentanspruch offenbarte Erfindung beinhaltet insbesondere auch die Merkmale der Patentansprüche 2 bis 4 mit den zugehörigen und bereits diskutierten Vorteilen. Die in diesen Patentansprüchen offenbarte Erfindung zielt insbesondere ab auf die Verwendung des erfindungsgemäßen Verfahrens für die Erstellung einer Klassenbibliothek für eine objekt-orientierte Programmiersprache.
Ebenso gelten für den im Patentanspruch 7 beschriebenen Datenträger die Vorteile, die bereits zu dem zugehörigen Verfahren genannt wurden.
Die im Patentanspruch 8 offenbarte erfinderische Verwendung einer Delegation für die Delegation von Methodenaufrufen gegen eine typisierte Schnittstellenklasse an eine untypisierte Implementierungsklasse, die virtuelle Funktionen aufweist, ist der entscheidende Gedanke für die Lösung der dieser Erfindung zugrundeliegenden Aufgabe. Durch diese Verwendung wird die Befreiung der Schnittstellenklasse von den virtuellen Funktionen erst möglich und damit alle vorgenannten Vorteile der Erfindung und ihrer Ausgestaltungen.
Figurenbeschreibung
Ein Ausführungsbeispiel der Erfindung ist in den Zeichnungen dargestellt und wird nachfolgend näher beschrieben.
Fig. 1 zeigt eine Darstellung des erfindungsgemäßen Verfahrens in Form eines Ablaufdiagrammes,
Fig. 2 zeigt eine stark vereinfachte Klassenhierarchie,
Fig. 3 zeigt eine Tabelle der virtuellen Funktionen,
Fig. 4 zeigt eine stark vereinfachte Klassenhierarchie mit einer parametrisierten Klasse,
Fig. 5 zeigt die Möglichkeit des Common Code Approach zur Reduzierung des Umfanges des Computerprogrammes,
Fig. 6 zeigt die horizontale Separation von Schnittstellenklassen und Implementierungsklassen,
Fig. 7 zeigt die erfindungsgemäße vertikale Separation von Schnittstellenklassen und Implementierungsklassen, und
Fig. 8 zeigt die beiden parallelen Klassenhierarchien gemäß der vorliegenden Erfindung.
Die Fig. 1 zeigt eine Darstellung des erfindungsgemäßen Verfahrens in Form eines Ablaufdiagrammes. In einem ersten Verfahrensschritt werden die gemeinsamen Anteile in den parametrisierten Templateklassen ermittelt. Anschließend erfolgt eine Trennung der gemeinsamen Anteile als untypisierte Implementierungsklassen von den nicht gemeinsamen Anteilen als typisierte Schnittstellenklassen mit parametrisierten Templates, wobei die typisierten Schnittstellenklassen keine virtuellen Funktionen aufweisen. In einem weiteren Verfahrensschritt werden die untypisierten Implementierungsklassen in einer polymorphen Klassenhierarchie angeordnet. Abschließend werden die Methodenaufrufe gegen die Schnittstellenklassen an die Implementierungsklassen delegiert.
Eine stark vereinfachte Klassenhierarchie ist in der Fig. 2 dargestellt. Die Klasse Base 201 mit den beiden Funktionen foo und bar ist in diesem Beispiel eine übergeordnete Klasse, wogegen die Klasse Derived 202 mit den beiden Funktionen foo und zak eine abgeleitete Klasse darstellt. Das polymorphe Verhalten einer abstrakten Klasse wird durch virtuelle Funktionen erreicht. Im vorliegenden Beispiel der Fig. 2 ist beispielsweise die Funktion bar als eine virtuelle Funktion deklariert, da die Klasse Base annimmt, daß eine von der Klasse Base abgeleitete Klasse unterschiedliche Implementierungen der Funktion bar vornehmen könnte. Man spricht in diesem Fall davon, daß die Klasse Derived von der Klasse Base die Funktion bar erbt 203.
Für die Programmiersprache C++ lautet der zur Fig. 2 gehörende Quellcode:
Wenn andererseits alle Klassen, die von der Klasse Base abgeleitet werden, eine abstrakte Funktion mit ihrer eigenen spezifischen Implementierung überschreiben sollen, wird diese Klasse als "pure virtual" bezeichnet. Im obigen Beispiel ist die Funktion foo eine solche pure virtual Funktion.
Ferner ist in der Fig. 2 dargestellt, daß die Klasse Derived von der Klasse Base die virtuelle Funktion bar lediglich erbt, insbesondere diese virtuelle Funktion nicht überschreibt, eine eigene Implementierung für die pure virtual Funktion foo bereitstellt und ihrerseits eine weitere virtuelle Funktion zak hinzufügt, die von den von der Klasse Derived abgeleiteten Klassen geerbt oder überschrieben werden kann.
Jedes Objekt, das mindestens eine virtuelle Funktion aufweist, besitzt einen sogenannten Zeiger, der auf eine Tabelle der virtuellen Funktionen verweist. Diese Tabelle der virtuellen Funktionen beinhaltet die Startadressen aller virtuellen Funktionen, ungeachtet ob die virtuelle Funktion in der Klasse des Objektes selbst definiert wurde oder in einer der übergeordneten Klassen definiert wurde.
Die Fig. 3 zeigt eine solche Tabelle der virtuellen Funktionen 301. Das Objekt 302 der Klasse Derived besitzt einen Zeiger 303, der auf die Tabelle der virtuellen Funktionen 301 verweist. In der Tabelle der virtuellen Funktionen 301 stehen die Adressen aller virtuellen Funktionen und damit die Verweise an die Einsprungadressen zu diesen Funktionen. Im vorliegenden Beispiel beinhaltet die Tabelle der virtuellen Funktionen 301 die Adresse 304 mit dem Verweis 305 auf die virtuelle Funktion Derived::foo(), die Adresse 306 mit dem Verweis 307 auf die virtuelle Funktion Base::bar() und die Adresse 308 mit dem Verweis 309 auf die virtuelle Funktion Derived::zak().
Eine Containerklasse beläßt in der Regel seine Elementtypen und Schlüsseltypen als formale Parameter für spätere Ausprägungen. Dadurch wird beispielsweise ein Set von STRINGs abgegrenzt von einem Set von INTEGERs. Da die zugehörigen Funktionen das Instanziierungsargument beziehungsweise die Instanziierungsargumente annehmen, kann eine INTEGER-Größe nicht zu einem Set von STRINGs hinzuaddiert werden und umgekehrt. Für jede Ausprägung wird daher der Programmcode für eine add Funktion dupliziert. Zusammen mit der Polymorphisierung der Klassenhierarchie durch virtuelle Funktionen entsteht dadurch das Anwachsen des Umfanges des Computerprogrammes.
Aufgrund der virtuellen Funktionen der Klasse Base wird die nachfolgend dargestellte Templateklasse mit allen ihren virtuellen Funktionen ausgeprägt, auch und gerade dann, wenn die Klasse DerivedTemplate nie polymorph verwendet wird. Dies ist in der Fig. 4 dargestellt. Die Klasse Base 401 vererbt 403 an die Templateklasse DerivedTemplate 402 die "pure virtual" Funktion foo sowie die virtuelle Funktion bar. Die Templateklasse DerivedTemplate 402 fügt ihrerseits die virtuelle Funktion zak hinzu. Der zugehörige C++ Quellcode ist nachfolgend dargestellt:
Dies wird verursacht, weil der Compiler die Einsprungadressen der virtuellen Funktionen in die Tabelle der virtuellen Funktionen eintragen muß.
In der Fig. 5 ist eine Möglichkeit der Reduzierung des Umfanges des Programmes dargestellt, nämlich die Herausarbeitung von gemeinsamen Teilen aller Ausprägungen der Templateklassen 503. Dieser gemeinsame Anteil ist untypisiert, beispielsweise vom Typ void*; er wird neben der ursprünglichen Basisklasse 501 als separate Basisklasse 502 für die konkrete Templateklasse 503 vorgehalten. Damit erbt die Templateklasse 503 den polymorphen Charakter von der ursprünglichen Basisklasse 501 und die Implementierung aus der separaten Basisklasse 502.
Nachfolgend ist der zugehörige C++ Quellcode dargestellt:
Diese Verfahren ist als Common Code Approach bekannt und kann als horizontale Separation 603 von typisiertem Quellcode in Schnittstellenklassen 602 und untypisiertem Quellcode in Implementierungsklassen 601 betrachtet werden und ist schematisch in der Fig. 6 dargestellt.
Im Gegensatz zum Common Code Approach leistet die vorliegende Erfindung eine vertikale Separation 703 der Schnittstellenklassen und der Implementierungsklassen wie in der Fig. 7 dargestellt. Dabei werden die typisierten Schnittstellenklassen 702 von den untypisierten Implementierungsklassen 701 separiert, wobei die typisierten Schnittstellenklassen keine virtuellen Funktionen mehr aufweisen. Die Eigenschaften "typisiert" und "virtuell" sind vollständig separiert. Da die Funktionen der Schnittstellenklassen ihre Funktionalität erhalten, indem sie einfach den Methodenaufruf delegieren, können diese Funktionen als Inline-Funktionen direkt in den aufrufenden Quellcode übernommen werden. Die Schnittstellenklassen und die Implementierungsklassen weisen typischerweise zwei parallele Hierarchien auf.
In der Fig. 8 ist dargestellt, wie die Klasse Base 801 Funktionen an die Templateklasse DerivedTemplate 803 vererbt 805, allerdings nicht mehr polymorph, sondern die Funktionen foo () und bar () können nun als Inline-Funktionen in das Computerprogramm übernommen werden. Die Funktions- oder Methodenaufrufe gegen die Klasse Base 801 werden nun an die Objekte der Klasse BaseImpl 802 gemäß der Information in dem Datenfeld ivImpl 806 delegiert. Die Klasse BaseImpl 802 vererbt 807 polymorph die Funktionen, beispielsweise die "pure virtual" Funktion foo, an die Klasse DeriveImpl 804, deren Objekte wiederum von der Templateklasse DerivedTemplate 803 instanziiert 808 werden.
Im nachfolgenden Beispielcode ist eine Schnittstelle und ihre zugehörige Implementierung dargestellt, beide in Form einer zweistufigen Klassenhierarchie:
Die Funktion, beispielsweise DerivedTemplate<AType<::zak() wird nur ausgeprägt und in den Programmcode gebunden, wenn mindestens ein Aufruf dieser Funktion vorliegt. Da die Klasse DerivedTemplate den Aufruf lediglich an die Klasse DerivedImpl delegiert, ist der Codeumfang für die Funktion DerivedTemplate<AType<::zak() im wesentlichen gleich dem Codeumfang für eine Non-Templateklasse.

Claims (8)

1. Verfahren zur Reduzierung des Umfanges von Computerprogrammen, wobei
die Computerprogramme mittels einer objekt-orientierten Programmiertechnik erstellt werden,
die objekt-orientierte Programmiertechnik Klassen und Objekte aufweist,
die objekt-orientierte Programmiertechnik eine erste polymorphe Klassenhierarchie aufweist, und
die objekt-orientierte Programmiertechnik parametrisierte Templateklassen (503) aufweist,
wobei das Verfahren folgende Schritte aufweist:
Ermitteln 101 von gemeinsamen Anteilen in den parametrisierten Templateklassen (503), und
Trennen 102 der
gemeinsamen Anteile als untypisierte Implementierungsklassen (802)
von den
nicht gemeinsamen Anteilen als typisierte Schnittstellenklassen mit parametrisierten Templates (803),
gekennzeichnet dadurch, daß das Verfahren zusätzlich folgende Schritte aufweist:
Anordnen 105 der untypisierten Implementierungsklassen (802) in einer zweiten polymorphen Klassenhierarchie, und
automatisches Delegieren 106 von Methodenaufrufe gegen die Schnittstellenklassen an die Implementierungsklassen (802).
2. Das Verfahren nach Patentanspruch 1, wobei das Computerprogramm Containerklassen aufweist.
3. Das Verfahren nach Patentanspruch 1 oder 2, wobei die Erstellung der Computerprogramme unter Verwendung von Klassenbibliotheken erfolgt.
4. Das Verfahren nach einem der Patentansprüche 1 bis 3, wobei
die objekt-orientierte Programmiertechnik die C++ Programmiersprache aufweist,
die C++ Programmiersprache das Konstrukt einer virtuellen Funktion aufweist,
die Polymorphisierung der Klassenhierarchie durch die virtuellen Funktionen realisiert wird, wobei
lediglich die untypisierten Implementierungsklassen (802) virtuelle Funktionen aufweisen.
5. Das Verfahren nach einem der Patentansprüche 1 bis 4, wobei beim Compilieren die delegierenden Funktionen automatisch als Inline-Funktionen in das Computerprogramm übersetzt werden.
6. Verwendung des Verfahren nach einem der Patentansprüche 1 bis 5 für die Erstellung einer Klassenbibliothek für eine objekt-orientierte Programmiersprache.
7. Ein Datenträger, der eine Klassenbibliothek für eine objekt-orientierte Programmiertechnik speichert, dadurch gekennzeichnet, daß die Klassenbibliothek gemäß dem Verfahren nach einem der Patentansprüche 1 bis 5 erstellt wurde.
8. Verwendung einer automatischen Delegation für die Weiterleitung von Methodenaufrufen gegen eine typisierte Schnittstellenklasse an eine untypisierte Implementierungsklasse mit virtuellen Funktionen.
DE19535519A 1995-09-25 1995-09-25 Verfahren zur Reduzierung des Umfanges von Computerprogrammen Expired - Fee Related DE19535519C2 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE19535519A DE19535519C2 (de) 1995-09-25 1995-09-25 Verfahren zur Reduzierung des Umfanges von Computerprogrammen
US08/697,972 US5901314A (en) 1995-09-25 1996-09-03 Method for reducing the size of computer programs
JP8250428A JPH09231077A (ja) 1995-09-25 1996-09-20 コンピュータプログラムのサイズを縮小する方法

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
DE19535519A1 true DE19535519A1 (de) 1997-03-27
DE19535519C2 DE19535519C2 (de) 1999-03-04

Family

ID=7773060

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19535519A Expired - Fee Related DE19535519C2 (de) 1995-09-25 1995-09-25 Verfahren zur Reduzierung des Umfanges von Computerprogrammen

Country Status (3)

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

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1157330A1 (de) * 1999-02-03 2001-11-28 Gates, William H., III Verfahren und system zum implementieren von virtuellen funktionen von schnittstellen
US6427311B1 (en) 1998-10-20 2002-08-06 Adcock Technology Limited Method of manufacturing spindle components

Families Citing this family (15)

* 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
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
US6560770B1 (en) * 1999-05-25 2003-05-06 Oracle Corporation Extending the attributes of an application generated using a fourth generation programming tool
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
WO2012077302A1 (ja) * 2010-12-09 2012-06-14 日本電気株式会社 モデル編集支援装置、モデル編集支援方法およびモデル編集支援プログラム
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 삼성전자주식회사 응용프로그램의 관리 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4131380A1 (de) * 1991-09-20 1993-03-25 Siemens Ag Verfahren zur adaption einer objektorientierten applikation

Family Cites Families (8)

* 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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4131380A1 (de) * 1991-09-20 1993-03-25 Siemens Ag Verfahren zur adaption einer objektorientierten applikation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Design & Elektronik 14/15, 18.7.95, S. 40 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427311B1 (en) 1998-10-20 2002-08-06 Adcock Technology Limited Method of manufacturing spindle components
EP1157330A1 (de) * 1999-02-03 2001-11-28 Gates, William H., III Verfahren und system zum implementieren von virtuellen funktionen von schnittstellen

Also Published As

Publication number Publication date
US5901314A (en) 1999-05-04
JPH09231077A (ja) 1997-09-05
DE19535519C2 (de) 1999-03-04

Similar Documents

Publication Publication Date Title
DE19535519C2 (de) Verfahren zur Reduzierung des Umfanges von Computerprogrammen
EP0502857B1 (de) Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems
EP0674784B1 (de) Verfahren zum testen mindestens einer klasse eines objektorientierten programmes auf einem rechner
DE10333088A1 (de) Verfahren zum Liefern von Zugriff auf die internen Signale eines dynamischen Systemmodells von außerhalb bezüglich der Modellierungsumgebung
WO1997040442A1 (de) Verfahren und steuereinrichtung für eine graphische steuerung von abläufen in einem netzwerkmanagementsystem
DE19914695A1 (de) System und Verfahren zum Entwickeln eines Codes zur Ausführung durch einen digitalen Signalprozessor
EP0664905B1 (de) Verfahren zur durchfürhung von tests an auf einem rechner parallel ablauffähigen objekten eines objektorientierten programmes
EP1215571A2 (de) Verfahren zur automatischen Softwaregenerierung
EP1235123A2 (de) Addon-Mechanismus für ein Steuerungssystem basierend auf einem Typdatenfeld
EP0708941B1 (de) Verfahren zum test eines objektorientierten programms
EP0662226B1 (de) Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme
EP0560342B1 (de) Verfahren zum Untersuchen des Ablaufs eines in einer Hardware-Beschreibungssprache geschriebenen Programms
DE10128959A1 (de) Addon-Mechanismus für ein Steuerungssystem basierend auf einem Typdatenfeld
EP1221649A2 (de) Addon-Mechanismus für ein Steuerungssystem basierend auf einem Erweiterungsdatenfeld
DE10105729C1 (de) Verfahren und System zur funktionsmäßigen Erweiterung einer Telekommunikationsanlage
DE10109876B4 (de) Verfahren und Einrichtung zum Datenmanagement
EP0568717A1 (de) Computerprogrammgesteuertes Verfahren (Tracing) zur schrittweisen Protokollierung der Ausführung eines Zielprogrammes bezüglich der Aufrufe des Zielprogrammes durch andere Programme
DE102020006057A1 (de) Technik zum Erstellen von Teilen einer Patent- oder Gebrauchsmusteranmeldung
DE102021128101A1 (de) Verfahren zum Erzeugen von Programmcode, Verfahren zum Konfigurieren eines Steuergeräts und Computersystem
EP1044409A2 (de) Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
EP1263246A2 (de) Verfahren zum automatischen Programmieren sowie zugehörige Komponenten
DE102005005125A1 (de) Verfahren zur Bereitstellung einer geschützten Datenschnittstelle
DE10254530A1 (de) Verfahren und System zur wissensbasierten Transformation von textuellen Programmen, die sich auf die Softwarekonfiguration eines verteilten Leitsystems beziehen
WO2001016719A1 (de) Verfahren und anordnung zur übersetzung einer programmeinheit

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
D2 Grant after examination
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee