DE19535519A1 - Verfahren zur Reduzierung des Umfanges von Computerprogrammen - Google Patents
Verfahren zur Reduzierung des Umfanges von ComputerprogrammenInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
Description
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.
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.
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.
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.
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.
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).
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.
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.
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)
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)
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)
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)
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 |
-
1995
- 1995-09-25 DE DE19535519A patent/DE19535519C2/de not_active Expired - Fee Related
-
1996
- 1996-09-03 US US08/697,972 patent/US5901314A/en not_active Expired - Lifetime
- 1996-09-20 JP JP8250428A patent/JPH09231077A/ja active Pending
Patent Citations (1)
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)
Title |
---|
Design & Elektronik 14/15, 18.7.95, S. 40 * |
Cited By (2)
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 |