Java vereint einige für den Informatikunterricht nicht unwichtige Eigenschaften: Java ist relativ einfach zu erlernen, Java erfordert eine strenge objektorientierte Programmierung, und Java ist plattformunabhängig. Nach einer ersten Vorstellung elementarer Java-Programme  (PCNEWS  72) sollen in diesem Artikel Datentypen , Klassen, Objekte und Programm­strukuren  an Hand von Beispielen aus der Physik dargestellt werden.

 

1.Datentypen

 

Zur Verfügung stehen 8 einfache Datentypen:

Typ

Speicherbedarf

Wertebereich

byte

8 bits

-128 .. 127

short

16 bits

-32 768 .. 32767

int

32 bits

-2 147 483 648 ..

2 147 483 647                                      

long

64 bits

...

float

 

Auf 8 Stellen genau

double

 

Auf 17 Stellen genau

char

1 byte

1 Zeichen

boolean

1 byte

false / true

 

Durch das Voranstellen eines Typs kann die Umwandlung in einen Datentyp erzwungen werden ("Type-Casting"):

 

        float realzahl;

        int ganzzahl;

...

        ganzzahl = (int) realzahl;

 

 

2.Klassen und Objekte, Zeichenketten

 

Objektorientierte Programmierung setzt die Verwendung von Klassen voraus. Darunter verstehen wir bestimmte Eigenschaften, die zu einem benutzerdefinierten Datentyp zusammengefasst werden. Im Grunde genommen bildet jedes Java-Programm eine eigene Klasse, die durch das Hinzufügen der Methode main() ausführbar wird.

 

Klassen enthalten somit eine Reihe von Variablen und eine Reihe Methoden, die die Eigenschaften dieser Variablen verändern. Das Zusammenfassen von Variablen und Methoden in einer Klasse („Kapselung“) und die Möglichkeit, diese Methoden weiteren Klassen zur Verfügung zu stellen („Vererbung“) sind Teil der Grundlage der objektorientierten Programmierung. Alle Variablen und Methoden einer Klasse werden den Objekten zur Verfügung gestellt, die zur Laufzeit (mit dem Schlüsselwort „new“) von der Klasse abgeleitet werden. Von einer Klasse abgeleitete Objekte haben gewissermaßen den gleichen „Aufbau“ und ein gleiches „Verhalten“. Sie eignen sich in besonderer Weise, komplexe Datentypen zu entwerfen, die den jeweiligen Erfordernissen optimal angepasst sind.

 

Alle Zeichenketten werden in Java als eigene Objekte der Klasse java.lang.string abgeleitet. Aus diesem Grund stehen zahlreiche Methoden zur Verfügung, mit denen Zeichenketten bearbeitet werden können.

 

       zeile = "Dies ist eine Zeichenkette";

...

       System.out.println(zeile);

       System.out.println(zeilc.length());

...

 

 

3.Programmstrukturen

 

Der Ablauf jedes Programmes ist - außer durch die Sequenz (einfache Aufeinanderfolge von Befehlen) durch Verzweigungen , Schleifen und Unterpro­gramme gekennzeichnet. Außer  Unterprogramme stehen in Java folgende Strukturen zur Verfügung:

 

3.1 Verzweigung

 

Die if-Anweisung wird in der folgenden (allgemeinen) Form kodiert:

        if (logischer Ausdruck)

          Anweisung1;

        else

          Anweisung2;

 

Der "else"-Zweig kann auch fehlen, if-Verzweigungen können geschachtelt werden.

 

Logische Ausdrücke können logische Werte, logische Variable oder Ausdrücke mit logischen Operatoren sein. Abgefragt wird jeweils, ob der logische Ausdruck wahr oder falsch ist.

 

3.2 Mehrfachverzweigung

 

Eine Verzweigung auf mehrere Möglichkeiten wird mit der Switch-Anweisung realisiert...

 

        switch (Ausdruck) {

          case Wert1: Anweisung1; break;

          case Wert2: Anweisung2; break;

          ...

          default: Anweisung;

        }

 

3.3 Schleifen

 

Zählschleifen

for (Initialisierung;Abbruchbedingung;Inkrement) {

   Anweisung(en);

}

 

(fußgesteuerte)  do-while-Schleife

       do Anweisung

       while (logischer Ausdruck);

      

(kopfgesteuerte) While-Schleife

       while (logischer Ausdruck) {

           Anweisung(en);

       }

 

 

4.Unterrichtsbeispiel -

Simulation von „Wurfbahnen“

 

Die Verwendung von Rechenanlagen hat sich seit langem für die numerische Behandlung von (mehr oder weniger einfachen) Fragestellungen aus der Physik bewährt. Im Beispiel berechnen wir eine Wurfbahn schrittweise:

 

import java.awt.*;

import java.awt.event.*;

 

public class wurfbahn extends Frame {

 

  wurfbahn() {

    super("Schiefer Wurf");

  }

 

  public void paint (Graphics g) {

    double v, vwind;

    double xalt,yalt,x,y,vx,vy,ax,ay,dt;

    g.setColor(Color.white);

    g.fillRect(0,0,600,600);

    g.setColor(Color.black);

    g.drawLine(0,200,600,200);

    g.setColor(Color.red);

    v = 65;

    vwind = 15;

   

    for (int i=0;i<7;i++) {

      dt=0.1;

      xalt=0;

      yalt=200;

      vx = v*Math.cos(-15*i*3.14/180);

      vy = v*Math.sin(-15*i*3.14/180);

      x=0;

      y=200;

      ax=0;

      ay=9.81;

 

      do {

       vx=vx+(ax-vwind*vwind*0.01)*dt;

       vy=vy+ay*dt;

       x=x+vx*dt;

       y=y+vy*dt;

       g.drawLine((int)xalt,(int)yalt,(int)x,(int)y);

       xalt=x;

       yalt=y;

      } while ((x<600) && (y<600) && (x>=0) && (y>=0));

    }

  }

 

  public static void main (String[] arguments) {

    wurfbahn proggi = new wurfbahn();

    WindowListener wl = new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    };

    proggi.addWindowListener(wl);

    proggi.setLocation(100,100);

    proggi.setSize(600,600);

    proggi.show();

  }

} 

 

<Grafik: wurfbahn1.jpg>

 

Abb. 1: Offensichtlich wurden Bahnen von Körpern berechnet, die aus einem Hochhaus unter verschiedenen Winkeln geworfen wurden. Der Gegenwind bewirkt „unsymmetrische“ Bahnkurven...

 

Wegen der verwendeten mathematischen Funktionen (Sinus-, Kosinus- und Quadratwurzelfunktion aus dem Paket Math) verwenden wir innerhalb der Iteration Variable mit dem Datentyp „double“. Da die Grafik-Methoden ganzzahlige Werte verlangen, werden die reellen Zahlen mittels Type-Casting in ganze Zahlen umgewandelt. Die Laufvariable für die Zählschleife ist vom Typ „integer“. Lediglich der Titel des Rahmens istt eine Zeichenkette.

 

Die Zählschleife für die Wurfbahnen bei verschiedenen Anfangswinkeln enthält eine fußgesteuerte while-Schleife (Physik: vx = vx + a*dt, x = x + vx*dt). Das Berechnen und die Ausgabe der Wurfbahn wird abgebrochen, wenn die Werte außerhalb des Zeichenfensters liegen.

 

<Grafik: wurfbahn2.jpg>

 

Abb. 2: Eingabefelder zur Wahl der Anfangswerte und Schaltflächen ergeben eine einfache Benutzerschnitt­stelle.

 

Bis auf die Möglichkeit, das Programm mit Hilfe der „Schließen-Methode“ des Rahmens, bzw. mit der Tastenkombination <ALT>+<F4> zu beenden, fehlt jede Möglichkeit der Interaktion durch den Benutzer. Dazu fehlen etwa Eingabefelder für die Anfangswerte  und Schaltflächen zur Programmführung. Mit welchen Java-Klassen eine solche (einfache) Bedienungsoberfläche gestaltet werden kann soll in einer weiteren Folge dargestellt werden.

 

Unterrichtsbeispiel - Satellitenbahn

 

<Grafik: satellit.jpg>

 

Abb. 3: Die Bahn eines Satelliten um die Erde wird punktweise berechnet und ausgegeben.

 

...

    public void paint (Graphics g) {

       double GM,r,r3,er;

       double x,y,vx,vy,ax,ay,dt,alpha;

       int zaehler;

       zaehler = 120;

       GM = 392000000000000.0;

       er = 6370000;

       alpha = 0;

       vx = 0;

       vy = 5500;

       dt = 500;

       x = 3*er;;

       y = 0;

       g.setColor(Color.white);

       g.fillRect(10,10,380,380);

       g.setColor(Color.red);

       g.drawOval(200 - (int)(er/(20*er)*400),

                200 - (int)(er/(20*er)*400),

                (int)(er/(20*er)*800),

                (int)(er/(20*er)*800));

       g.setColor(Color.blue);

 

       for (int i=1;i<zaehler;i++) {

           r3 = Math.sqrt(x*x+y*y);

           r=r3*r3*r3;

           ax=-GM*x/r;

           ay=-GM*y/r;

           vx=vx+ax*dt;

           vy=vy+ay*dt;

           x=x+vx*dt;

           y=y+vy*dt;

           g.fillRect(200+(int)(x/(20*er)*400), 200+(int)(y/(20*er)*400),1,1);

       }

    }

 ...