Programmieren in höheren Programmiersprachen


Prozedurale Sprachen

Wenn es auch dem Computer egal ist, so ist es doch für den Programme schreibenden Menschen von grosser Wichtigkeit, in den Programmen eine gewisse Übersichtlichkeit herzustellen, und diese auch dann zu behalten, wenn das Programm später umgebaut oder gewartet werden muss, möglicherweise sogar von anderen Personen. Die bekannten Stichworte sind:

Man schreibt also die Programm-Anweisungen nicht einfach hinter einander weg, sondern teilt das Programm unter inhaltlichen Gesichtspunkten in Unterprogramme ein; diese Unterprogramme

Man bezeichnet diese Methode des Programmierens als Strukturiertes Programmieren.

Strukturiertes Programmieren

Das folgende Beispiel zeigt die Aufteilung eines Programms in Haupt- und Unterprogramm in der Strukturierten Programmierung. Das Programm soll bei einem Kreis aus einem gegebenen Radius, z.B. 13, die entsprechende Kreisfläche berechnen. Das Hauptprogramm heisst immer main, der Name der Unterprogramms ist frei erfunden und lautet hier flaeche

public class UnterKreis{

    public static void main( String [] args ){

        double r = 13;
        double fl = 0;

        fl = flaeche( r );

        System.out.println( "Flaeche des Kreises mit Radius " + r
                                                              + " betraegt "
                                                              + fl );
    }

    static public double flaeche( double radius ){

        double flaecheninhalt = Math.PI * radius * radius;

        return flaecheninhalt;
    }
}

Die flaeche-Funktion ist hier das Unterprogramm:

Bei Aufruf des Programms Unterkreis stellt sich der Ablauf dar wie folgt,
die Pfeile und Nummern deuten den Programm-Ablauf an
(Ablauf des Programms rote Pfeile,
Aufruf Unterprogramm grüner Pfeil,
Ende Unterprogramm blauer Pfeil):
Ablauf des Programms

Zusammenfassend läuft das Programm also in 5 Abschnitten:

  1. Das Hauptprogramm wird als erstes aufgerufen und von oben her abgearbeitet;
    In der ersten Zeile von main werden alle Vorkommen der Variable r mit dem Wert 13 belegt.
  2. Das Unterprogramm flaeche(13) wird aufgerufen;
    das aufrufende Programm wartet auf des Ende des aufgerufenen Programms.
  3. Das Unterprogramm wird von oben her abgearbeitet;
    vermittels des Aufrufparameters sind alle Vorkommmen der Variable radius auf den Wert 13 gesetzt.
  4. Das Unterprogramm wird beendet bei return;
    Der Return-Wert wird an das aufgerufene Programm zurückgegeben.
  5. Der Return-Wert wird an die Variable fl zugewiesen und das Hauptprogramm läuft weiter.

Der Vorteil:

Der Nachteil:

Übung:

Man schreibe in strukturierter Form ein Programm, das die Summe (die Differenz, den Mittelwert, etc) zweier Zahlen berechnet. Die Unterprogramm-Funktion hat dann natürlich 2 Parameter, z.B.:
static public double summe( double x, double y )

Objekt Orientiertes Programmieren

Der Grundbegriff der objekt-orientierten Programmierung (OOP) ist Message-Passing: Objekte können Nachrichten empfangen und entsprechende Methoden ausführen.

Ein Programm zur Berechnung einer Kreisfläche sieht in OOP folgendermassen aus:

public class Kreistest
{
    public static void main( String [] args )
    {
        Kreis kreis1 = new Kreis();
        kreis1.setRadius( 13 );
        System.out.println( "Die KreisFlaeche beträgt " + kreis1.flaeche());
    }
}

Die Nachrichten haben immer die Form
Objekt - Punkt - Nachricht
Nachrichten sprechen also gleichnamige Methoden des Objekts an, das sind Funktionen, die allerdings nicht allein, sondern nur bei einem Objekt aufgerufen werden können.

Das obige Programm tut also folgendes:

Wie kommt es nun, dass Objekte Nachrichten verstehen?

Jedes Objekt gehört zu einer bestimmten Klasse. Im og. Beispiel gehört das Objekt kreis1 zur Klasse Kreis. Die Klasse definiert die Methoden, welche das Objekt ausführen kann. Neben Methoden definiert die Klasse auch Eigenschaften für die Objekte. Die meisten Klassen werden nicht selbst programmiert, sondern einer Klassen-Bibliothek entnommen und ggf. nach Bedarf erweitert.

Vorgefertigte Java-Klassen siehe Handbuch

Allgemeine Java-Info siehe SDK Documentation

Klassen können durch den Mechanismus der Vererbung voneinander abgeleitet werden. Dadurch besteht bei neuen Klassen meist nur geringer Bedarf an Programm-Code, da die neue Klasse alle Fähigkeit ihrer Super-Klasse erbt. Zuerst kommt also die Klasse, dann das dazugehörende Objekt:


www.AndreasGoedel.de