O'Reilly logo

Groovy: Grundlagen und fortgeschrittene Techniken by Joachim Baumann

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

177
5 Klassen in Groovy
Bisher haben wir Groovy in der Rolle als Skriptsprache kennengelernt.
In diesem Kapitel werden wir die Funktionalität von Groovy im
Bereich der Klassen und Interfaces kennenlernen. Wir werden Annota-
tionen und generische Datentypen streifen, die ausgezeichnete Unter-
stützung im Bereich der Beans und die Funktionalität von GPaths
behandeln.
Sie sollten Kapitel 4 gelesen haben, da in den Beispielen an vielen
Stellen Konstrukte verwendet werden, die wir dort behandelt haben.
5.1 Physikalische Organisation
Zuordnung von Datei und
Klasse in Java
Bei der Programmierung in Java treffen wir einige Annahmen über die
physikalische Zuordnung von Klassen zu Dateien. Diese entstehen
zum einen durch die in Java verwendete Abbildung der Namensraum-
organisation in Packages auf die unterliegenden Dateisysteme, zum
anderen dadurch, dass wir in Java im Normalfall eine 1:1-Beziehung
von Klassen und gleichnamigen Java-Dateien haben. Diese starke
Beziehung sorgt dafür, dass mehr Dateien als unbedingt notwendig
entstehen.
/ATkRLICH STIMMT DIES NUR BEI OBERFLhCHLICHER #ETRACHTUNG 8IR FINDEN
INNERE,LASSENUNDANONYME,LASSENINDERGLEICHEN%ATEIWIEDIEUMGE
BENDEN,LASSENUNDENTSPRECHENDWIRDlJENACHUNTERLIEGENDEM
#ETRIEBSSYSTEMlDER%ATEINAMEINNERERUNDANONYMER,LASSENZUSAM
MENGESETZTAUSDEM/AMENDERhUeERENGEFOLGTVONDERINNEREN,LASSE
ANONYME,LASSENERHALTENHIERBEIFORTLAUFENDE/UMMERN
"UeERDEM ERLAUBT AUCH +AVA MEHR ALS EINE NORMALE ,LASSE PRO
%ATEI%IESWIRDABERSOSELTENERWhHNTDASSESIN7ERGESSENHEITGERA
TENISTUNDINDER1RAXISNIEVERWENDETWIRD
Innere Klassen und
anonyme Klassen in Java
5 Klassen in Groovy178
Packages in Groovy
Wir haben in Abschnitt 4.1.2 schon festgestellt, dass Groovy die
Namensraumorganisation durch Packages exakt so unterstützt wie
Java. Dies bedeutet, dass wir Groovy-Klassen genau wie Java-Klassen
spezifischen Packages zuordnen können und dies auch tun sollten.
5.1.1 Zuordnung von Datei und Klasse in Groovy
In Groovy existiert die starke Beziehung zwischen Klassen und Dateien
nicht. Dies hat den Vorteil, dass wir zusammengehörige Klassen völlig
problemlos in der gleichen Quelldatei platzieren können. Aus diesen
entstehen – wie zu erwarten – bei der Übersetzung Klassen des gleichen
Namens im gleichen Package. Bei der Verwendung des Compilers wer-
den sie bei der Übersetzung in Klassendateien abgelegt, die den Namen
der jeweiligen Klasse tragen.
Wenn zwischen den verschiedenen Klassendefinitionen Quelltext
gefunden wird, dann identifiziert Groovy diesen als Teil eines Skripts
und übersetzt dieses wie in Abschnitt 4.2 beschrieben. Das Resultat
der Skriptübersetzung landet hierbei in einer Klasse, die dem Dateina-
men des Skripts entspricht.
Interessant wird die Zuordnung von Dateiname zu Klassenname nur
dann, wenn wir Groovy im Interpreter-Modus – also ohne vorher mit
dem Groovy-Compiler übersetzte Klassen zu erzeugen – externe
Groovy-Klassen laden lassen. Dies ist der Fall, wenn wir aus einer
Groovy-Datei eine externe Klasse referenzieren, die noch nicht geladen
wurde. Groovy versucht in diesem Fall diese referenzierte Klasse zu
laden, indem eine Datei mit dem Namen der Klasse und der Erweite-
rung
.groovy ausfindig gemacht wird. Falls dies klappt, werden alle
enthaltenen Klassen geladen.
Wenn auf diese Weise die Klasse nicht gefunden werden kann,
dann meldet Groovy einen Fehler. Dies bedeutet insbesondere, dass
eine Klasse eventuell nicht gefunden wird, obwohl die Datei, in der sie
steht, im Klassenpfad ist, weil sie einen anderen Namen hat.
)IEREXISTIERTEINEKLEINE'ALLEDIEDARAUSENTSTEHTDASSWIRPRINZIPIELLIN
EINEM4KRIPTEINE,LASSEDEFINIERENKjNNENDIEDENGLEICHEN/AMENHAT
WIEDIE4KRIPTDATEI
%IES FkHRT ABER DAZU DASS ZWEI ,LASSEN GLEICHEN/AMENS ENTSTE
HENZUMEINENDIE,LASSEDIEDIE4KRIPTANWEISUNGENENTHhLTUNDZUM
ANDERENDIE,LASSEDIEINNERHALBDES4KRIPTESMITDEMGLEICHEN/AMEN
DEFINIERTWURDEWIEDIE%ATEI%ASSDIESNICHTGUTGEHENKANNISTOFFEN
SICHTLICH
(ROOVY WEIST AUF DIESES 1ROBLEM MIT DER 'EHLERMELDUNG `*NVALID
DUPLICATECLASSDEFINITION_HINUNDVERWEIGERTDIEdBERSETZUNG
Achtung:
Namensgebung bei der
Kombination von Skripten
und Klassen
1795.2 Sichtbarkeiten
Aus diesem Grund ist es angeraten, Klassen, die wir außerhalb der
definierenden Datei verwenden wollen, in einer eigenen Datei mit dem
Namen der Klasse abzulegen, genau wie in Java.
5.2 Sichtbarkeiten
Eine wesentliche Vereinfachung von Groovy ist die geringere Anzahl
von Sichtbarkeiten gegenüber Java. Wir haben dies in Abschnitt 4.2.2
schon kurz beleuchtet, es ist aber wichtig, die Unterscheidungen genau
zu verstehen.
Sichtbarkeiten in Java
In Java gibt es vier verschiedene Arten der Sichtbarkeit: private,
protected, default und public. Diese definieren verschiedene Zugriffs-
rechte gegenüber
Objekten der gleichen Klasse
Objekten von abgeleiteten Klassen
Objekten von Klassen im gleichen Package
Objekten beliebiger anderer Klassen
Hieraus setzen sich die verschiedenen in Java zur Verfügung stehenden
Sichtbarkeiten zusammen.
Interessant hierbei ist, dass die Sichtbarkeiten in Java nicht streng hie-
rarchisch sind. Zwar gilt dies für die Untermenge
private, protected
und public, aber die Standardvorgabe default fällt hier heraus. Tat-
sächlich wird hier versucht, über ein – wie sich im Laufe der Zeit
gezeigt hat – nicht adäquates Zugriffsrecht die Sichtbarkeit
friend aus
C++ nachzubilden; diese erlaubt einer als
friend deklarierten Klasse
auf die inneren Werte eines Objektes zuzugreifen. Während diese in
C++ durchaus sehr sinnvoll zu verwenden ist, ist die Sichtbarkeit
default in Java nur selten vernünftig einsetzbar. Die Erklärung für das
Fehlen der Sichtbarkeit
friend aus C++ mag darin liegen, dass hiermit
natürlich massiv in die Grundprinzipien der Objektorientierung einge-
griffen werden kann.
#3-2>,+<5/3> (?1<300=</-2>
PRIVATE 0BJEKTEDERGLEICHEN,LASSE
PROTECTED 0BJEKTEDERGLEICHEN,LASSE
0BJEKTEVONABGELEITETEN,LASSEN
DEFAULT
7ORGABE
0BJEKTEDERGLEICHEN,LASSE
0BJEKTEVON,LASSENIMGLEICHEN1ACKAGE
PUBLIC 0BJEKTEBELIEBIGER,LASSEN
BEINHALTETALLEANDEREN;UGRIFFSRECHTE
Tab. 5–1
Sichtbarkeiten in Java

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required