====== Übertragen von Java-Programmen in die Online-IDE ======
Die Online-IDE deckt einen großen Teil des Java-Sprachumfangs ab ([[unterschiede_zu_java:start|Details siehe hier]]), zudem sind [[https://www.online-ide.de/api_documentation.html|in ihrer Laufzeitbibliothek]] viele Klassen der Java Standard Library nachgebildet. Dadurch ist es möglich, die meisten Java-Programme, die im Informatikunterricht geschrieben wurden, auf einfache Weise in die Online-IDE zu übertragen. \\ \\
Im Folgenden zeige ich, wie man dabei grundsätzlich vorgeht und wie sich auftretende Probleme lösen lassen.
* Grundsätzliches Vorgehen
* ''import''-Statements
* **Hauptprogramm** anstatt manuellem Instanzieren von Objekten
* Verwendung der **Graphics and Games-Bibliothek** des Cornelsen-Verlages
* Verwendung der **Processing**-Bibliothek
* Besondere Klassen der Online-IDE
* Benutzereingaben per Tastatur
* Farbige Ausgabe mit ''print'' und ''println''
* Farben
* Klassen zur Grafikausgabe und Spieleprogrammierung mit der Online-IDE
* Soundausgabe
* Netzwerkprogrammierung
* Zugriff auf Datenbanken
**Nützliche Links:** \\
* [[https://www.online-ide.de/api_documentation.html|JavaDoc-ähnline Übersicht über alle Klassen von LearnJ]]
* [[api:documentation:start|Dokumentation der Klassenbibliothek mit Erklärungen und vielen Beispielprogrammen]]
* [[api:documentation:grafik:start|Dokumentation der Grafikklassen mit Erklärungen und vielen Beispielprogrammen]]
* [[api:documentation:spiele:start|Dokumentation der Möglichkeiten zur Spieleprogrammierung mit vielen Beispielprogrammen]]
===== Grundsätzliches Vorgehen =====
{{ :convert:frombluej:pasted:20230128-185434.png?300}}
Im Beispiel rechts sehen Sie ein BlueJ-Projekt mit vier Klassen und einem Interface.
* 1. Wir legen einen neuen Workspace in der Online-IDE an,
* 2. erstellen für jede der Klassen eine Datei im Workspace und
* 3. kopieren die Quelltexte per Copy-Paste in die Online-IDE \\ //(Tipp: Strg + a markiert den ganzen Text in einer Programmdatei)//
{{ :convert:frombluej:pasted:20230128-203403.png?500 }}
===== Keine packages und keine import-statements in der Online-IDE =====
Um den Schülerinnen und Schülern das Erlernen von Java einfacher zu machen, verzichtet die Online-IDE auf auf das Konzept von packages, entsprechend sind auch keine import-Anweisungen nötig. Alle Klassen eines Workspaces befinden sich - zusammen mit den Systemklassen der Online-IDE - in einem einzigen großen Namensraum. Entsprechend dürfen eigene Klassen leider nicht die Bezeichner von Systemklassen tragen. In solchen Fällen meldet die Online-IDE folgenden Fehler:
{{ :convert:frombluej:pasted:20230128-203845.png?500 }}
Hier hilft nur, der Klasse einen anderen Bezeichner zu geben:
{{ :convert:frombluej:pasted:20230128-204024.png?400 }}
Auch java-Systemklassen können einfach ohne import-Statements verwendet werden:
{{ :convert:frombluej:pasted:20230128-204247.png?400 }}
**Lösung:** import-Statement einfach weglassen.
===== Hauptprogramm anstatt manuellem Instanzieren von Objekten =====
In BlueJ startet man ein Programm üblicherweise, indem man per Maus ein Objekt einer Klasse instanziert und dann eine Methode davon aufruft: \\
{{:convert:frombluej:pasted:20230128-204628.png?300 }}
{{ :convert:frombluej:pasted:20230128-204709.png?300}}
Das ist anfangs didaktisch ganz sinnvoll, mit der Zeit aber recht anstrengend und hemmt den Entwicklungsprozess. In der Online-IDE gibt es daher die Möglichkeit, ein Hauptprogramm zu schreiben, mit dem man seine Klassen testen kann:
{{ :convert:frombluej:pasted:20230128-205311.png?600 }}
Für das Hauptprogramm gelten folgende Regeln:
* Grundsätzlich gelten alle Anweisungen, die außerhalb von Klassendefinitionen stehen, als Hauptprogramm. Das Hauptprogramm kann also einfach zusammen mit einer Klasse in einer Datei stehen.
* Beim Klick auf den Startbutton wird das Hauptprogramm aus einer der Dateien des Workspaces gestartet. Die Datei wird wie folgt ermittelt:
- Hat die gerade geöffnete Datei ein Hauptprogramm, so wird dieses gestartet.
- Hat sie keines, so wird das zuletzt gestartete Hauptprogramm wieder gestartet.
- Gibt es auch kein zuletzt gestartetes Hauptprogramm, so wird in allen Klassen des Workspace nach einem Hauptprogramm gesucht und das erste gefundene gestartet.
Hat ein Workspace also nur ein einziges Hauptprogramm, so wird immer genau dieses gestartet.
===== Kein Exception Handling in der Online-IDE =====
Der Sprachumfang der Online-IDE umfasst kein Exception Handling. Daher müssen bei der Übertragung von Java-Programmen in die Online-IDE alle ''throws''-Deklarationen sowie die ''try''...''catch''-Rahmen entfernt werden. Der Vorteil dabei ist, dass sich auch die Schüler/innen nicht um Exceptions kümmern müssen, wenn sie mit der Online-IDE programmieren
===== Keine Nebenläufigkeit in der Online-IDE =====
Die Online-IDE kann Programme leider nicht nebenläufig ausführen, d.h. es gibt keine Threads. Java-Programme, die Nebenläufigkeit nutzen (d.h. mehrere Threads instanzieren und starten) können derzeit leider noch nicht in der Online-IDE ausgeführt werden. Ich arbeite gerade an einem neuen Compiler, der u.a. auch Threads ermöglicht, er wird aber vorraussichtlich nicht vor 2024 fertig.
===== Verwendung der Graphics and Games-Bibliothek des Cornelsen-Verlages =====
{{ :convert:frombluej:pasted:20230128-212135.png?600}}
Alle Klassen der Graphics and Games-Bibliothek, also die Klassen
* Zeichenfenster
* Rechteck
* Dreieck
* Kreis
* Turtle (Online-IDE: GTurtle)
* Figur
* Text (Online-IDE: GText)
* Ereignisbehandlung
sind in der Online-IDE bereits Bestandteil der Systembibliothek und müssen nicht von BlueJ her herüberkopiert werden. Dafür muss die Graphics and Games-Bibliothek je Workspace aber einmalig aktiviert werden:
{{ :convert:frombluej:pasted:20230128-212503.png?200}}
* Rechtsklick auf den Workspace -> Einstellungen
* Häkchen bei der Graphics and Games-Bibliothek setzen
* Mit Klick auf OK bestätigen.
{{ :convert:frombluej:pasted:20230128-212605.png?600 }}
==== Anpassen von Klassenbezeichnern ====
Da die Online-IDE nur einen Namensraum für Klassenbezeichner hat und die Bezeichner ''Text'' und ''Turtle'' bereits vergeben waren, heißen die entsprechenden Klassen der Graphics and Games-Bibliothek in der Online-IDE ''GText'' und ''GTurtle''. Entsprechende Referenzen müssen beim Import von Projekten in die Online-IDE also geändert werden.
==== Nützliche Links zur Graphics and Games Bibliothek: ====
* [[https://informatikschulbuch.de/jahrgangsstufe-9-uebersicht/objektorientierte-modellierung-und-programmierung/ |Vorlagen für alle Aufgaben aus dem Cornelsen-Buch für Jgst. 9 (Vorlagen von Herrn Horzella für die Online-IDE etwas weiter unten auf der Seite)]]
* [[https://informatikschulbuch.de/jahrgangsstufe-10/objektorientierte-modellierung-und-programmierungjgst10/ |Vorlagen für alle Aufgaben aus dem Cornelsen-Buch für Jgst. 10 (Vorlagen von Herrn Horzella für die Online-IDE etwas weiter unten auf der Seite, sind Stand 28.01.2023 noch in Arbeit)]]
* [[api:documentation:gng:start|Dokumentation zur Graphics'n Games-API des Cornelsen-Verlages]]
===== Verwendung des Processing-Frameworks =====
In der Online-IDE ist fast das komplette Processing-Framework enthalten (Klasse ''PApplet''). Wie es in der Online-IDE verwendet werden kann [[api:documentation:processing:start|ist hier beschrieben.]] \\
Processing-Programmen in der Programmiersprache Java bestehen üblicherweise aus der Definition einer Kindklasse von ''PApplet''. Diese kann man einfach in die Online-IDE übernehmen und muss sie nur noch mit einem Einzeiler-Hauptprogramm vor der Klassendefinition ergänzen, siehe das folgende Beispiel:
===== Besondere Klassen in der Online-IDE =====
Da Java vor allem serverseitig verwendet wird, sind die Textein und -ausgabe sowie die Grafikprogrammierung in der Java Standard Library nicht besonders gut unterstützt. Daher hat die Online-IDE dafür eigene Klassen, die es Schüler/innen besonders einfach machen:
* [[api:documentation:ein_ausgabe:start|Texteingabe und Textausgabe]]
* [[api:documentation:grafik:start|Klassen zur Grafikausgabe]]
* [[api:documentation:spiele:start|Spieleprogrammierung mit der Online-IDE]]
* [[api:documentation:robot:start|Die Klasse Robot (ähnlich zu Robot Karol)]]
* [[api:documentation:netzwerk:start|Netzwerkprogrammierung/Netzwerkspiele]]
* [[api:documentation:database:start|Datenbankverbindung zur SQL-IDE hin]]
* [[api:documentation:spiele:sound|Soundausgabe]]
* [[api:documentation:start|Dokumentation der gesamten Klassenbibliothek]]