Kapitel 13: Sichtbarkeit

Werbung
Kapitel 13:
Sichtbarkeit
Felix Freiling
Lehrstuhl für Praktische Informatik 1
Universität Mannheim
Vorlesung Praktische Informatik I
im Herbstsemester 2009
Folien nach einer Vorlage von
H.-Peter Gumm, Philipps-Universität Marburg
Übersicht
Information hiding
Datenkapselung
Zugriffsattribute public, private
Pakete
Schnittstellen, Protokolle, Treiber
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 2
Information hiding
Anwendungen stellen bereit
Programme verwenden
Informationen
Dienste
Variablen
Methoden
Klassen
Einige davon sind für den Anwender bestimmt
main
Menüfunktionen
Andere sind nur interne Hilfskonstrukte
lokale Variablen
Hilfsmethoden
Hilfsklassen
Jegliche interne Information sollte dem Anwender
verborgen und unzugänglich bleiben
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 3
Versteck: Lokale Variablen
Lokale Variable
Innerhalb
eines Blockes deklarierte
Variable
Außerhalb des Blockes ist sie nicht
sichtbar
int x=4, y=17;
{ int temp;
temp = x;
x = 17;
y = temp;
}
System.out.println(
“x =“+x+“ y =“+ y +“ temp =“+temp);
Blöcke
sind Datenschachteln
Praktische Informatik I, HWS 2009, Kapitel 13
Fehler
temp ist nur innerhalb
des Blockes sichtbar
Seite 4
Versteck: Methodenrumpf
Der Rumpf einer Funktionsdefinition ist ein Block.
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, HWS 2009, Kapitel 13
int temp;
... tuWas...
return ergebnis
Schnittstellen
;
Seite 5
Private Felder
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
abheben
betrag :
Methoden anderer Klassen
können nicht auf diese
Felder zugreifen
Objekte der gleichen Klasse
haben Zugriff
Beispiel Konto:
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, HWS 2009, Kapitel 13
Seite 6
Experiment
Zugriff auf Feld x
aus einer anderen
Klasse heraus wird
vom Compiler nicht
akzeptiert
Zugriff aus einem
anderen Objekt
der Klasse A ist
erlaubt
Klasse A mit
einem privaten
Feld x und zwei
Konstruktoren
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 7
Datenkapselung
Datenobjekte werden vor
direktem Zugriff geschützt
private class (siehe gleich)
private method
private field
Werden innerhalb der Klasse
versteckt
Öffentliche Methoden definieren
Benutzer-Schnittstelle
public class
public method
public field
einzahlen
private
kontoStand
getkonto
Stand
…
Sind außerhalb der Klasse sichtbar
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 8
Weitere Zugriffsattribute
public Felder sind explizit freigegeben
überall sichtbar
ggf. muss man die definierende Klasse
benennen (importieren)
Felder ohne Zugriffsattribute
Zugriffsattribut heißt auch „package
private“
in jeder Klasse des gleichen Pakets
sichtbar
nicht in anderen Paketen
ZugriffsSchutz
Ohne den Begriff
der Unterklasse sind
“package private”
und protected
äquivalent
protected Felder und Methoden
niedrigster
in dem aktuellen Paket und
in allen Unterklassen sichtbar (was auch
immer das ist)
private Felder und Methoden
nur in der definierenden Klasse sichtbar
nicht in Unterklassen
Praktische Informatik I, HWS 2009, Kapitel 13
höchster
Seite 9
Beispiel: Datum
UNIX repräsentiert Datum durch
Millisekunden seit 1.1.1970 GMT
getter und setter
getDay(), getMonth(), getYear()
getWeekday()
setDate(), setTime(), setMsec()
isLeapyear()
Datenkapselung:
setter
Schnittstelle: Zugriffsmethoden
getter
Verstecken der Repräsentation
Verstecken von Hilfsmethoden
getDay
getMonth
setTime
getYear
setMsec
getWeekday
isLeapYear
Repräsentation kann man ändern
private
1033530810062731
Vorteil
setDate
z.B.(tag,monat,Jahr,std,min,sec,ms)
Zugriffsmethoden bleiben
Anwendungsprogramme müssen weiter funktionieren
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 10
Private Klassen
Klasse X ist
außerhalb
von Klasse A
nicht
sichtbar
Klasse X
wird
innerhalb
von Klasse
A definiert
Auch dieser Zugriff ist
nicht erlaubt
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 11
Pakete
Java Anwendungen bestehen aus vielen Klassen
Zusammengehörige Klassen werden zu einem Paket
zusammengefasst
Jede Klasse gehört zu einem Paket
Um eine Klasse einem Paket hinzuzufügen, muss die
erste Zeile lauten:
Wenn nichts gesagt wird, zu default .
package paketName ;
Auf vielen Plattformen hat man die Entsprechung
class Meine
≅ Datei Meine.java
.. nach der Compilation: Meine.class
package meinPaket ≅ Verzeichnis meinPaket
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 12
Paketzugriff
Klassen, Methoden und
Felder in fremden
Paketen sind ohne
weiteres nicht
zugreifbar
Ohne spezielle Attribute
nur im eigenen Paket
sichtbar
class Würfel
int topFace
public void roll()
roll()
Becher()
public class Becher
public void roll()
public int result()
roll()
result()
Abhilfe:
(package private)
package lasVegas
Als public deklarieren
Vergleiche javadoc !
Praktische Informatik I, HWS 2009, Kapitel 13
class Statistik
private int[][] ergebnis
public static void
verteilung()
verteilung()
Seite 13
Pakethierarchie
Pakete können hierarchisch
organisiert werden.
Der volle Name besteht aus dem
Pfad zu dem Paket
Beispiele:
javax
text
awt
kapitel1
java.awt.event, java.awt.color
javax.swing.text.html.parser
praktInf.kapitel1
Die Wurzeln der Hierarchien werden,
durch Semikolon getrennt, in der
Variablen CLASSPATH mitgeteilt
java
praktInf
html
color
event
parser
CLASSPATH=.; C:\Programs\bluej\examples ;
C:\mypackages;
C:\DokumentsandSettings\praktInf\kapitel1
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 14
Referenzieren
Pfad nötig, um Klassen in anderen
Paketen anzusprechen
Compiler und JRE suchen unter
den in CLASSPATH angegebenen
Einstiegspunkten
Klassen werden durch
Voranstellen des Paketnamens
eindeutig:
z.B. java.util.Date :
Klasse Date im Paket java.util
java.util ist das Paket
Date ist die Klasse
Wichtig:
Oder direkt im Codepad:
Klasse Date muss public sein !
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 15
Internationale Pakete
Klassen werden oft im Internet bereitgestellt
Mit der Internet-Adresse im package-Namen
erreicht man Eindeutigkeit
de.unimannheim.informatik.pi1.filepool.Wuerfel
bezeichnet die
Klasse Wuerfel
im Verzeichnis filepool
auf dem Rechner pi1
In der Subdomain informatik.uni-mannheim
der Domain de
Das Paket (als class- oder jar-Datei) muss vor der Benutzung auf
den lokalen Rechner geladen und installiert werden
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 16
Paket-Registrierung in BlueJ
Beispiel fremde Pakete:
Programmierung von email-Versand in Java
wir brauchen geeignete Klassen aus
javamail-API und in dem
java-activation-framework
bei java.sun.com herunterladen
und entpacken.
Verzeichnisse enthalten jar-Dateien
mail.jar, bzw
activation.jar
in den Klassenpfad aufnehmen
entweder durch Setzen von CLASSPATH
oder in Bluej registrieren
Einstellungen
→Bibliotheken
→ Hinzufügen
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 17
Eigene Pakete
einbinden
Basisverzeichnis von Hand anlegen
z.B. C:\Dokumente und
Einstellungen\freiling\java
\meinePakete\
BlueJ-Projekt im selben Verzeichnis
öffnen
Neues Paket anlegen
Paket öffnen
z.B. util
Dort Klassen definieren
Jetzt kann man den Wuerfel in
anderen Projekten benutzen
import util.Wuerfel;
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 18
Standard Pakete
gehören zum offiziellen Sprachumfang von Java:
java.lang
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, HWS 2009, Kapitel 13
Seite 19
Schnittstellen
Vereinbarung über Außenverbindung von
Systemen
Begriffsursprung:
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
Beispiel: Steckdose
Schnittstelle regelt
Notwendig, um Systeme verschiedener
Hersteller zu verbinden
Hersteller von Elektrogeräten
können davon ausgehen:
Informatik
der Stecker passt
die Beschaltung ist wie erwartet
die Stromstärke ist 230 V
sie schwankt nur in bestimmten
Grenzen
Verkehrswesen
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
Mülltonne und Müllwagen
VHS-Kassette, Recorder
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 20
Protokolle
– Schnittstellen der Kommunikation
Ein Protokoll regelt
Sprache/Signale
Reihenfolge
Bedingungen
einer Kommunikation
Protokolle verbinden
Technische Geräte
ODBC, Email
Menschen
PPP, TCP/IP
Programme
Telefonprotokoll
Rechner
„Hallo“, „...darf ich vorstellen“,
„Tschüss“
Anklopfen, „Herein“, „Guten Tag“
Technische Schnittstellen
und Protokolle gehören oft
zusammen
Telefon
Fax
RS232
Ethernet
...
Hardware und Treiber
ISDN Karte
Staaten
Diplomatisches Protokoll
Beistandsverträge
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 21
Treiber
Treiber sind Programme um unterschiedliche
Schnittstellen zu verbinden
Oft wird eine Hardwareschnittstelle
Laufwerk
Kamera
Modem
mit einem Betriebssystem verbunden
Linux
Windows
MacOS
read()
read()
write()
erase()
startMotor()
startMotor()
write()
moveHead()
moveHead()
erase()
readBits()
readBits()
Betriebssystem
Praktische Informatik I, HWS 2009, Kapitel 13
Treiber
Platte
Seite 22
Warum Schnittstellen ?
Eine Schnittstelle ist wie ein Vertrag
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
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
Ein Programm, das eine undokumentierte Schnittstelle benutzt stürzt ab
Die Internet Kamera will nicht mehr
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, HWS 2009, Kapitel 13
Seite 23
Zusammenfassung
Information hiding bedeutet das Verbergen von
Implementierungsdetails hinter einer Schnittstelle
Verbergen von Details geht über Blöcke bzw.
Zugriffsattribute private, protected etc. und Pakete
Treiber verbinden Schnittstellen
Praktische Informatik I, HWS 2009, Kapitel 13
Seite 24
Herunterladen