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