Java Klassenaufbauhttp://newsolutions.de/it/java-klassenaufbau/

10. November 2009 | Von | Kategorie: Programmierung

In unserem vorigen Artikel „Einführung in JAVA“ haben wir Sie in die JAVA-Welt eingeführt. Wir haben gezeigt, daß eine JAVA-Anwendung aus Klassendateien besteht und diese Dateien in benannte und unbenannte Pakete gruppiert werden. Wir haben diese drei Komponenten mit Modulen, Programmen und Service Programmen von ILE RPG IV (Integrated Language Environment) verglichen.

von George Farr und Phil Coulthard

In diesem Artikel werden wir die JAVA-Klassendateien unter das Mikroskop legen, um hinter die Fassade zu schauen und sie mit RPG IV Modulen zu vergleichen. Der Programmfluß einer typischen ILE RPG Anwendung (nach-V3R1) sieht ähnlich aus wie in Abbildung 1 dargestellt. Ein RPG Programm übernimmt die Steuerung in der Hauptroutine des Startmoduls und ruft dann Prozeduren („erwachsene“ Subroutinen), die an folgenden Plätzen stehen können:

  • im gleichen Modul
  • in einem anderen Modul im gleichen Programmobjekt
  • in Modulen, die in Serviceprogrammen zusammengebunden sind.

(Geanu wie in Programmen können auch Serviceprogramme mehrere Module enthalten.)

Eine Java Anwendung besteht aus einer Reihe von CLASS-Dateien, die Java-Bytecode enthalten, der aus Java-Quellcode compiliert wurde. Eine Hauptklassendatei wird von der Befehlszeile (oder durch einen Browser, wenn es sich bei der Klasse um ein Applet handelt) gestartet. Viele weitere Klassendateien können von der Haupt-Klassendatei aufgerufen werden. RPG Module werden aus RPG Quelltextmembern mit dem Befehl CRTRPGMOD (Create RPG Module) erstellt. Java Klassen, auf der anderen Seite, werden aus Java Quelldateien mit Hilfe des Befehlszeilenwerkzeugs JAVAC kompiliert. JAVAC ist Teil des Java Development Kit (JDK)

PaperCamera2012-08-22-17-07-57

 

Module und Klassen

Abbildung 2 zeigt ein typisches RPG IV Modul mit Variablen, die im Kopf in D-Specs definiert werden, gefolgt von einer oder mehrerer Prozeduren. Noch einmal: Prozeduren sind eigenständige, erwachsenen Subroutinen, die in V3R2 bzw. V3R6 zu RPG IV hinzugefügt wurden. Abbildung 3 zeigt eine typische Prozedur. Sie enthält Parameter, lokale Variablen und C-Specs mit Programmlogik. Wichtig ist, daß lokale Variablen auch mit D-Specs definiert werden und zwar vor den C-SPecs. Sie werden bei jedem Aufruf der Prozedur neu initialisiert. Wie kann man dies mit Java vergleichen ? Java´s Gegenpart zu RPG-Modulen sind CLASS-Dateien, die Klassen enthalten. Abbildung 4 zeigt, daß jede Klasse Variablendeklarationen und Methoden enthält. Eine Klassendefinition kann zwei Arten von Variablen definieren: CLASS oder STATIC Variablen, die näherungsweise den globalen Variablen in einem RPG Modul entsprechen. FIELDS oder INSTANCE Variablen, die selbst keine Daten enthalten, sondern als Vorlagen für die Objekterstellung dienen – ein Punkt auf den wir im nächsten Artikel näher eingehen werden.

Wir führen die Grundsyntax für Klassen und Methoden in diesem Artikel ein und stellen die Details zu Klassenvariablen noch etwas zurück. Der gesamte ausführbare Java-Code wird in Methoden gestellt. Sie können auch lokale Variablen innerhalb von Methoden definieren. Diese Variablen können nur innerhalb der Methode verwendet werden, in der sie definiert wurden. Sie werden bei jedem Aufruf der Methode neu initialisiert. Hervorzuheben ist, daß die Variablen an jeder Stelle der Methode definiert werden können, solange die Stelle vor der Position liegt, an der die Variable zum ersten Mal verwendet wird. Abbildung 5 zeigt eine Java-Methode. Hier eine Zusammenfassung des Vergleichs von RPG Modulen und Java-Klassen:


 

RPG
Module
globale Variablen
Prozeduren
lokale Variablen
Code* = kein RPG Gegenstück 

JAVA
Class-Datei
Klasse*
Klassenvaraiablen
Felder*
Methoden
lokale Variablen
Code

Definition von Java-Klassen

Abbildung 6 zeigt eine Java-Quelldatei (links) und eine CLASS-Datei.  Achten Sie darauf, daß der Name der Klasse exakt mit dem Namen der Java-Quelldatei übereinstimmen muß. Die „kompilierte“ Java-Klasse wird den gleichen Namen tragen. Zusätzlich sind Sie auf genau eine Klasse pro Java-Quelldatei beschränkt. (Java erlaubt zwar auch sogenannte INNER Klassen, aber dies ist eine Technik für Fortgeschrittene.) Das Schlüsselwort PUBLIC in Abbildung 6, das als ACCESS MODIFIER verwendet wird, verdeutlicht, daß Coding in jeder anderen Klasse die betrachtete Klasse verwenden darf. Dies bedeutet, daß Sie Klassen schreiben können, die Variablen mit Bezug zu den Variablen der PUBLIC-Klasse definieren können und auch Methoden der PUBLIC-Klasse aufrufen dürfen. Wenn Sie das Schlüsselwort weglassen, kann die Klasse nur von Klassen innerhalb des gleichen Pakets (Package) oder Programms verwendet werden. PUBLIC-Klassen entsprechen also in etwa exportierten Prozeduren in RPG IV und nicht-PUBLIC Klassen entsprechen nicht-exportierten Prozeduren. Die Syntax für die Definition von Java-Klassen ist wie folgt:

([] steht für optionale Einträge, <> für Schlüsselworte und kursive Ausdrücke für Benutzerangaben)

[<class-modifier>] class Name
{

}
Beachten Sie bitte:

  • Modifiers wie PUBLIC sind optional.
  • Das Wort „class“ ist nicht optional. Es definiert die Art des Java-Elements, daß Sie erstellen.
  • Name, der Name der Klasse, wird nach Groß-/Kleinschrift unterschieden. Die Namensgebung liegt vollständig bei Ihnen. Die Konvention besagt, daß der erste Buchstabe eines Klassennamens groß geschrieben sein muß. Klassennamen müssen innerhalb eines Pakets eindeutig sein. Der Dateiname der Quelltextdatei muß Name.class sein.
  • Geschweifte Klammern bilden den Anfang und das Ende eines Java-Codeblocks. Diese Syntax wurde von C bzw. C++ übernommen.
  • Der gesamte Java-Code, inklusive der Klassendefinitionen, ist formatfrei. Der Compiler ignoriert Zeilenumbrüche und überschüssige Leerzeichen.

Abbildung 7 zeigt die Syntax für die Definition einer Java-Methode innerhalb einer Klasse.

[<method-modifier>] <return-type> name (parameter-type parameter-name, … )
{

return [return-expression]
}

Hervorzuheben ist:

  • Es sind mehr Modifiers verfügbar als bei der Klassendefinition (Wir werden diese in einem späteren Artikel betrachten.). Wie bei Klassen auch, müssen Sie den Modifier PUBLIC verwenden, um eine Methode von überall außerhalb aufrufbar zu machen.
  • „return-type“ bestimmt den Typ des Wertes, den die Methode zurückgibt. Dies entspricht den RPG-Funktionen. Falls eine Methode keinen Wert zurückgibt, müssen Sie das Schlüsselwort VOID anstelle eines Typs angeben.
  • Der Methodenname ist frei wählbar. Es gibt keine Längenbegrenzung. Sie können die Namen so lang machen, daß sie ausreichend selbsterklärend sind. Die Konvention sagt, daß Methodennamen kleingeschrieben werden, bis auf den jeweils ersten Buchstaben eines neuen Wortes, z. B. getCustomerName, setPayRate.
  • Die Parameterliste ist eine Folge von keinem oder mehreren Typ-und-Name Paaren (z.B. int myVariable), welche die Methode als Eingabeparameter akzeptiert. Um mehrere Parameter voneinander zu trennen, werden Kommata verwendet. Wenn eine Methode keine Parameter akzeptiert, werden nur leere Klammern () angehängt.
  • Die Kombination aus Methodenname und Parameterliste wird als SIGNATUR bezeichnet. Anders als Prozedurnamen in RPG müssen Methodennamen nicht eindeutig innerhalb einer Klasse sein. Die SIGNATURen (Methodenname + Parameterliste) müssen jedoch eindeutig sein. Sie können folglich zwei Methoden mit dem Namen „setName“ haben, solange diese unterschiedliche Parameterlisten verwenden.
  • In Java werden Parameter „by value“ übergeben. Dies bedeutet, daß die Veränderung einer Variablen innerhalb einer Methode keinen Einfluß auf den Wert der Variablen des aufrufenden Programms hat. (Es gibt allerdings auch Methoden in Java, um den Objektinhalt des aufrufenden Objekts zu verändern.) Dies ist ein gravierender Unterschied zu RPG wo Variablen in der Regel „by reference“ übergeben werden. (RPG IV Prozeduren erlauben es auch Parameter „by value“ zu übergeben, wenn Sie in der D-Spezifikation das Schlüsselwort VALUE angeben.)
  •   Wie bei Klassen gilt auch hier, daß Coding zwischen runden Klammern in freiem Format eingegeben werden kann. Der RETURN-Befehl ist nur notwendig, wenn Sie einen Wert zurückgeben. Genau wie bei RPG Prozeduren muß der Typ der zurückgegebenen Werte mit der Deklaration der Methode übereinstimmen.

Zum Beispiel:

int getFinalPrice()
{
int temp;
temp = productPrice * taxRate + productPrice;
return temp;
}

Sie können die öffnende runde Klammer entweder direkt hinter die Methodendefinition in die gleiche Zeile setzen oder erst an den Anfang der nächsten Zeile. Beide „Stile“ sind in Java zulässig. Sie sollten sich allerdings aufgrund der Übersichtlichkeit auf eine Schreibweise festlegen.
Zum Abschluß noch ein kleines Beispiel für eine Java-Klasse. Die Klasse heißt MyClass und enthält ein Feld mit dem Namen MyVariable und zwei Methoden mit den Namen setMyVariable und getMyVariable.

public class MyClass
{
private int myVariable;

public void setMyVariable(int value)
{
myVariable = value;
}

public int getMyVariable()
{
return myVariable;
}
} // end MyClass

Sie sehen, daß mit PRIVATE INT myVariable ein privates Integerfeld (oder Instanzvariable) mit dem Namen myVariable definiert wird. Das PRIVATE Schlüsselwort bedeutet, daß nur Methoden innerhalb dieser Klasse das Feld verwenden dürfen. Beachten Sie die Semikola – alle Java-Befehle werden mit einem Semikolon abgeschlossen. Der Doppelschrägstrich hinter der runden Klammer ist der Beginn eines Kommentars. Jeder doppelte Schrägstrich in Java leitet einen Kommentar ein, der bis an das Ende der Zeile reicht.

Nächstes Mal

Nachdem Sie nun die Syntax für die Definition von Klassen und Methoden in Java kennengelernt haben, werden wir im nächsten Artikel etwas neues und interessantes zeigen – die Instantiierung von Klassen, um Objekte zu erstellen.
(übersetzt und bearbeitet von Dipl.-Ing. Dirk Neumann)

George Farr und Phil Coulthard arbeiten im IBM Labor Toronto/Kanada. George ist der technische Entwicklungsleiter für RPG und VisualAge für RPG Sprachen. Phil ist ein Architekt für Anwendungsentwicklungswerkzeuge und Sprachen. George und Phil sind häufig Sprecher bei COMMON und anderen Konferenzen und Usergroups weltweit. Sie arbeiten gemeinsam an dem Buch Java für RPG Programmierer. Sie können George unter gfarr@vnet.ibm.com und Phil unter pcoulthard@vnet.ibm.com erreichen.

Dipl.-Ing. Dirk Neumann ist leitender Berater der Unternehmensberatung Neumann & Professionals in Bochum/Deutschland. Er verfügt über langjährige Erfahrung im Entwurf und Umsetzung von Konzepten zur strategischen Software-Entwicklung. Der Autor ist Gastredner auf technischen Konferenzen und leitet im Auftrag der IBM-Bildungsgesellschaft Ausbildungdskurse zum Themenschwerpunkt Software-Entwicklung. Sie können ihn unter 100763.3721@compuserve.com erreichen.

Übersetzt und für den
deutschsprachigen Markt überarbeitet
von Dipl.-Ing. Dirk Neumann

Literaturhinweise in NEWS/400:

Java gibt AS/400 Entwicklung neue Impulse, 05/97, S. 20
Ihr Java Profil, 05/97, S. 24
Java auf der AS/400, 11/96, S.18 + 51
AS/400 im Intranet – mit Java eine sichere Verbindung, 02/98, S. 33
Die AS/400 als Java Server, 04/98, S. 20
Einführung in Java, 05/98 S. 26Wenn Sie jetzt abonnieren, erhalten Sie von 11/94 bis 02/98 drei Hefte gratis nach Ihrer Wahl, solange Vorrat reicht! Wählen Sie diese aus unserem Artikelindex: http://www.news-400.de sowie Produktmonographie 97 (ggf. anfordern Tel.: 08196-999107).

Schlagworte: , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.