I am currently working on an English translation. If you like to help to proofread please contact me: ullenboom ät g m a i l dot c o m.

Java Videotraining Werbung

1. Klassen, Objekte, Pakete

In den Aufgaben der vorherigen Kapitel haben wir Klassen als Behälter für statische Methoden eingesetzt. Bewusst neue Objekte mit new aufgebaut haben wir nicht. In diesem Kapitel folgenden Aufgaben zum Erzeugen neuer Objekte, zu den Objektreferenzen und zu der besonderen null-Referenz.

Voraussetzungen

  • Unterschied zwischen Objekttyp und Referenztyp kennen

  • new einsetzen können

  • Aufgabe und grundlegende Arbeitsweise der automatischen Speicherbereinigung (Garbage Collector) kennen

  • Objekte an Methoden übergeben und zurückliefern können

  • Pakete aufbauen können

  • Typen importieren können

  • Gleichwertigkeit und Identität trennen können

  • Problem mit der null-Referenz verstehen

Verwendete Datentypen in diesem Kapitel:

1.1. Objekte erzeugen

Für die folgenden Beispiele greifen wir auf die Klassen Point und Polygon aus dem Paket java.awt zurück. Das Paket java.awt enthält unterschiedliche Klassen, viele für grafische Oberflächen. Der Punkt und das Polygon sind allerdings nicht grafisch, und wir werden auch keine grafischen Oberflächen programmieren. Die Java-Typen für Punkte und Polygone sind aber schöne einfache Datentypen, die öffentlich zugängliche Objektvariablen haben sowie gut verständliche Objektmethoden, sodass sie für unsere ersten Übungen ganz gut geeignet sind. Wir werden im Aufgabenbuch keine weiteren Datentypen aus dem java.awt-Paket nutzen.

1.1.1. Polygone zeichnen ⭐

Ein Polygon ist ein geschlossener Linienzug. Die Java-Bibliothek hält für Polygone eine Klasse java.awt.Polygon bereit, die wir mit Punkten »füttern« können.

Captain CiaoCiao fährt mit dem Schiff in die Nähe des Bermudadreiecks und sucht den Wassergeist Undine. Doch das Bermudadreieck ist gefährlich und voller Killerkraken. Die Seefahrer müssen den Bereich auf jeden Fall meiden. Gut wäre jetzt eine Karte …​

Aufgabe:

  1. Lege eine neue Klasse BermudaTriangle an mit einer main(…​)-Methode.

  2. Erzeuge ein java.awt.Polygon-Objekt.

  3. Ein Polygon besteht aus Punkten, die mit einer Methode hinzugefügt werden. Wie heißt diese Methode?

  4. Erzeuge ein Dreieck für das geheimnisvolle Bermudadreieck. Bleibe bei den Koordinaten im Wertebereich von 0 bis 50.

  5. Wenn die Position des Schiffs ein Punkt ist, wie lässt sich herausfinden, ob ein gewählter Punkt innerhalb des Dreiecks liegt?

  6. Schachtele zwei Schleifen für 0 <= x < 50 und 0 <= y < 50, und erzeuge damit ein rechteckiges Raster. Gib genau dann eine Krake aus, wenn die x-y-Koordinate einen Punkt trifft, der im Polygon liegt, und sonst einen Regenbogen. Setze den Bedingungsoperator ein: print(ist_im_Polygon ? "\uD83D\uDC19" : "\uD83C\uDF08"); Dabei steht ist_im_Polygon sinnbildlich für den Test, ob sich der Punkt im Polygon befindet.

  7. Optional: Gehören die Punkte auf der Linie zum Inneren? Was ist mit den Punkten selbst? Gehören sie zum Inneren oder zum Äußeren des Polygons?

Ab Java 9 gibt es das Modulsystem. Standardmäßig sind nur die Typen aus dem java.base-Modul eingebunden, und dieses enthält keine GUI-Typen. AWT-Typen sind Teil von Desktop-Modul java.desktop. Wer Module nutzt (eine Datei module-info.java existiert im Hauptverzeichnis der Anwendung), muss das Modul java.desktop einbinden:

module com.tutego.bermuda {
  requires java.desktop;
}

1.2. Import und Pakete

Pakete ordnen Typen thematisch. Kein Typ sollte in einem Standardpaket liegen. Typen in Paketen können wir voll qualifizieren oder über die import-Deklaration in der Compilationseinheit bekannt machen.

1.3. Arbeiten mit Referenzen

Nach dem Erzeugen eines Objekts mit new bekommen wir eine Referenz auf die Instanz zurück. Diese Referenz lässt sich anderen Methoden übergeben, und Methoden können auch Referenzen zurückgeben.

1.3.1. Dreiecke aufbauen ⭐

Captain CiaoCiao ist sich sicher, dass die gefährlichen Stellen im Bermudadreieck zufällig sein können — er muss auf alles vorbereitet sein.

Aufgabe:

  • Lege in der vorhandenen Klasse BermudaTriangle eine neue statische Methode an:

    static Polygon resetWithRandomTriangle( Polygon polygon ) {
      // return gesetztes Dreieck
    }

    Die Methode soll das übergebene java.awt.Polygon, das ja Punkte enthalten könnte, erst leeren, dann mit einem zufälligen Dreieck belegen und am Ende zurückgeben.

  • Schreibe eine weitere statische Methode, die ein neues zufälliges Dreieck zurückgibt:

    static Polygon createRandomTriangle() {
      // return beliebiges Dreieck
    }