Entwicklung der Java-8-Unterstützung für Eclipse

Seite 3: Fazit

Inhaltsverzeichnis

Auch nach der Verschiebung des Release-Datums im letzten Jahr war die Arbeit an Java 8 ein ehrgeiziges Unterfangen. Die Konkurrenz zwischen javac und ECJ ist eine wichtige Triebkraft für die Verbesserung von Java. Hierbei war das letzte Quartal 2013 die spannendste Phase: In diesem vergleichsweise kurzen Zeitfenster war die Spezifikation vollständig genug, um sie zu implementieren, und es war noch Gelegenheit, Schwachstellen aufzudecken, die zu Verbesserungen in der nächsten Version führten. Auch wenn sich insbesondere im Punkt Raw Types keine vollständige Übereinstimmung der Compiler erreichen ließ, hat die Spezifikation eine hohe Qualität erreicht.

Für den Benutzer von Java 8 lassen sich erhebliche Verbesserungen bei zwei zentralen Konzepten verbuchen: Algorithmen und Typen. Wer einen hohen algorithmischen Anteil in seinen Programmen hat, wird aus Lambda-Ausdrücken und den darauf ausgerichteten Erweiterungen der Bibliotheken großen Nutzen ziehen. Wer das Programmieren in Java sicherer machen will, wird finden, dass ein reiches Typsystem viele Probleme lückenlos beim Kompilieren aufdecken kann. ECJ nutzt das am Beispiel der Nullpointer-Analysen.

Interessanterweise hat Java 8 demgegenüber keine Neuerung für eine zentrale Frage der objektorientierten Softwareentwicklung: Wie verbindet man einzelne Klassen und Objekte zu einem System? In Java kann ein Objekt (Instanz) eine Referenz auf ein anderes Objekt halten, aber es gibt kaum Unterstützung, in einem Graph von Millionen von Objekten zur Laufzeit sinnvolle Strukturen aufrechtzuerhalten. Blickt man auf Klassen, gibt es nur ein weiteres Prinzip: die viel kritisierte Vererbung.

Es ist nicht abzusehen, dass Java in diesem Bereich grundlegende Innovationen einführt, aber es gibt Alternativen. Im Rahmen des Object-Teams-Projekts (seit 2010 ein Eclipse-Projekt) wurde die Sprache Java zu OT/J erweitert, das drei neue Konzepte einführt:

  • Sogenannte Rollenobjekte lassen sich dynamisch einem Objekt zuordnen und können dieses spezialisieren. Hiermit lässt sich das Verhalten eines Systems zum Beispiel situativ anpassen.
  • Rollenobjekte werden in einem sogenannten Teamobjekt zusammengefasst, wobei diese Teams eine weitaus stärkere Kapselung erreichen, als sie in reinem Java möglich ist. Durch sie wird die große Flexibilität von Rollen einfach beherrschbar.
  • Teams unterstützen Vererbung im großen Stil: Das gesamte Modul, das ein Team und seine Rollen implementiert, lässt sich in einem Schritt systematisch und konsistent spezialisieren. Dabei lassen sich nicht nur Methoden der Teamklasse überschreiben, sondern auch die enthaltenen Rollenklassen und deren Methoden.

OT/J ist vollständig auf Java 8 migriert. Das bevorstehende Release (25. Juni) unterstützt dann Neuerungen in allen Bereichen: Algorithmen, Objekte und Typen. Dabei ergänzen sich Lambdas und Rollen hervorragend, denn beide bringen jeweils ein weiteres, unabhängiges Grundprinzip der Informatik in die Welt der objektorientierten Programmierung: Mit Lambda-Ausdrücken bekommen Funktionen den Rang von First-class-Objekten. Mit Rollen lassen sich Sichten auf Objekte definieren. Das heißt, es wird möglich, kontextabhängige Objekte zu bauen. Somit lässt sich sagen: Auch 2014 hat die Objektorientierung noch nicht an Kraft verloren, vielleicht ist sie gerade erst dabei, wirklich mit Leben gefüllt zu werden. Und das solide gemeinsame Fundament ist und bleibt ein konsistentes und ausdrucksmächtiges Typsystem.

Natürlich bleibt JDT ausschließlich der Sprache Java verpflichtet. Neben dem aktualisierten ECJ finden sich viele neue Features in der IDE, wie eine automatische Umwandlung anonymer Klassen in Lambda-Ausdrücke. Weitere, für den Benutzer sichtbare Features sind in Eclipse 4.4 enthalten. Eclipse war, ist und bleibt durch Compiler und IDE ein wichtiger Player in der Weiterentwicklung von Java.

Stephan Herrmann
promovierte 2002 im Fachgebiet Softwaretechnik an der Technischen Universität Berlin. Die Programmiersprache OT/J wurde an der TUB unter seiner Leitung entwickelt und später als Eclipse-Projekt etabliert. Seit 2010 arbeitet er für GK Software, wo er Mitglied des FutureLab ist. Seitdem ist er auch JDT-Committer.

(ane)