Teil III
ARS und Java
Kapitel 11
Programmierung in Java
11.1 Zweck und Umfang der EinfĂŒhrung in Java
Die folgenden AusfĂŒhrungen sind nicht als ausfĂŒhrliche EinfĂŒhrung in die Programmiersprache Java gedacht. Java ist weitaus komplexer als Scheme bzw. ARS++ und kann aus diesem Grunde nicht so kurz und bĂŒndig abgehandelt werden, wie es mit ARS++ im Teil III geschah. Dennoch sollten die folgenden AusfĂŒhrungen reichen um ein VerstĂ€ndnis fĂŒr die Anwendung der Grundprinzipien aus dem Teil I auf Java zu erhalten. Es wird hier mehr oder minder beispielhaft vorgestellt, wie die entsprechende Codierung in Java aussehen könnte. Mit diesen Schablonen und zusĂ€tzlichen Kommentaren kann dann auch die komplette Anwendung in Java nachvollzogen werden.
11.2 Wichtige Abstraktionsmechanismen
Etwas einen Namen geben
Etwas einen Namen geben entspricht in Java der Deklaration von Variablen verbunden mit der sofortigen oder spĂ€teren Zuweisung von Werten. Diese Variablen können als Referenzen fĂŒr einfache Daten oder auch fĂŒr Objekte und damit auch fĂŒr Funktionen verwendet werden. Im Detail wird dies weiter unten ausgefĂŒhrt werden. (Siehe Abschnitt 31 Seite 138).
Anders als in Scheme mĂŒssen alle Variablennamen anfangs einem bestimmten Datentyp zugeordnet werden. Ein solcher Datentyp kann eine Klasse von Objekten sein oder ein in Java definierter grundlegender Datentyp.
Solche in Java grundlegend definierte Datentypen, die nicht den Status einer Objektklasse einnehmen sind folgende:
âą int Ganze Zahlen (32 Bit)
âą long Ganze Zahlen (64 Bit)
âą float Gleitkommazahlen (32 bit)
âą double Gleitkommazahlen doppelter Genauigkeit (64 Bit)
âą char Zeichen (16 Bit)
âą byte (8 Bit)
âą short (16 bit)
âą boolean (1 Bit)
Ebenso grundlegend fĂŒr die Praxis sind folgende Datentypen, die allerdings als Klassen definiert wurden. Es folgt nur eine kleine Auswahl:
âą String Zeichenketten
âą Integer Ganze Zahlen als Objekte im Gegensatz zu int
âą Float Gleitkommazahlen als Objekte im Gegensatz zu float
âą Boolean Boolesche AusdrĂŒcke als Objekte im Gegensatz zu boolean
Bildung von Klassen
In Java ist dies die wichtigste Art der Abstraktion. Es steht fĂŒr diesen Abstraktionsmechanismus ein spezielles sprachliches Konstrukt zur VerfĂŒgung.
SYNTAX-DEFINITION 11.1 (DEFINITION EINER KLASSE)
Die Definition einer Klasse erfolgt nach dem folgenden in EBNF-Notation formuliertem Muster.
<Klassen-Modifikatoren> âclassâ | <Name der Klasse> |
| [âextendsâ <Oberklasse>] |
| [âimplementsâ <Interface> {<Interface>}] |
<ClassBody> | |
Als Demonstrationsbeispiel diene dasselbe, das schon bei der EinfĂŒhrung in Scheme benutzt wurde. Die Hierarchie der in Frage kommenden Klassen kann wie folgt dargestellt werden:
Listing 11.1: Basisklasse âAccountâ fĂŒr Bankkonten
Abbildung 11.1: Klassenhierarchie im Beispiel Bankkonto
âbalanceâ in dem obigen Beispiel ist eine Instanzvariable. Der Rest sind Methodendeklarationen. Variable wie Methoden können die Zusatzklausel âpublicâ oder âprivateâ haben. Durch diese Klausel werden die Zugriffsrechte definiert. âpublicâ bedeutet, dass die entsprechende Methode oder Variable von auĂerhalb des Objektes angesprochen werden kann. âprivateâ erlaubt den Zugriff nur von Methoden der eigenen Klasse.
Auch Methoden mĂŒssen einem Datentyp zugeordnet werden. Dieser Datentyp bezieht sich auf den RĂŒckgabewert der Funktion. Wird kein Wert zurĂŒckgegeben, dann muss die Methode dem Datentyp âvoidâ zugeordnet werden.
Ein Konstruktor erzeugt ein Objekt und kann benutzt werden, um Initialisierungs- arbeiten auszufĂŒhren. In dem obigen Beispiel ist die Methode âAccountâ der Konstruktor. Durch folgende Anweisung wird eine Instanz der Klasse Account erzeugt:
Listing 11.2: Erzeugung einer Klasseninstanz
Die folgende Klasse âAccountiâ ist von der Basisklasse âAccountâ abgeleitet, von der sie alle Eigenschaften erbt.
Listing 11.3: Klasse âAccountiâfĂŒr zinsbringende Bankkonten
In der nĂ€chsten Klasse âKontoâ werden in der Methode âmainâ Objekte der oben beschriebenen Klassen erzeugt und ihnen zu Testzwecken Botschaften geschickt.
Listing 11.4: Anwendung der beiden Klassen
11.3 Closures
Wenn eine Funktion mit der sie umgebenden Menge der Date...