89 research outputs found
Konzepte der persistenten Programmiersprache PLEX
Zu einem objektorientierten Datenbanksystem (OODBMS) gehört eine Programmiersprache zur Methoden-Implementierung und Anwendungsentwicklung. Existierende objektorientierte Programmiersprachen sind dafür nicht geeignet, da sie zum einen Persistenz, zum anderen das Datenmodell des Datenbanksystems nicht berücksichtigen. Neben diesen Datenbank-spezifischen Anforderungen haben auch existierende objektorientierte Programmiersprachen noch einige Schwachpunkte, die bei einer Neu-Konzeption vermieden werden können. Für das OODBMS OSCAR wird im Moment die Programmiersprache PLEX konzipiert, aus der Menge der Konzepte sollen hier zwei vorgestellt werden: Migratoren und Signatur-Varianz
Design of modern numerical libraries on the examle of SG++
SG++ ist eine in C++ geschriebene Numerikbibliothek, die umfangreiche Anwendungsmöglichkeiten bietet. Basierend auf dünnen Gittern können mit SG++ Probleme in der Finanzmathematik und im Data-Mining, als auch partielle Differenzialgleichungen gelöst werden. Dabei steht die Effizienz der Berechnungen im Vordergrund. Diese Arbeit befasst sich jedoch mit der effizienten Verwendung und der Softwarequalität der Bibliothek. Es wird definiert, was eine gute Programmierschnittstelle ausmacht und welche Techniken und Konzepte zur Umsetzung verwendet werden können. Anschließend wird ein Refactoring der Bibliothek SG++ durchgeführt, damit es den aufgestellten Richtlinien entspricht und es wird erklärt, welche Vorteile die umgestaltete Bibliothek von Benutzersicht bietet. Laufzeittests verdeutlichen, welche Auswirkungen die Änderungen auf die Performance haben. Zusätzlich wird die Unterstützung weiterer Schnittstellen für andere Sprachen untersucht. Hier wird speziell auf Python und Java eingegangen und der zusätzliche Rechenaufwand gemessen, den die beiden Sprachen beim Aufrufen von C++-Funktionen benötigen
Entwurf und Implementierung effizienter Objektsysteme für funktionale und imperative Programmiersprachen am Beispiel von Lisp
Bisherige Objektsysteme funktionaler und imperativer Programmiersprachen weisen eine Lücke auf. Aus der funktionalen Tradition wurde das ausdrucksstärkste Objektsystem CLOS entwickelt, das insbesondere durch sein Metaobjektprotokoll hervorsticht, dessen Performanz aber zu wünschen übrig läßt. Auf der anderen Seite zeichnet sich C++ als besonders effizient aus, unterstützt aber zentrale Konzepte objektorientierter Programmierung wie Spezialisieren und Generalisieren von Objektklassen nur unzureichend, was abgeschwächt auch für Java gilt. In dieser Arbeit wird am Beispiel von Lisp gezeigt, wie man effiziente Objektsysteme unter Berücksichtigung des Verursacherprinzips so entwirft und implementiert, daß einfache Konstrukte keinen Overhead durch die Präsenz aufwendiger Konzepte, wie des Metaobjektprotokolls oder des Redefinierens von Klassen, mittragen müssen. Entgegen bisherigen Annahmen wird hier erstmals nachgewiesen, daß diese Konzepte auch ohne Quellcodeinterpretation bzw. -kompilation zur Laufzeit realisiert und somit auch in traditionellen, compiler-orientierten Programmiersprachen, wie Ada, Pascal, Eiffel, C++ und natürlich Java, unterstützt werden können.Up to now a gap is evident in object systems of functional and procedural programming languages. The most expressive object system developed in the family of functional languages is CLOS with its outstanding metaobject protocol. Its performance, however, does not meet the users' needs. In the family of procedural languages the most efficient object system developed is C++. But its support of central concepts of object-oriented programming, such as specialization and generalization of object classes, is not sufficient. This also applies in some degree for Java. Using Lisp as an example this thesis shows how efficient object systems can be designed and implemented so that simple constructs have no overhead because of the presence of complex concepts such as the metaobject protocol or the redefinition of classes. In contrast to former assumptions, this thesis proofs for the first time that the above mentioned concepts can be realized without embedding an interpreter or an incremental compiler in the run-time environment. Therefore, they can also be supported in traditional compileroriented programming languages such as Ada, Pascal, Eiffel, C++, and Java
Ein System zur Definition und Ausführung von Protokollen für Multi-Agentsysteme
Mit der hier entwickelten Protokollsprache können Multiagenten-Protokolle klar und eindeutig spezifiziert werden. Durch die automatische Code-Generierung aus einer Protokoll-Spezifikation entfällt der fehleranfällige Arbeitsschritt der Implementierung des festgelegten Protokoll-Ablaufs. Das Protokoll-Ausführungs-Systems übernimmt die Steuerung des Ablaufs, erkennt Fehler (z.B. falsche Nachrichten) und überwacht Timeout-Fristen. Ein Programmierer muss nach der Festlegung eines Protokolls lediglich den Code für die anwendungsabhängigen Abläufe (Anwendungs-Prozeduren) und die Agentenumgebung (Zugriff auf andere Agenten, Zustellen der Nachrichten) zu Verfügung stellen. Durch die Trennung von Protokoll und Anwendung können so einmal entworfene Protokolle für unterschiedliche Anwendungen verwendet werden, ohne den eigentlichen Protokoll-code zu verändern. Durch dieses System ergibt sich für das Deutsche Forschungszentrum für Künstliche Intelligenz die Möglichkeit, neue Protokolle schneller zu entwickeln und einzusetzen
Grundlagen für die formale Spezifikation modularer zustandsbasierter Systeme
Diese Arbeit stellt Konzepte vor, die im Kontext zustands- oder objektbasierter Systeme die gemeinsame Behandlung von Implementierungssprachen und Spezifikationssprachen gestatten. Sie befaßt sich zum einen mit der formalen Definition einer Programmiersprache und zum anderen mit dem Entwurf einer Spezifikationssprache, die auf die Programmiersprache ausgerichtet ist. Abhängigkeiten zwischen diesen beiden Aspekten werden herausgearbeitet. Die Definition beider Sprachen erfolgt auf einem eigenständigen Berechnungsmodell, einer formal definierten abstrakten Maschine, zur Modellierung des Verhaltens von Objekten. Erweiterungen des Berechnungsmodells, die Rekursion, Verschachtelung von Programmeinheiten oder Typfragen betreffen, werden vorgestellt. Zur Spezifikation zustandsbasierter Systeme wird dynamische Logik, eine Erweiterung einer Prädikatenlogik erster Stufe, die Zustände explizit macht, eingesetzt. Mit Hilfe der dynamischen Logik kann das Verhalten von Objekten abstrakt beschrieben werden. Ein Beweissystem für die Logik wird definiert, mit dem auch die Verifikation einer Implementierung bezüglich einer Spezifikation möglich ist. Hierzu wird ein Korrektheitsbegriff definiert, der durch das Beweissystem operationalisiert wird. Zur Beschreibung von modularen Software-Systemen werden formale Parametrisierungs- und Schnittstellenkonzepte erarbeitet. Eine Reihe von Relationen wird definiert, die es ermöglichen, verschiedene Beziehungen zwischen Systemkomponenten zu modellieren. Horizontale und vertikale Entwicklung wird betrachtet
Java Seminarbeiträge
Zusammenstellung der Beitraege des Java-Seminars,
das im Sommersemester 1996 in Form eines Kompakt-Seminars
am Institut fuer Programmstrukturen und Datenorganisation
durchgefuehrt wurde.
Es werden Grundlagen und Spracheigenschaften von Java
behandelt, einschliesslich Threads und Synchronisierung.
Ferner werden die verfuegbaren Klassenbibliotheken
vorgestellt.
Einen weiteren Schwerpunkt des Seminars bilden Bytecode,
Just-In-Time-Uebersetzung und das Sicherheitskonzept von Java.
Randthemen wie die Kombination von Java und CORBA,
die angekuendigte Implementierung von Java in Hardware
und die Vorstellung von EspressoGrinder, eines am IPD
entwickelten Java Uebersetzers, runden das Seminar ab
Java in eingebetteten Systemen
Moderne, objektorientierte Sprachen spielen bei der Entwicklung von
Software für eingebettete Systeme bislang kaum eine Rolle. Die Gründe
hierfür sind vielfältig, meist wird jedoch die mangelnde Effizienz und
der größere Speicherbedarf hervorgehoben.
Obwohl Java viele Eigenschaften hat, die sehr für einen Einsatz in
eingebetteten Systemen sprechen, so hängt doch gerade Java vielfach
immer noch das Vorurteil an, in Systemen mit beschränkter Rechenleistung
und Speicher zu viele Ressourcen zu benötigen.
Diese Arbeit soll dazu beitragen, diese Vorurteile abzutragen. Sie
stellt insbesondere Techniken vor, die den Speicherbedarf einer
JVM so gering wie möglich halten und diese effizient mit der zur
Verfügung stehenden Rechenleistung umgehen lassen. Viele der
dargestellten Verfahren und Algorithmen wurden in der Kertasarie
VM implementiert, einer virtuellen Maschine, die speziell für den
Einsatz in eingebetteten Systemen konzipiert wurde.
Durch die weit verbreitete Vernetzung eingebetteter Systeme über das
Internet stellt sich in vielen Fällen zudem das Problem einer modernen,
abstrakten und effizienten Form der Kommunikation. Aus diesem Grund
liegt der zweite Schwerpunkt dieser Arbeit auf dem Vergleich von
objektorientierten Middleware-Architekturen, insbesondere von
Java-RMI. Auch auf diesem Gebiet wird eine eigene, speziell an
eingebettete Systeme angepasste RMI-Variante vorgestellt.Modern, object oriented languages do not play an important role when developing software for embedded systems. There are many reasons for it, most often an inadequate performance and a greater memory demand are mentioned. In spite of the fact that Java has many features suitable for embedded systems, Java often faces the prejudice to consume too much resources in systems with limited processing power and memory. This work is a contribution to diminish this prejudices. It presents techniques to limit the memory demands of a Java Virtual Machine and to effectively cope with limited computing power. Many of the presented methods and algorithms are implemented in the Kertasarie VM, a JVM designed to run in embedded systems.Due to the fact of increasing network capabilities embedded systems often face the problem of a modern, abstract and efficient communication. Therefore the second emphasis of this work is put on the comparison of object oriented middleware architectures, especially Java-RMI. An own implementation for embedded systems is also presented
- …