Übungsaufgaben zum Thema Klassen und Objekte



Aufgabe 1: Einführung in Klassen

  1. Implementieren Sie das Programm mit dem LightBulb-Objekt aus der Vorlesung. Legen Sie unter Processing zuerst eine neue Sketch an (Uebungsblatt11).



    Öffnen Sie jetzt einen neuen Tab, indem Sie auf den kleinen Pfeil klicken und dort "Neuer Tab" anklicken ..



    .. und die Datei LightBulb.java erstellen.



    Füllen Sie die neu angelegte Klassendatei (LightBulb.java) mit dem Code der Vorlesungsfolie, die die Überschrift "Vollständige LightBulb-Klasse" trägt und speichern Sie danach die Datei.

    Die öffentlichen Eigenschaften bzw. Funktionalitäten dieser Klasse können im Hauptprogramm durch Deklaration von Variablen, die diese Klasse als Datentyp besitzen, benutzt werden. Wir können Variablen des Typs LightBulb deklarieren, weil die neu erstellte Klasse Teil des aktiven Projekts und damit der Entwicklungsumgebung bekannt ist.

  2. Ergänzen Sie Ihr Hauptprogramm (Uebungsblatt11.pde) um den Programmcode der Folie "Beispiel: Programm mit LightBulb-Objekt", um die neue Klasse auszuprobieren. Im Code wird ein neues Objekt vom Typ LightBulb erzeugt und dieses durch Aufruf der entsprechenden Methoden des Objekts "ein"- und "ausgeschaltet". Führen Sie den Code mit aktiviertem lb.switchOff(); aus. Speichern Sie danach den Code mit aktiviertem lb.switchOn(); und führen Sie ihn erneut aus. Was stellen Sie jeweils fest?

  3. Kommentieren Sie lb.switchOff(); und lb.switchOn(); in Ihrem Hauptprogramm aus. Speichern Sie den Code und rufen Sie das Programm auf. Angezeigt wird jetzt der Initialisierungswert der Variablen light. Setzen Sie die Variable auf die beiden möglichen Anfangswerte (welche sind dies?), kompilieren Sie jeweils die Datei und führen Sie das Programm danach aus. (Es ist guter Stil Variablen nur initialisiert zu benutzen.)

  4. Versuchen Sie nun den Wert der Variablen light durch eine Zuweisung lb.light = true; im Hauptprogramm zu ändern. Gibt es dabei ein Problem? Falls ja: Wie ließe sich dieses lösen?

  5. Ändern Sie Ihr Hauptprogramm so ab, dass für die Überprüfung des logischen Zustandes der Variable light keine Hilfsvariable lightState mehr benötigt wird.

  6. Ändern Sie das Attribut der Methode isOn() zu private und speichern Sie die Datei. Was passiert jetzt?

  7. Nehmen Sie die Änderung der letzten Übung wieder zurück. Übernehmen Sie jetzt den Code des Hauptprogramms von der Folie "Mehr als ein Objekt erzeugen" in Ihr eigenes Hauptprogramm. Speichern Sie es und führen Sie es aus. Probieren Sie unterschiedliche Kombinationen der switchOn()-switchOff()-Methoden-Aufrufe und ihre Auswirkung auf die Ausgaben des Programms.


Aufgabe 2: Zwei Glühlampen ein- und ausschalten

Erweitern Sie Ihr Hauptprogramm derart, dass mit einer überwachungsgesteuerten do-while-Schleife zwei Glühlampen, eine rechte und eine linke, ein- und ausgeschaltet werden. Hierzu werden mit Hilfe der IOLib Integer-Zahlenwerte eingelesen. Wird "1" eingegeben, so wird die rechte Glühlampe eingeschaltet, bei "2" die linke, bei "3" beide Glühlampen. Bei "0" wird das Programm beendet. Wird irgendeine andere Zahl eingegeben, so werden beide Glühlampen ausgeschaltet. Geben Sie den Zustand der Glühlampen jeweils nach dem Einlesen des Zeichens aus. Dies kann entweder grafisch mit IOLib.putString("Ausgabestring"); in Form von Meldungen geschehen, wie im Beispiel unten, oder über die Konsole. Achten Sie darauf, dass Sie den Zustand der Glühlampen nur mit den Methoden der Klasse ändern und auslesen.

Beispielablauf:

















Aufgabe 3: Lichterkette

  1. Klassen können als Typ eines Felds benutzt werden. Probieren Sie dies an Hand eines Felds von LightBulb-Objekten aus. Kommentieren Sie den vorhandenen Code aus und erweitern Sie Ihr Hauptprogramm dann um ein Feld von fünf Glühlampen. Die Erstellung des Felds geschieht in zwei Schritten:

    1. Zunächst wird ein Feld erzeugt, welches fünf Elemente des Typs LightBulb aufnehmen kann:

      LightBulb[] lbarr = new LightBulb[5];
    2. Dieser Befehl erzeugt keine Glühlampen, sondern nur Speicherplätze, die Glühlampen aufnehmen können. Die eigentlichen Glühlampen werden in einem zweiten Schritt durch mehrfaches Instanzieren der Klasse LightBulb erzeugt und jeweils den einzelne Feldelementen zugewiesen. Dies sieht für das erste Feldelement mit dem Indexwert 0 z. B. so aus:

      lbarr[0] = new LightBulb(); // usw.

      Das Zuweisen der einzelnen Glühlampen an die Feldelemente kann auch mit Hilfe einer for-Schleife geschehen, um unnötigen Programmcode zu vermeiden.

    Bei der Erstellung von Feldern, die einen abstrakten Datentyp besitzen, muss immer unterschieden werden zwischen den Feldelementen, die das jeweilige Objekt aufnehmen sollen und den gesondert zu erzeugenden Objekten.

    Die Glühlampen sollen durch Benutzereingaben ein- und ausgeschaltet werden können. Wird im Programm eine 1 eingegeben, so werden alle Lampen der Lichterkette eingeschaltet. Bei Eingabe einer 0 werden alle Lampen ausgeschaltet. Durch Eingabe einer 2 werden die geradzahligen Lampen eingeschaltet, durch Eingabe einer 3 die ungeradzahligen Lampen. Danach wird jeweils der Status der Lampen ausgegeben. Die Eingabe eines anderen Zahlenwerts beendet das Programm.

    Beispielablauf:





















  2. Erweitern Sie Ihre Lösung dahingehend, dass jetzt eine beliebige Anzahl von Glühlampen verwendet werden kann.

    Das Programm erfragt zunächst die gewünschte Anzahl an Glühlampen, erzeugt diese und geht dann in die Schleife, in der die Glühlampen in ihrer Gesamtheit mit Hilfe von Benutzereingaben ein- und ausgeschaltet werden können.

    Beispielablauf: