Informatik · Objektorientierte Programmierung

Objektwerkstatt – Hilfe

Orientierung, Bedienung und Sprachumfang.

Zur Werkstatt
Lernsprache, nicht Java-Compiler: Die Objektwerkstatt führt bewusst einen kleinen, Java-ähnlichen Sprachumfang lokal im Browser aus. Es werden keine Daten an einen Server gesendet.

Erste Schritte

  1. Wähle im Klassendiagramm eine Klasse aus und bearbeite ihren Quelltext.
  2. Ergänze bei Bedarf weitere Klassen über + Klasse.
  3. Wechsle zum Startprogramm, erzeuge Objekte mit new und rufe Methoden auf.
  4. Klicke auf Ausführen. Objektbank und Konsole zeigen ausschließlich diese neue Ausführung.
  5. Danach kannst du unten in der REPL einzelne Anweisungen mit denselben Objektnamen ausprobieren.
  6. Über BlueJ-ZIP importieren und BlueJ-ZIP exportieren lassen sich Projekte austauschen.

Eine Ausführung beginnt immer mit einer frischen Objektwelt. Klassen, Startprogramm und Arbeitsansicht werden dagegen automatisch lokal im Browser gesichert und nach einem Neuladen wiederhergestellt.

Klassendiagramm

  • Es zeigt bewusst nur Klassennamen, damit Beziehungen im Vordergrund stehen.
  • Ein Attribut mit dem Typ einer vorhandenen Klasse erzeugt eine ungerichtete Assoziationslinie.
  • extends erzeugt eine Vererbungsbeziehung mit UML-Dreieck zur Oberklasse.
  • Überfahren oder Antippen einer Karte öffnet eine UML-Vorschau mit Attributen und Operationen.
  • Nach einer gültigen Änderung im Klasseneditor wird das Diagramm automatisch aktualisiert – auch bei public, private oder protected.
  • Auto-Layout ordnet Klassen neu an.

Auf iPad und kleinen Displays: Die Fahne Diagramm am linken Rand öffnet eine Schublade über dem Code. Tippen neben die Schublade schließt sie wieder.

Codeeditor

  • Der Editor arbeitet mit echtem Text: Auswahl, Kopieren und Einfügen bleiben erhalten.
  • Tab fügt vier Leerzeichen ein; Shift+Tab entfernt bis zu vier führende Leerzeichen.
  • Enter übernimmt die Einrückung und rückt nach { um vier Zeichen weiter ein.
  • Zeilennummern, Syntaxfarben und Rahmen dienen der Orientierung. Die Rahmen verändern den Quelltext nicht.
  • Die Syntaxmeldung prüft die Lernsprache, nicht vollständiges Java.

Objektbank, Konsole und REPL

  • Die Objektbank zeigt die Objekte der letzten Ausführung in reduzierter Form.
  • Antippen oder Überfahren einer Objektkarte zeigt deren Attributwerte.
  • print(...) und System.out.println(...) schreiben jeweils eine Zeile in die Konsole.
  • Die REPL führt eine Anweisung wie lampe1.einschalten(); oder lampe1.status(); in derselben Objektwelt aus. Rückgabewerte werden mit => angezeigt.
  • Nach einer Codeänderung wird beim nächsten REPL-Aufruf neu übersetzt. Damit beginnt bewusst eine frische Objektwelt.

Lokale Sicherung

  • Der Hinweis in der Werkzeugleiste zeigt den Zeitpunkt der letzten lokalen Sicherung.
  • Ein Neuladen der Seite stellt Klassen, Startprogramm und Arbeitsansicht wieder her.
  • Vor Beispiel zurücksetzen wird die vorherige Fassung als Letzte Sicherung abgelegt.
  • Die Sicherung bleibt auf diesem Browser und wird nicht an einen Server übertragen.

BlueJ-Projekte austauschen

  • Der Import erwartet ein ZIP-Archiv mit Java-Dateien; eine vorhandene package.bluej-Datei wird erkannt.
  • Der Export erzeugt Java-Dateien, eine einfache package.bluej-Datei und eine ausführbare Startprogramm.java.
  • print(...) wird beim Export zu System.out.println(...), damit der exportierte Code in BlueJ gültiges Java ist.
  • Importierter Code bleibt erhalten, kann aber nur in der Objektwerkstatt laufen, wenn er zum unterstützten Sprachumfang passt.

Unterstützte Sprachelemente

Klassen und Objekte

Mehrere Klassen, Attribute, Konstruktoren, new, this, Objektattribute und Methodenaufrufe zwischen Objekten.

Sichtbarkeiten

public, private und protected gelten für Attribute, Methoden und Konstruktoren. private gilt nur in der deklarierenden Klasse, protected zusätzlich in Unterklassen; nicht markierte Mitglieder sind im gesamten Projekt sichtbar. Die UML-Vorschau verwendet +, −, # und ~.

Typen und Arrays

String, int, boolean, double, char und vorhandene Klassennamen. Arrays dürfen mehrere Dimensionen haben, z. B. Lampe[][] netz = new Lampe[3][4];; Indexzugriff, Indexzuweisung und length funktionieren auf jeder Ebene.

Methoden und Überladung

Parameter, Rückgabewerte und void-Methoden. Gleichnamige Methoden werden anhand ihrer Parametertypen aufgelöst, etwa zeige(int) und zeige(String). Ein Wert nach return in einer void-Methode wird als Fehler markiert.

Strings

length(), charAt(...), trim(), toUpperCase(), toLowerCase(), equals(...), equalsIgnoreCase(...), contains(...) und substring(...).

Steuerung

if/else, while, einfache for-Schleifen, switch, case, default und break.

Ausdrücke

=, +, -, *, Vergleiche, &&, ||, !, ++, --, ganze Zahlen, Strings sowie true/false.

Vererbung

extends wird im Klassendiagramm und beim Zugriff auf geerbte Attribute und Methoden berücksichtigt. Mit super.methode(...) lässt sich gezielt die Methode der Oberklasse aufrufen. super(...) ruft im Konstruktor einen passenden Oberklassenkonstruktor auf und muss dort die erste direkte Anweisung sein; ohne Aufruf wird super() automatisch versucht.

Noch nicht verfügbar – bitte dafür BlueJ/Java verwenden

Kein Java-Compiler: keine JVM, keine .class-Dateien und keine vollständige Java-Prüfung.

Keine Java-Infrastruktur: keine Packages, Imports, Standardbibliothek, Dateien, Netzwerk, Datenbanken oder grafischen Oberflächen.

Kein static: keine Klassenattribute, Klassenmethoden oder main; das Startprogramm übernimmt diese Rolle.

Sichtbarkeiten ohne Packages: public, private und protected werden geprüft. Da die Lernsprache keine Packages kennt, entspricht eine unmarkierte Deklaration der projektweiten Sichtbarkeit.

Weitere Lücken: keine Array-Literale, keine Listen/ArrayList, keine Zeichen- und Dezimalliterale, keine Interfaces, keine Exceptions und keine Threads.

Vererbung: Oberklassenkonstruktoren funktionieren per super(...) oder automatisch per super(). Abstrakte Klassen und Interfaces fehlen weiterhin.

Typprüfung: Typnamen dienen überwiegend der Orientierung; eine vollständige statische Typprüfung wie in Java gibt es noch nicht.

Minimalbeispiel

Der Klassenteil kommt in den Klasseneditor. Die drei letzten Zeilen gehören ins Startprogramm.

class Lampe {
    String farbe;
    boolean an = false;

    Lampe(String farbe) {
        this.farbe = farbe;
    }

    void einschalten() {
        an = true;
    }

    String status() {
        if (an) {
            return farbe + " leuchtet.";
        }
        return farbe + " ist aus.";
    }
}

Lampe lampe1 = new Lampe("blau");
lampe1.einschalten();
System.out.println(lampe1.status());