Programmieren in höheren Programmiersprachen |
|
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.
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:
radius,
return.
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):
Zusammenfassend läuft das Programm also in 5 Abschnitten:
main werden alle Vorkommen
der Variable r mit dem Wert 13 belegt.flaeche(13) wird aufgerufen;
radius auf den Wert 13 gesetzt. return;
fl zugewiesen und das Hauptprogramm läuft weiter. Der Vorteil:
main-Funktion braucht sich keine Gedanken
über die interne Arbeitsweise der flaeche-Funktion zu machen. flaeche-Funktion kann beliebig oft aufgerufen werden. flaeche-Funktion kann in andere Programme bei Bedarf hineinkopiert werden. 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 )
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:
kreis1 wird erzeugt mittels newsetRadius(13) flaeche()
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: