Sichtbarkeit - Fachbereich Mathematik und Informatik

Werbung
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
Zugehörige Unterlagen
Herunterladen