Sichtbarkeit Schnittstellen, Protokolle, Treiber, Information hiding, Datenkapselung, Zugriffsattribute, Pakete, Polymorphie, Java-Interfaces, Klassenhierarchie, Information hiding n Anwendungen stellen bereit ¨ ¨ n Programme verwenden ¨ ¨ ¨ n Informationen Dienste Variablen Methoden Klassen Einige davon sind für den Anwender bestimmt ¨ main ¨ Menüfunktionen n Andere sind nur interne Hilfskonstrukte ¨ ¨ ¨ n lokale Variablen Hilfsmethoden Hilfsklassen Jegliche interne Information sollte dem Anwender verborgen und unzugänglich bleiben Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Versteck: Lokale Variablen n Lokale Variable ¨ Innerhalb eines Blockes deklarierte Variable ¨ Außerhalb des Blockes ist sie nicht sichtbar ¨ te m p int x=4, y=17; { int temp; temp = x; x = 17; y = temp; } System.out.println( “x =“+x+“ y =“+ y +“ temp =“+temp); ¨ Blöcke Praktische Informatik I sind Datenschachteln Fehler temp ist nur innerhalb des Blockes sichtbar H. Peter Gumm, Philipps-Universität Marburg Versteck: Methodenrumpf n Der Rumpf einer Funktionsdefinition ist ein Block. ¨ n Im Rumpf definierte Variablen sind außen nicht sichtbar Schnittstellen von Methoden sind ¨ ¨ Parameter Rückgabewert. int myMethod( int m , int n ) { Versteckt dem Benutzer der Methode unsichtbar Praktische Informatik I int temp; ... tuWas... return ergebnis Schnittstellen ; } H. Peter Gumm, Philipps-Universität Marburg Private Felder n konto_1 Kein direkter Zugriff mehr nummer : 621 736 172 inhaber : “Donald Duck“ private kontoStand : Der einzige Weg, Um kontoStand zu lesen bzw. zu ändern einzahlen ¨ betrag : n Methoden anderer Klassen können nicht auf diese Felder zugreifen n Objekte der gleichen Klasse haben Zugriff n Beispiel Konto: ¨ abheben betrag : empfänger : überweisen private verbirgt man Felder einer Klasse nach aussen. 100 000 000 getKontoStand Mit dem Schlüsselwort Selbst wenn wir das Feld kontoStand nach außen verstecken, können wir von einem anderen Konto noch zugreifen – z.B. beim Überweisen. betrag : Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Weitere Zugriffsattribute n public Felder sind explizit freigegeben ¨ ¨ n überall sichtbar ggf. muss man die definierende Klasse benennen (importieren) Felder ohne Zugriffsattribute ¨ ¨ ¨ n Zugriffsattribut heißt auch „package“ in jeder Klasse des gleichen Pakets sichtbar nicht in anderen Paketen ZugriffsSchutz protected Felder und Methoden ¨ ¨ ¨ in der Klasse und in allen Unterklassen sichtbar Die genaue Spezifikation ist relativ kompliziert. Wer es genau wissen will: n n niedrigster http://java.sun.com/docs/books/jls/second_edition/h tml/names.doc.html#62587 private Felder und Methoden ¨ ¨ Praktische Informatik I nur in der definierenden Klasse sichtbar nicht in Unterklassen höchster H. Peter Gumm, Philipps-Universität Marburg Datenkapselung ¨ ¨ ¨ n private class private method private field Öffentliche Methoden definieren Benutzer-Schnittstelle ¨ ¨ public class public method public field Praktische Informatik I einzahlen private kontoStand … getkonto Stand ben abhe ¨ en Datenobjekte werden vor direktem Zugriff geschützt über weis n H. Peter Gumm, Philipps-Universität Marburg Beispiel: Datum n n UNIX repräsentiert Datum durch Millisekunden seit 1.1.1970 GMT getter und setter n n n n getDay(), getMonth(), getYear() getWeekday() setDate(), setTime(), setMsec() isLeapyear() Datenkapselung: ¨ ¨ n setter Schnittstelle: Zugriffsmethoden ¨ n getter Verstecken der Repräsentation Verstecken von Hilfsmethoden getDay getMonth ¨ setTime getYear setMsec getWeekday isLeapYear Repräsentation kann man ändern n ¨ private 1033530810062731 Vorteil ¨ setDate z.B.(tag,monat,Jahr,std,min,sec,ms) Zugriffsmethoden bleiben Anwendungsprogramme müssen weiter funktionieren Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Pakete n Java Anwendungen bestehen aus vielen Klassen n Zusammengehörige Klassen werden zu einem Paket zusammengefasst n Jede Klasse gehört zu einem Paket ¨ n Um eine Klasse einem Paket hinzuzufügen, muss die erste Zeile lauten: ¨ n Wenn nichts gesagt wird, zu default . package paketName ; Auf vielen Plattformen hat man die Entsprechung ¨ ¨ ¨ Praktische Informatik I class Meine ≅ Datei Meine.java .. nach der Compilation: Meine.class package meinPaket ≅ Verzeichnis meinPaket H. Peter Gumm, Philipps-Universität Marburg Paketzugriff n n Klassen, Methoden und Felder in fremden Paketen sind nicht zugreifbar Ohne spezielle Attribute nur im eigenen Paket sichtbar ¨ n class Würfel int topFace public void roll() roll() Becher() public class Becher public void roll() public int result() roll() result() Abhilfe: ¨ n (package private) package lasVegas Als public deklarieren Vergleiche javadoc ! Praktische Informatik I class Statistik private int[][] ergebnis public static void verteilung() verteilung() H. Peter Gumm, Philipps-Universität Marburg Pakethierarchie n Pakete können hierarchisch organisiert werden. n Der volle Name besteht aus dem Pfad zu dem Paket ¨ n n text awt kapitel1 html java.awt.event, java.awt.color javax.swing.text.html.parser praktInf.kapitel1 color event parser Die Wurzeln der Hierarchien werden, durch Semikolon getrennt, in der Variablen CLASSPATH mitgeteilt ¨ javax Beispiele: n n java praktInf CLASSPATH=.; C:\Programs\bluej\examples ; C:\mypackages; C:\DokumentsandSettings\praktInf\kapitel1 Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Referenzieren Klasse Date im Paket java.util n Pfad nötig, um Klassen in anderen Paketen anzusprechen ¨ n Compiler und JRE suchen unter den in CLASSPATH angegebenen Einstiegspunkten Klassen werden durch Voranstellen des Paketnamens eindeutig: z.B. java.util.Date : ¨ ¨ java.util ist das Paket Date ist die Klasse Oder direkt im Codepad: n Wichtig: ¨ Klasse Date muss public sein ! Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Internationale Pakete n Klassen werden oft im Internet bereitgestellt n Mit der Internet-Adresse im package-Namen erreicht man Eindeutigkeit ¨ de.unimarburg.informatik.ftp.javaKram.Würfel bezeichnet die ¨ ¨ ¨ ¨ ¨ n Klasse Würfel im Verzeichnis javaKram auf dem Rechner ftp In der Subdomain uni-marburg der Domain de Das Paket muss vor der Benutzung auf den lokalen Rechner geladen und installiert werden Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Paket-Registrierung in BlueJ n Beispiel: ¨ Programmierung von email-Versand in Java ¨ wir brauchen geeignete Klassen aus n n javamail-API und in dem java-activation-framework ¨ bei java.sun.com herunterladen und entpacken. ¨ Verzeichnisse enthalten jar-Dateien n n ¨ mail.jar, bzw activation.jar in den Klassenpfad aufnehmen n entweder durch Setzen von CLASSPATH n oder in Bluej registrieren Einstellungen →Bibliotheken → Hinzufügen Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Brief basteln und senden Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Standard Pakete n gehören zum offiziellen Sprachumfang von Java: ¨ java.lang n n n enthält u.a. die Klassen System, String, Object, braucht nicht importiert zu werden Andere Standard Pakete ¨ java.net Für Internet-Programmierung ¨ java.text Zum Editieren und Formatieren von Text, Zahlen, etc. ¨ java.awt (AWT=Abstract Windowing Toolkit) für GUI-Programmierung ¨ javax.swing Modernere, plattformübergreifende Dialogkomponenten ¨ java.applet Applets werden als Unterklasse von java.applet.Applet realisiert ¨ java.io Klassen für Ein/Ausgabe ¨ java.util Nützliches, wie z.B. Datum, Behälter, Listen, etc. Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Die Java-Klassenhierarchie nn Ein EinBaum Baummit mitWurzel WurzelObject Object ¨¨ Jede Object JedeKlasse Klasseist istUnterklasse Unterklassevon vonObject nn Jede JedeKlasse Klassewird wirdinindie dieHierarchie Hierarchieeingehängt eingehängt n n class class MyClass MyClass extends extends Thread{ Thread{ ... ... }} ¨¨ default: Object default:unter unterObject n n class class MyClass{ MyClass{ ... ... }} ¨¨ ist istgleich gleichbedeutend bedeutendmit mit n n nn class class MyClass MyClass extends extends Object{ Object{ ... ... }} Einge EingeKlassen Klassendürfen dürfennicht nichtbeerbt beerbtwerden werden ¨¨ Sie Siesind sindals alsfinal finaldeklariert deklariert n n public public final final Boolean{ Boolean{ ... ... }} ¨¨ Danach Danachist istillegal: illegal: n n nn public public myClass myClass extends extends Boolen{ Boolen{ ... ... }} Jedes JedesPaket Paketerweitert erweitertdiese dieseHierarchie Hierarchie Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Klassenhierarchie java.lang Boolean Boolean Character Character Teil der immer vorhandenen Klassenhierarchie in Double Double Math Math Float Float Number Number Object Object Process Process Long Long String String java.lang Integer Integer System System Throwable Throwable Thread Thread Legende: Praktische Informatik I class class final finalclass class abstract abstractclass class Error Error Exception Exception final, final,non-instantiable non-instantiable H. Peter Gumm, Philipps-Universität Marburg Vererbung von Methoden n Jede Klasse ist Unterklasse von Object n Jede Operation und jede Methode von Object ist in jeder Klasse verfügbar, z.B.: ¨ ¨ ¨ n == (Testet Objekte auf gleiche Referenz) equals() toString() Aber default oft nicht gut genug: ¨ ¨ equals() testet von Hause aus auch auf gleiche Referenz toString() gibt Klassennamen mit Referenz ausl: Konto test = new Konto(„Otto“); System.out.println(test.toString()); ergibt Konto@a1d1f4 n In eigenen Klassen sollten diese Methoden redefiniert werden, z.B.: Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Polymorphie n Fähigkeit verschiedene Formen anzunehmen n Im OO-Programmieren: ¨ ¨ ¨ Methoden der Oberklasse sind auch auf Objekte der Unterklasse anwendbar Sie können für Objekte der Unterklasse re-definiert werden Sie sollten semantisch ähnliches Verhalten aufweisen n n ¨ toString() aus Objekt funktioniert für alle Unterklassen; dort kann man es aber aussagekräftiger implementieren druckeAuszug() aus Konto funktioniert auch für Sparkonten Methoden gleichen Namens können verschiedene Signaturen haben n n n n n Praktische Informatik I Konto() Konto(String inhaber); Konto(int nummer, String inhaber) Integer parseInt(String zahl) Integer parseInt(int zahl) H. Peter Gumm, Philipps-Universität Marburg Weitere Teile der Hierarchie java.util java.lang n Jedes Paket ergänzt die Klassenhierarchie ¨ BitSet BitSet Date Date Z.B. java.util HashTable HashTable Dictionary Dictionary Object Object Properties Properties Observable Observable Random Random StringTokenizer StringTokenizer Vector Vector Praktische Informatik I Stack Stack H. Peter Gumm, Philipps-Universität Marburg Schnittstellen n Vereinbarung über Außenverbindung von Systemen n Begriffsursprung: ¨ ¨ ¨ ¨ n Man will komplexe Systeme zerlegen Einzelteile von verschiedenen Firmen hergestellt An den Schnittstellen müssen Teile zueinander passen Folglich muss die Schnittstelle genau spezifiziert sein Notwendig, um Systeme verschiedener Hersteller zu verbinden n Beispiel: Steckdose ¨ Schnittstelle regelt n n n ¨ Hersteller von Elektrogeräten können davon ausgehen: n ¨ Informatik n n n ¨ n n n der Stecker passt die Beschaltung ist wie erwartet die Stromstärke ist 230 V sie schwankt nur in bestimmten Grenzen Verkehrswesen n n ¨ Computer und Monitor Diskette und Laufwerk Modem und Telefonsystem Form Beschaltung (Masse, Phase, ) Spannung (230 ±10V , 50 Hz) Räder und Reifen Motor und Treibstoff (Tankstelle) Haus n n Praktische Informatik I Mülltonne und Müllwagen VHS-Kassette, Recorder H. Peter Gumm, Philipps-Universität Marburg Protokolle – Schnittstellen der Kommunikation ¨ Ein Protokoll regelt n n n Sprache/Signale Reihenfolge Bedingungen n einer Kommunikation ¨ ¨ ¨ ¨ ¨ ¨ Protokolle verbinden n Technische Geräte ¨ n n ¨ n n Hardware und Treiber ¨ ISDN Karte „Hallo“, „...darf ich vorstellen“, „Tschüss“ Anklopfen, „Herein“, „Guten Tag“ Staaten ¨ ¨ Praktische Informatik I ODBC, Email Menschen ¨ Telefon Fax RS232 Ethernet ... PPP, TCP/IP Programme ¨ n Telefonprotokoll Rechner ¨ Technische Schnittstellen und Protokolle gehören oft zusammen Diplomatisches Protokoll Beistandsverträge H. Peter Gumm, Philipps-Universität Marburg Treiber n Treiber sind Programme um unterschiedliche Schnittstellen zu verbinden n Oft wird eine Hardwareschnittstelle ¨ ¨ ¨ Laufwerk Kamera Modem mit einem Betriebssystem verbunden ¨ ¨ ¨ Linux Windows MacOS read() read() write() erase() Betriebssystem Praktische Informatik I startMotor() startMotor() write() moveHead() moveHead() erase() readBits() readBits() Treiber Platte H. Peter Gumm, Philipps-Universität Marburg Warum Schnittstellen ? n Eine Schnittstelle ist wie ein Vertrag ¨ n Wenn Deine Steckdose den richtigen Strom liefert, garantiere ich, dass mein Toaster funktioniert Der Vertragsnehmer sollte sich nur auf die Dinge verlassen, die versprochen sind ¨ Wer Interna benutzt, die nicht im Vertrag stehen, kann hereinfallen n n n ¨ Die Spannungstoleranz war doch bisher immer nur ± 0.5 V Aber heute ist mein Toaster explodiert Tja, versprochen waren nur ± 10 V Beim nächsten Update des Betriebssystem n n Ein Programm, das eine undokumentierte Schnittstelle benutzt stürzt ab Die Internet Kamera will nicht mehr ¨ n Ein neuer Treiber ist fällig Am besten verhindert man den Zugriff auf Interna ¨ Ein Bankkunde sollte nur über die offizielle Schnittstelle auf sein Konto zugreifen können Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Java-Interfaces nn Der DerBegriff BegriffInterface Interface-(dt.: -(dt.:Schnittstelle) Schnittstelle)ist ist zentral zentralfür fürdie dieInformatik Informatik nn Java Javaverwendet verwendetden denBegriff Begriffinineinem einem eingeschränkten technischen Sinne eingeschränkten technischen Sinne nn Ein EinJava-Interface Java-Interfacedefiniert definierteine eineFunktionalität, Funktionalität, die dieeine eineKlasse Klassehaben habensoll soll ¨¨ Methoden Methodenund undKonstanten Konstanten ¨¨ ein einInterface Interfaceist istähnlich ähnlicheiner einerabstrakten abstraktenKlasse Klasse nn Eine EineKlasse Klasseimplementiert implementiertdas dasInterface, Interface,wenn wenn sie die gewünschte Funktionalität bereitstellt sie die gewünschte Funktionalität bereitstellt ¨¨ die diegenannten genanntenFelder Felderund undMethoden Methoden nn Eine EineKlasse Klassekann kannmehrere mehrereInterfaces Interfaces implementieren implementieren ¨¨ Da Daliegt liegtder derwichtigste wichtigsteUnterschied Unterschiedzwischen zwischen Interfaces Interfacesund undabstrakten abstraktenKlassen Klassen Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Wozu interfaces n Interfaces sehen ähnlich aus wie abstrakte Klassen Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Wozu interfaces n Ein Sortieralgorithmus kann alle Daten sortieren, auf denen eine Ordnung definiert ist beliebige geordnete Menge Methode des interface Order Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Mehrfachvererbung n Eine Klasse kann nur eine Superklasse haben n In anderen OO-Sprachen ist das nicht notwendig so ¨ Erbt eine Klasse von mehreren Superklassen, so spricht man von Mehrfachvererbung ¨ multiple inheritance Praktische Informatik I n Eine Klasse kann mehrere Interfaces implemetieren. n Eine Art Mehrfachvererbung durch die Hintertür H. Peter Gumm, Philipps-Universität Marburg Implementieren mehrerer Interfaces Rechteck wird geerbt Zwei Interfaces werden gleichzeitig implementiert länge und breite für die Implemetierung von Figur werden aus Rechteck geerbt less muss als zweites Argument ein Objekt vom Typ Order haben getUrsprung ist aber nur für Fenster definiert, daher ist hier ein cast notwendig. Das ist unschön, geht in Java aber nicht anders !!! Praktische Informatik I H. Peter Gumm, Philipps-Universität Marburg Klassendiagramme mit interfaces n Interfaces definieren zusätzliche Hierarchien im Klassendiagramm java.awt.image java.awt Button Button ImageObserver java.lang Canvas Canvas Scrollbar Scrollbar TextComponent TextComponent MenuBar MenuBar MenuComponent MenuComponent Praktische Informatik I class class abstract abstractclass class interface Dialog Dialog Window Window Frame Frame TextArea TextArea TextField TextField Menu Menu MenuItem MenuItem Legende: Panel Panel Container Container Component Component Object Object ( teilweise ) MenuContainer CheckboxMenuItem CheckboxMenuItem implements H. Peter Gumm, Philipps-Universität Marburg