KABA Experimentelle Weiterentwicklung der Programmiersprache Java zu Kaba Ein Projekt unter Leitung von Prof. Dr. Horst Hansen Stefan Gehrmann Frank Schubert Denis Gotthans Matthias Rieke Matthias Brzesowsky Andreas Gohr Einleitung Sicheres Java Typensystem E-JAVA Fazit
Gliederung Einleitung Vorstellung der behandelten Themen Fazit Vorgeschlagene Themen Entwicklungsumgebung Vorstellung der behandelten Themen Sicheres Java Typensystem Europäisches JAVA Fazit Einleitung Sicheres Java Typensystem E-JAVA Fazit
Vorgeschlagene Themen Sicheres Rechnen in Java Get/Set Methoden durch Schlüsselworte Trennung von Schnittstelle und Implementierung Neue Threads Rechnen mit physikalischen Einheiten Unveränderbare Objekte Methodenredefinition in Objekten Sicheres Rechnen: Integer-Überläufe durch Exceptions melden Get/Set: ermöglicht standardisierten Zugriff auf Attribute der Objekte Interface-Code Trennung wie bei C++ (.h und .cpp) Neue Threads: Das unabhängige Konzept von Objekten und Threads sollte aufgehoben werden – wegen zu hohem Aufwand abgelehnt Typensystem: Variablen sollen neben einem Wert auch eine Einheit haben der mit verrechnet wird Final: Inhalte von als final deklarierten Objekte sollen nicht mehr verändert werden können, abgelehnt weil keine Zeit Methodenredefinition: Während der Laufzeit sollen Methoden von Objekten verändert werden können, wegen komplexität abgelehnt Einleitung Sicheres Java Typensystem E-JAVA Fazit
Entwicklungsumgebung Projektserver Standort FHTW Projektlabor VG 220 Debian GNU/Linux SSH Zugang für Projektteilnehmer Sourcen von Kaffe und Jikes RVM Die Sourcen der Sun VM haben wir leider nicht kompiliert bekommen Einleitung Sicheres Java Typensystem E-JAVA Fazit
Entwicklungsumgebung BerliOS Service von Fraunhofer Fokus (GMD) http://developer.berlios.de Webbasierte Umgebung Mailingliste CVS Server Dokumentationsverwaltung Aufgabenverwaltung Downloads Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Problem: Fehlerhafte Addition: MAX_INTEGER + 1 = MIN_INTEGER Ziel: MAX_INTEGER + 1 OverflowException Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Lösungsansatz I Datentyp ohne Wertebereichseinschränkung z.B. BigInteger, BigDecimal Vorteil: schnell implementiert Nachteil: sehr langsam Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Lösungsansatz IIa Auslesen des Overflow Flags der CPU Vorrausetzung: Rechenoperation in Assembler Notwendig: JNI – Java Native Interface Vorteil: schnell Nachteil: plattformabhängig Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Lösungsansatz IIb Implementieren der Lösung IIa direkt in VM An KaffeVM versucht Trotz Teilerfolgen an Komplexität der VM gescheitert Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Lösungsansatz III Rechenoperation atomisieren +1; prüfen ob MAX_INTEGER erreicht: Ja Exception; Nein weiter addieren Vorteil: komplett in JAVA implementierbar Nachteil: langsam Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sicheres Java Einleitung Sicheres Java Typensystem E-JAVA Fazit
Rechnen mit phys. Einheiten v= 36km/2h = 5 m/s Konzept: Abbildung im Rechner mit dualem Typsystem möglich, mit implementierungsspezifischem und semantischem Anteil, Notation von Berechnungen als Ausdrücke Implementierungsmöglichkeiten: Erweiterung der Sprache, Änderung VM Klassenbibliothek Inline-Skriptsprache Beinhaltet verschiedenste Erweiterungen zu Java, Typensystem ist nur ein Teil davon Das Typensystem ist sehr einfach zu erweitern -> Einführen von preussischen Meilen in 2 Zeilen Einleitung Sicheres Java Typensystem E-JAVA Fazit
Klassenbibliothek J.A.D.E. Java Addition to Default Environment http://jade.dautelle.com Freie (LGPL) Java Bibliothek Physikalisches Einheitensystem Bekannte Einheiten bereits implementiert Automatische Umrechnung zwischen verschiedenen Einheiten Beinhaltet verschiedenste Erweiterungen zu Java, Typensystem ist nur ein Teil davon Das Einheitensystem ist sehr einfach zu erweitern -> Einführen von preussischen Meilen in 2 Zeilen Einleitung Sicheres Java Typensystem E-JAVA Fazit
J.A.D.E. Beispiel Geschwindigkeitsberechnung: Quantity weg = Quantity.valueOf(„36 km"); Quantity zeit = Quantity.valueOf(„2 h"); Quantity erg = weg.divide(zeit); System.out.println(erg); Gibt die Geschwindigkeit mit der Einheit in m/s aus: 5.0 m/s toString() gibt standardmäßig in SI Einheiten aus, man kann aber auch angeben in welcher Einheit ausgegeben werden soll Einleitung Sicheres Java Typensystem E-JAVA Fazit
Skriptsprache Lua Ursprünglich zum Handling kompl. Konfigurationsdateien Moderne, prozedurale Sprache ähnlich Javascript mit komfortablen Möglichkeit zur Datenbeschreibung In Entwicklung an der PUC Rio de Janeiro seit 1994 für C++ und Java Einbindung des Lua-Interpreter über die Klasse „Luajava“ Zu berechnender Ausdruck kann direkt an Lua-Programm zur Auswertung übergeben werden toString() gibt standardmäßig in SI Einheiten aus, man kann aber auch angeben in welcher Einheit ausgegeben werden soll , Ergebnisse werden in das entsprechende Java Objekt zurückgeschrieben Einleitung Sicheres Java Typensystem E-JAVA Fazit
Beispiel Lua try { API.pushString("s=36km"); API.pushString("t=2h"); API.pushString("s/t"); API.doFile("expr.lua"); } catch (LuaException e) { System.out.println(e); } LuaObject result=API.pop(); String result=getResult(1); // => „5.0 m/s“ toString() gibt standardmäßig in SI Einheiten aus, man kann aber auch angeben in welcher Einheit ausgegeben werden soll , Ergebnisse werden in das entsprechende Java Objekt zurückgeschrieben Einleitung Sicheres Java Typensystem E-JAVA Fazit
Resümee Rechnen mit physikalischen Einheiten Klassenbibliothek JADE: bekannte Maßeinheiten sind schon implementiert neue („Preußische Meilen“) können einfach hinzugefügt werden Negativ: Parser für Ausdrücke ist nicht enthalten Skriptsprache LUA: Datenübergabe und Parser für Ausdrücke leicht implementierbar unabhängig von Programmiersprache Lua Programme können wiederverwendet werden Negativ: Sprache noch in der Entwicklungsphase Einleitung Sicheres Java Typensystem E-JAVA Fazit
Europäisches Java Trennung von Schnittstelle und Implementierung Java hat zwei Sprachmittel um die Schnittstelle eines Objekts zu definieren Das Konzept Interface Zugriffsdeklaration der Methoden (Klasse) Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Sprachmittel der Schnittstelle public interface DoIt { void doIt(); } public class DoSomething public void doSomethingElse() {...} Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Lösungsansatz Idee: Zwang zum Interface Jede public Methode muß in einem Interface deklariert sein public static final Attribute müssen in das Interface Syntax Checker Interface creation tool Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Syntax Checker Basiert auf XJavadoc (XDoclet - Jakarta) Probleme Nachimplementierung und Erweiterung von SUNs JavaDoc Attribute-Oriented Programming Probleme Schlecht dokumentiert Ungewohntes Verhalten Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Interface Generator BeautyJ – Konfigurierbares Java Source Code Formatiertool & Source Code API Probleme: JAR Datei > 1 MByte, da Xerces 2.0 mit eingebunden werden muss undokumentiert Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Zukünftige Erweiterungen default Sichtbarkeit (package private) Sprachliche Ausdrucksformen wie Singleton Konstruktoren Plattform zur Unterstützung von OpenSource Entwicklungen, basiert auf Sourceforge Code Wie haben vor allem Mailingliste, Dokumentationsverwaltung und CVS Server verwendet Einleitung Sicheres Java Typensystem E-JAVA Fazit
Fazit Einsatz verschiedenster Technologien: Assembler JIT LUA Attributorientierte Orientierung Diverse Bibliotheken Einleitung Sicheres Java Typensystem E-JAVA Fazit
Fazit Es ist uns gelungen JAVA in vielfältiger Weise zu erweitern Teile unserer Ideen bereits in .NET realisiert z.B. checked Schlüsselwort um Überläufe zu erkennen Einleitung Sicheres Java Typensystem E-JAVA Fazit