public - TU Darmstadt

Werbung
Grundzüge der Informatik
V7. Einführung in Java
Prof. Dr. Max Mühlhäuser
FG Telekooperation
TU-Darmstadt
Agenda
• Kurze Geschichte von Java
• Die Java-Übersetzungs- und Ausführungsumgebung
• Java-Programme
• Pakete
• Zugriffsrechte und Sichtbarkeit
27. 11. 2002 © MM ...
GDI - Einführung in Java
2
Kurze Geschichte von Java
• Java wurde seit 1991 von einem kleinen Team unter
Leitung von James Gosling bei SUN entwickelt
• Vize-Präsident von
Sun Microsystems, Inc.
• Chef-Ingenieur und
maßgebender Architekt
der Java-Technik
• Seit 1984 befasst er sich mit
verteilten Computersystemen
27. 11. 2002 © MM ...
GDI - Einführung in Java
3
Kurze Geschichte von Java
• Ursprüngliches Ziel: Entwicklung einer
Programmiersprache zur Programmierung von
elektronischen Geräten der Konsumgüterindustrie
– Waschmaschinen, Toaster, Videogeräte, usw. (ubiquitous
computing)
– Projekttitel: OAK (Object Application Kernel)
• Die Zielsetzung wurde später geändert
• Neue Zielsetzung: Entwicklung einer
Programmiersprache, die sich in besonderer Weise
zur Programmierung auf verschiedensten
Rechnertypen im Internet eignet
27. 11. 2002 © MM ...
GDI - Einführung in Java
4
Kurze Geschichte von Java
• Seit 1995 bietet SUN den Kern eines
Javaprogrammiersystems JDK (Java Development Kit)
zusammen mit einer Implementierung des JavaInterpreters (JVM) kostenlos an
• Die meisten kommerziellen Programmierumgebungen für
Java nutzen das JDK als Kernsystem
27. 11. 2002 © MM ...
GDI - Einführung in Java
5
Warum der „Lärm“ um Java?
• Hat in erster Linie nichts mit der Sprache an sich zu tun, sondern
eher mit der Art und Weise, wie sie eingesetzt werden sollte!
• Zwei Hauptgründe:
– Die Notwendigkeit das WWW programmieren zu können
Æ Java Applets
– Die Notwendigkeit eines Wechsels des Programmierparadigmas als
Folge der Internet-Entwicklung
27. 11. 2002 © MM ...
GDI - Einführung in Java
6
Warum der „Lärm“ um Java?
Java zum Programmieren im WWW
• HTML hatte sich gerade als Sprache für Web-Seiten
etabliert
• Allerdings: Erweiterungen um neuen Fähigkeiten
sehr aufwändig
– für jedes neue Merkmal der Sprache müsste man die
Millionen von Browsern modifizieren
• Grobe Idee zur Lösung des Problems: ein Dokument
enthält ein Programm, das in der Lage ist, das
Dokument anzuzeigen
• Der Browser muss nur in der Lage sein, das
Programm auszuführen
27. 11. 2002 © MM ...
GDI - Einführung in Java
7
Warum der „Lärm“ um Java?
Java zum Programmieren im WWW
• Zwei wichtige Probleme mussten noch gelöst werden, damit
diese Idee funktioniert
– Unabhängigkeit von der jeweiligen Plattform, auf dem der
Browser läuft, muss gewährleistet sein
– Sicherheit: Programme aus nicht vertrauenswürdigen
Quellen im Internet auf dem eigenen Rechner laufen zu
lassen, ist so als würde man krampfhaft nach Problemen
suchen!
Java versprach, die beiden angesprochenen
Probleme zu lösen!
27. 11. 2002 © MM ...
GDI - Einführung in Java
8
Warum der „Lärm“ um Java?
Java zum Programmieren im WWW
• Plattform-Unabhängigkeit
– wird dadurch gewährleistet, dass Java auf einer virtuellen
Maschine basiert
– Java-Compiler erzeugen keinen Maschinencode, sondern
einen Bytecode, die von der Java VM interpretiert wird
– Dieser Code läuft auf jeden plattformübergreifenden
Browser, in dem eine JVM integriert ist
• Die Integration einer VM ist zwar ein neues Merkmal der
Browser, die aber nur einmal implementiert werden soll
27. 11. 2002 © MM ...
GDI - Einführung in Java
9
Warum der „Lärm“ um Java?
Java zum Programmieren im WWW
• Sicherheit
– Java VM implementiert aufwändige
Sicherheitsschutzmaßnahmen, die sehr schwierig in
Maschinencode einzubauen sind
• z.B. erlaubt die VM keinen direkten Zugriff auf den
Speicher eines anderen Programms
• … das stellt (eigentlich) auch ein normales Betriebssystem sicher, das Java- „Sandbox-Model“ geht weiter
und verbietet i.a. Zugriff auf Dateien u.v.m.
– Javas statisches Typsystem, ergänzt durch
Laufzeitüberprüfungen, erschwert oder verhindert die
Modifikation von Bytecode durch Hacker (Bemerkung:
streng typisierte Sprachen haben eigentlich andere
Vorteile, die Typsicherheit ist hier nur der ‚Aufhänger‘).
27. 11. 2002 © MM ...
GDI - Einführung in Java
10
Warum der „Lärm“ um Java?
• Viele der Merkmale, die Java zu der Internetsprache
machten, gab es schon vorher in anderen
Programmiersprachen
• Java war eine Art „Best-Of“
• Java war zum richtigen Zeitpunkt fertig!
27. 11. 2002 © MM ...
GDI - Einführung in Java
11
Java Übersetzungs- und Laufzeitumgebung
Entwicklung
Ausführung (Runtime Environment)
Java
Quelltext
(.java)
Java
Compiler
Java
Bytecode
(.class)
Class-Loader
Java
Bytecode vom
lokalen
Rechner oder
aus dem
Netzwerk
KlassenBibliothek
Bytecode
Verifier
Interpreter
Just-in-Time
Compiler
Java-VM
Laufzeitumgebung
Betriebssystem
Hardware
27. 11. 2002 © MM ...
GDI - Einführung in Java
12
Java Übersetzungs- und Laufzeitumgebung
• Java-Compiler
– Eingabe: Java-Quelltextdatei, die eine Klassendefinitionen
enthält
• Eine derartige Datei nennt man eine Übersetzungseinheit
• Mehrere Klassen in einer Datei sind möglich, aber schlechter
Programmierstil – vorerst (für unsere ‚Mickymaus-Beispiele‘)!
– Ausgabe: pro Klasse X wird genau eine Datei X.class erzeugt, die
das Bytecode-Format der Klasse enthält
Datei.java
27. 11. 2002 © MM ...
Compiler
class Bsp1 {...}
class Bsp2 {...}
class Bsp3 {...}
Bsp1.class
GDI - Einführung in Java
Bsp2.class
Bsp3.class
13
Java Übersetzungs- und Laufzeitumgebung
Java Virtual Machine
• Wichtige Festlegungen der JVM-Spezifikation
– Befehlsatz, Registerarchitektur
– Struktur einer .class-Datei (auch Class File Format genannt)
– Eigenschaften der Laufzeitumgebung: Stack, Garbage-collected
Heap, Speicher-Layout
• Bei der Implementierung der JVM für eine Hardware-/
Betriebssystemarchitektur müssen bestimmte Java-APIs
über das Betriebssystem ausgeführt werden
– Datei- und Netzwerkzugriffe
– GUI
27. 11. 2002 © MM ...
GDI - Einführung in Java
14
Java Übersetzungs- und Laufzeitumgebung
• Java-Interpreter
– Programm zur Ausführung der Java-Bytecodes auf dem
konkreten Rechner
• Just-In-Time Compiler (JIT-Compiler)
– Eine Klasse kann (im Idealfall) nach dem Laden direkt in
Maschinen-Code der jeweiligen Maschine übersetzt werden
– Falls die vorliegende Java-Installation keinen JIT-Compiler
besitzt, wird der Bytecode vom Java-Interpreter ausgeführt
27. 11. 2002 © MM ...
GDI - Einführung in Java
15
Java Übersetzungs- und Laufzeitumgebung
• Runtime System
– Stellt einem Java-Programm wichtige Ressourcen zur
Verfügung
• Class Loader
– Klassen können über das Netz oder aus dem lokalen
Dateisystem zur Laufzeit einer Java-Anwendung in dem
Laufzeitsystem nachgeladen werden
– Der Bytecode-Verifier überprüft, ob die geladenen Bytecodes
der JVM-Spezifikation entsprechen
Æ Ein Teil der Sicherheitsmaßnahmen werden hierdurch
realisiert
27. 11. 2002 © MM ...
GDI - Einführung in Java
16
Java Übersetzungs- und Laufzeitumgebung
Binden, Laden und Ausführung von Programmen
Rolle des Linkers (Binder)
• Ein vom Compiler erzeugtes Programm (Objektmodul, Object
Code) ist in der Regel nicht sofort lauffähig
• Es kann Verweise auf externe Programmbestandteile (externe
Referenzen) enthalten
– z.B. Aufrufe von Routinen des Betriebssystems zum Lesen und
Ausgeben von Dateien
• Derartige Routinen sind meist in externen Bibliotheken
gespeichert
– Liegen in Dateisystem
• Vor Ausführung müssen diese Verweise aufgelöst werden
27. 11. 2002 © MM ...
GDI - Einführung in Java
17
Java Übersetzungs- und Laufzeitumgebung
Binden, Laden und Ausführung von Programmen
Rolle des Linkers
• Deswegen wird außer dem Compiler auch ein Linker (Binder,
Linkage Editor) gebraucht
• Aufgabe des Linkers
– Auflösung der externen Referenzen, indem die symbolischen
Verweise durch die entsprechenden Moduladressen ersetzt
werden
– Das Ergebnis: ein lauffähiges Programm
27. 11. 2002 © MM ...
GDI - Einführung in Java
18
Java Übersetzungs- und Laufzeitumgebung
Binden, Laden und Ausführung von Programmen
Speicher
Bibliothek A
Methode A1
Methode A2
Speicherbereich
für X
Programm X
Methode An
Methode A1
Programm X
verwendet externe
Methode A1
27. 11. 2002 © MM ...
Linker
Lademodul
GDI - Einführung in Java
Loader
19
Java Übersetzungs- und Laufzeitumgebung
Binden, Laden und Ausführung von Programmen
Varianten bei der Ausführung des Bindevorgangs
• Statisches Binden
– Nach dem Compilieren wird eine vollständig lauffähige
Programmdatei erzeugt
• Dynamisches Binden
– bestimmte Teile des Bindevorgangs werden zeitlich verzögert
– Ausführung während des Ladens des Programms
Æ Load-Time Dynamic Linking
– Ausführung zur Laufzeit des Programms
Æ Run-Time Dynamic Linking
27. 11. 2002 © MM ...
GDI - Einführung in Java
20
Java-Programme
• Java Anwendungen (Application)
– Java-Programme, die direkt auf der Betriebssystemebene
gestartet werden kann
– Bestehen aus einer oder mehreren Klassen
– (mindestens) eine Klasse muss eine main-Methode enthalten
– Wird mit Hilfe des Java-Interpreters gestartet und ausgeführt
• Es gibt noch andere Varianten von Java-Programmen
– Kommen später im Studium
– Kleine Auswahl:
• Applets – werden in HTML-Seiten eingebunden
• Midlets – laufen auf Mobiltelefonen und Set-Top-Boxen
• Servlets – zum Programmieren von Web-Servern
27. 11. 2002 © MM ...
GDI - Einführung in Java
21
Struktur eines Java-Programms
• Ein Java-Programm kann aus beliebig vielen Klassen bestehen
• Mindestens eine der Klassen muss eine main-Methode besitzen
(Hauptprogrammklasse):
public static void main(String[] args)
– args ist eine Folge von Strings und wird benutzt um dem Programm
beim Start Parameter zu übergeben
– Eingabeparameter stehen zunächst nur als Zeichenketten zur
Verfügung
– Möchte man etwa eine Zahl übergeben, so muss die entsprechende
Zeichenkette (programmintern) in eine Zahl (z.B. vom Typ int)
konvertiert werden – mehr dazu später
– Statt args kann ein beliebiger Name benutzt werden, die Verwendung
von args ist üblich
27. 11. 2002 © MM ...
GDI - Einführung in Java
22
Struktur eines Java-Programms
Aufgabe der main-Methode
• Erzeugung von Objekten Æ Aufbauen einer anfangs
minimalen Welt
• Aufruf der ersten Methode eines Objekts
• Sollte in der Regel keinen weitergehenden Kontrollfluss des
Java-Programms enthalten
• Der Kontrollfluss wird innerhalb der Objektoperationen
realisiert
• Nicht vergessen: Progamm sollte realisiert werden durch
– Kooperation von vielen Objekten
– jedes Objekt erledigt nur eine Teilaufgabe!
27. 11. 2002 © MM ...
GDI - Einführung in Java
23
Java-Pakete: Überblick
Pakete (Packages) ermöglichen:
• Bündeln von Klassen und Schnittstellen, die zu einem
gemeinsamen Aufgabenbereich gehören
• Vermeiden von potentiellen Namenskonflikten
– Klassennamen müssen innerhalb eines Pakets eindeutig sein
– Ein Klassenname kann in anderen Paketen erneut verwendet
werden
• Definition und Kontrolle von Zugriffen und Sichtbarkeit
27. 11. 2002 © MM ...
GDI - Einführung in Java
24
Java-Pakete: Überblick
• Jede Klasse (und jede Schnittstelle) in Java ist
Bestandteil genau eines Pakets
– Ist eine Klasse (oder eine Schnittstelle) nicht explizit einem
Paket zugeordnet, dann gehört es implizit zu einem defaultPaket
• Paket-Hierarchie
– Pakete sind hierarchisch gegliedert
Æ ein Paket kann Unterpakete besitzen, die selbst wieder in
Unterpakete aufgeteilt sind, usw.
• Punktnotation der Paketnamen
paket.unterpaket1.unterpaket11.Klasse
• Paketnamen sind sehr wichtig bei der Suche nach
Klassen
27. 11. 2002 © MM ...
GDI - Einführung in Java
25
Java-Pakete
• Zu welchem Paket eine Klasse gehört, wird in der
zugehörigen .java-Datei bestimmt
• Der Quelltext eines gesamten Java-Programms kann
über mehrere Klassen und damit Dateien verteilt sein
• Typdefinitionen einer Datei können auch zu mehreren
Programmen gehören (d.h. von ihnen verwendet
werden) Æ Wiederverwendung
27. 11. 2002 © MM ...
GDI - Einführung in Java
26
Java-Pakete
• Struktur einer .java-Datei:
<Source-File> ::= <Package-Declaration> <Import-Declarations>
<Type-Definitions>
<Package-Declaration> ::= package <Package-name> ; | ε
<Package-Name> ::= <Identifier> | <Identifier> . <Package-Name>
• Vor der Package-Declaration dürfen nur Kommentare und
Leerzeilen stehen
• Nur eine Package-Declaration pro Datei
• Wird die Package-Declaration weggelassen, ist die Datei Element
des Default-Package
27. 11. 2002 © MM ...
GDI - Einführung in Java
27
Java-Pakete
Paketdeklaration
• Der selbe Paketname kann in mehreren Dateien verwendet werden
– Typdefinitionen, die zu einem Paket gehören, können somit über
mehrere Übersetzungseinheiten verteilt sein
Æ Kürzere Übersetzungszeiten
Æ Arbeitsaufteilung in großen Projekten wird unterstützt
• Paketname wird implizit jedem im Paket enthaltenen Typnamen
vorangestellt Æ Abtrennung durch einen Punkt
– Der vollständige Name einer Klasse ist
packagename.classname
27. 11. 2002 © MM ...
GDI - Einführung in Java
28
Java-Pakete
Import-Deklaration
<Import-Declarations> ::= <Import-Declaration> |
<Import-Declaration> <Import-Declarations>
<Import-Declaration> ::= import <Package-Name>.<Class-Name>; |
import <Package-Name>.*;
• Wird der Klassenname angegeben, kann auf diesen künftig ohne
Angabe des Pakets zugegriffen werden
• Wird * angegeben, können sämtliche im Paket enthaltene Klassen
ohne weitere Angabe des Paketnames verwendet werden
27. 11. 2002 © MM ...
GDI - Einführung in Java
29
Java-Pakete
Nutzen von Klassen eines anderen Pakets
• Volle Qualifizierung der Klasse, z.B.
java.util.Random einZufall = new
java.util.Random();
• import-Anweisung, z.B.
import java.util.Random;
...
Random einZufall = new Random();
27. 11. 2002 © MM ...
GDI - Einführung in Java
30
Java-Pakete
Nutzen von Klassen eines anderen Pakets
• import paket.* : alle Klassen des Pakets, z.B.
import java.util.*;
...
Random einZufall = new Random();
• Schlechter Stil: für Leser ist unklar, was gebraucht wird
• Nur wenn (fast) alle Typdefinitionen eines Pakets
benötigt werden, ist die *-Form angebracht
27. 11. 2002 © MM ...
GDI - Einführung in Java
31
Import von Paketen
• Durch die Verwendung von Import-Anweisungen können
Namenskonflikte auftreten
– Existieren identische Typnamen in mehr als einer der importierten
Pakete, muss bei der Verwendung dieser Namen immer das Paketpräfix
benutzt werden, z.B.
import java.awt.*; // Enthält eine Klasse List
import java.util.*; // Enthält ebenfalls eine Klasse List
...
java.util.List list; // Packagename verwenden um
festzustellen, welche List verwendet wird
• In jeder Datei werden einige Pakete automatisch importiert:
– Das eigene Paket
– Das vordefinierte Paket java.lang
• enthält elementare Klassen wie z.B. Object, String
27. 11. 2002 © MM ...
GDI - Einführung in Java
32
Import von Paketen
• Zu Java gehören eine Vielzahl vordefinierter Pakete, die
mit dem JDK ausgeliefert werden, z.B.:
–
–
–
–
–
–
java.applet
java.io
java.net
java.util
java.util.zip
usw.
27. 11. 2002 © MM ...
Applet-Unterstützung
Ein- und Ausgabe für Dateien
Netzwerkprogrammierung
Helferklassen, z.B. Zufallszahlengenerator
Helferklassen zum Verwenden von .zip-Dateien
GDI - Einführung in Java
33
Paketbenennung
• Paketnamen spielen eine zentrale Rolle für die Vermeidung bzw.
Auflösung von Namenskonflikten
– sollten bedeutungstragend sein
– sollten möglichst eindeutig sein, am besten weltweit
• Konventionen zur Konstruktion weltweit eindeutiger Paketnamen
– Der Paketname enthält als Präfix den Internet-Domain-Namen der
Hersteller in umgekehrter Reihenfolge
– Bindestriche sind in Paketnamen nicht erlaubt
– Beispiele
• URL der Firma Sun: sun.com
• Klassen der Firma Sun: com.sun.paket1.paket11.Klasse
• URL der TU Darmstadt: informatik.tu-darmstadt.de
• Klassen der TU Darmstadt:
de.tudarmstadt.informatik.paket1.paket11.Klasse
27. 11. 2002 © MM ...
GDI - Einführung in Java
34
Paketbenennung
Paketnamen und Dateisystemstrukturen
• Für die Zuordnung von Paketnamen zu Dateinamen müssen
Punkte im Paketnamen durch das Trennzeichen des
Betriebsystems ersetzt werden
– UNIX: / Æ Slash
– Microsoft-Betriebsysteme \ Æ Backslash
• Beispiel:
– Paketname: kilian.hobby.raytracer
– Zugehöriger UNIX-Verzeichnisname:
kilian/hobby/raytracer
– Zugehöriger Windows-Verzeichnisname:
kilian\hobby\raytracer
27. 11. 2002 © MM ...
GDI - Einführung in Java
35
Suche nach Paket- und Typnamen
• Ein Paketname wird als relativer Pfadname aufgefasst
• Die Betriebssystemvariable CLASSPATH definiert die
Verzeichnisse, ab denen ein Paketname gesucht wird
• Einträge in einer CLASSPATH-Spezifikation können
Verzeichnisse, ZIP- oder JAR-Dateien sein, die Klassen
enthalten
Trennt einzelne
Verzeichnisse
• Beispiel UNIX-Betriebssystem:
CLASSPATH=.:/home/joe/classes:/usr/local/classes.zip
• Beispiel Windows-Betriebssystem
set CLASSPATH=.;C:\joe\classes;D:\local\classes.zip
27. 11. 2002 © MM ...
GDI - Einführung in Java
36
Suche nach Paket- und Typnamen
• Die Verzeichnisse aus CLASSPATH sind die Ausgangspunkte für den
relativen Pfadnamen, der über den Paketnamen festgelegt ist
• Die Verzeichnisse aus CLASSPATH werden in der angegebenen
Reihenfolge durchsucht (von links nach rechts)
• Prinzipiell können mehrere Verzeichnisse existieren, die über einen
Paketnamen gefunden werden können
– Keine gute Idee, da es dann von der in CLASSPATH definierten
Reihenfolge abhängt, welche Pakete (und damit Typdefinitionen)
tatsächlich verwendet werden
27. 11. 2002 © MM ...
GDI - Einführung in Java
37
Suche nach Paket- und Typnamen
• Eigene Pakete
– Der Compiler löst den hierarchischen Namen in eine Kette von
Unterverzeichnissen auf, an deren Ende die Quelldatei steht
– Neben der Quelldatei wird auch die Klassendatei in diesem
Unterverzeichnis abgelegt
– Der Java-Compiler übersetzt eingebundene Quelldateien, die
noch nicht übersetzt sind, automatisch mit, z.B.:
package mypackage;
import mypackage.subpackage.SomeClass;
class MainClass {
private SomeClass xy;
public static void main(String[] args) {
...
}
}
• Wird javac mypackage\MainClass.java aufgerufen, wird automatisch
auch mypackage\subpackage\SomeClass.java compiliert
27. 11. 2002 © MM ...
GDI - Einführung in Java
38
Zugriffsrechte und Sichtbarkeit
• Erinnern sie sich? (V.5 S. 6)
–
–
Mit dem Modifier kann festgelegt werden, ob abgeleitete Klassen auf
Attribute (und Methoden) zugreifen dürfen
<Modifier> ::= private | ε | protected | public
–
Mehr dazu später
• Java erlaubt eine gezielte Vergabe von Zugriffsrechten, und zwar
einzeln für jede Methode und jedes Attribut
• Vier verschiedene Zugriffskategorien
– Private Elemente (private)
– Geschützte Elemente (protected)
– Öffentliche (public)
– Implizit: Paketbezogen (keine Angaben)
27. 11. 2002 © MM ...
GDI - Einführung in Java
39
Zugriffsrechte und Sichtbarkeit
• implizit (Ohne Angabe einer Zugriffskategorie)
– Das Element einer Klasse – ein Attribut, eine Methode oder
ein Konstruktor – ist nur innerhalb des Pakets sichtbar, in
dem die Klasse definiert ist
– Das gilt für Nachfahren und Nicht-Nachfahren
– Von außerhalb des Pakets ist kein Zugriff möglich
27. 11. 2002 © MM ...
GDI - Einführung in Java
40
Zugriffsrechte und Sichtbarkeit
• private: Nur Objekte der selben Klasse dürfen auf das
Element zugreifen
class A {
private void op1() { ... }
public void op2(A anAObject) {
... anAObject.op1(); ... // OK
}
}
• protected: Alle Klassen im gleichen Paket dürfen auf das
Element zugreifen, sowie alle Klassen, die davon erben (egal in
welchem Paket definiert)
• public: Zugriff von überall erlaubt
27. 11. 2002 © MM ...
GDI - Einführung in Java
41
Zugriffsrechte und Sichtbarkeit
private
implizit
protected
public
Eigene
Klasse
27. 11. 2002 © MM ...
Erben im
gleichen
Paket
Im Paket
GDI - Einführung in Java
Erbe in
anderem
Paket
Im anderen
Paket
42
Zugriffsrechte und Sichtbarkeit
package
packageA;
A;
public
publicclass
classAA
AA{{
public
publicint
intone;
one;
int
inttwo;
two;
private
privatevoid
voidthree()
three(){{…
…}}
protected
protectedvoid
voidfour()
four(){{…
…}}
}}
package
packageA;
A;
class
classAB
AB {{
////one,
one,two,
two,four
four
}}
27. 11. 2002 © MM ...
package
packageA;
A;
class
classAC
ACextends
extendsAA
AA {{
////one,
one,two,
two,four
four
}}
package
packageB;
B;
class
classBA
BAextends
extendsAA
AA{{
////one,
one,four
four
}}
package
packageB;
B;
class
classBB
BB{{
////one
one
}}
GDI - Einführung in Java
43
Zugriffsrechte und Sichtbarkeit
• Kategorien für Klassen und Schnittstellen
– Entweder public oder implizit
– Ohne public-Angabe Verwendung nur innerhalb des
Pakets, in dem die Deklaration steht
– public
• Weltweit
• Es darf nur eine Klasse pro Datei als public deklariert
werden
– Die Klasse muss den gleichen Namen wie die Datei
haben
27. 11. 2002 © MM ...
GDI - Einführung in Java
44
Zugriffsrechte und Sichtbarkeit
Zugriffskategorien beim Überschreiben
• Beim Überschreiben einer Methode wird die geerbte
Zugriffskategorie zunächst beibehalten
• Zugriffsrechte dürfen nur erweitert, aber nicht eingeschränkt
werden
• Grund für diese Regel: Ersetzbarkeit
– Es muss möglich sein, einem Namen Objekte aller Unterklassen
des statischen Typs zuzuordnen (siehe V.3 S. 86)
– Daher muss die Unterklasse nach außen hin mindestens alles das
zur Verfügung stellen, was auch ihr Vorfahr zur Verfügung stellt
– Beim Überschreiben darf der Zugriff daher nicht weiter
eingeschränkt werden
27. 11. 2002 © MM ...
GDI - Einführung in Java
45
Zugriffsrechte und Sichtbarkeit
Zugriffskategorien beim Überschreiben
• private-Methoden, die in Unterklassen neu
definiert werden, dürfen eine beliebige Kategorie
besitzen
– Grund: private-Methoden werden nicht vererbt
• Methoden mit impliziter Zugriffskategorie können so
bleiben oder als protected oder public
überschrieben werden
• protected darf als public überschrieben werden
• public-Methoden müssen public bleiben
27. 11. 2002 © MM ...
GDI - Einführung in Java
46
Die Bedeutung der Zugriffsrechte
• Information Hiding (Parnas)
– Jedes Objekt enthält die Details seiner Realisierung
– Nach außen soll so wenig wie möglich von den Details der
Realisierung sichtbar sein
• Vererbung bricht Einkapselung
– Ein Erbe übernimmt die Implementierung seiner Vorfahren
– Führt eine Abhängigkeit zwischen Ahnen und Erben ein
• Regel: es ist sinnvoll, so viele Attribute und
Operationen wie möglich mit dem
Sichtbarkeitsattribut private zu deklarieren
27. 11. 2002 © MM ...
GDI - Einführung in Java
47
Herunterladen