Java

Werbung
Algorithmen und Datenstrukturen II
Alexander Goesmann
Bioinformatics Resource Facility
Center for Biotechnology
Universität Bielefeld
Vorlesung Sommer 2010
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Teil I
Java: Der Einstieg
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Grundlegendes zu Java: Historisches
1990-1991: Entwicklung der Programmiersprache OAK durch
James Gosling von Sun Microsystems (zunächst für Toaster,
Mikrowellen etc.; unabhängig vom Chip, plattformunabhängig)
1993: Umbenennung in Java
1995: α und β Release
1995: Java wird in den Netscape Navigator Internet browser
integriert
von IBM, SGI, Oracle und Microsoft und vielen anderen
lizensiert
2005: bereits über 2,5 Milliarden Geräte mit
Java-Unterstützung und 4,5 Millionen Entwickler
aktuell (Stand April 2010): JDK 6 Update 20
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Grundlegendes zu Java: Eigenschaften
durch den Bytecode (Zwischensprachencode) unabhängig von
der Plattform
Syntax an C und C++ angelehnt
objektorientiert
streng typisiert: alle Typen stehen zur Übersetzungszeit fest
unterstützt parallele Abläufe (Nebenläufigkeit / Threads)
Graphical User Interface (GUI)
netzwerkfähig
Speicherverwaltung durch Garbage collection
teilweise langsamer als C oder C++. Abhilfe durch
Just-in-time-compiler
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Anwendungen
Selbstständig
laufende
Anwendung
Alexander Goesmann
A&D II, Vorlesung 2010
Quellprogramm
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Anwendungen
Selbstständig
laufende
Anwendung
Quellprogramm
Java-Compiler
?
Java-Bytecode
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Anwendungen
Selbstständig
laufende
Anwendung
Quellprogramm
Java-Compiler
?
Java-Bytecode
Java-Interpreter
?
Ablauf des Programms
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Applets
Applet
Alexander Goesmann
A&D II, Vorlesung 2010
Quellprogramm
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Applets
Applet
Quellprogramm
Java-Compiler
?
Java-Bytecode auf dem Server
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Applets
Applet
Quellprogramm
Java-Compiler
?
Java-Bytecode auf dem Server
?Übertragung per Internet
Bytecodes auf dem Rechner des
Benutzers (Client)
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Applets
Applet
Quellprogramm
Java-Compiler
?
Java-Bytecode auf dem Server
?Übertragung per Internet
Bytecodes auf dem Rechner des
Benutzers (Client)
Java-Interpreter im Browser oder
Applet-Viewer
?
Ablauf des Programms
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Sicherheit
keine Pointerarithmetik wie in C
Garbage Collection1
Überprüfungen zur Laufzeit (Datentypen, Indizes, etc.)
1
Ein Garbage Collector entfernt automatisch Objekte, Felder und Variablen,
auf die keine Referenz mehr vorhanden ist, aus dem Speicher (siehe Arnold &
Gosling [1], S. 12, Kapitel 1.6).
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Erstellen eines Java-Programms
1
Quellprogramm erstellen:
Beispiel
class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Erstellen eines Java-Programms
1
Quellprogramm erstellen:
Beispiel
class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
2
Übersetzen eines Programms:
> javac Hello.java
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Erstellen eines Java-Programms
1
Quellprogramm erstellen:
Beispiel
class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
2
3
Übersetzen eines Programms:
> javac Hello.java
Interpretation des Bytecodes:
> java Hello
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Grundzüge imperativer Sprachen
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Das Behältermodell der Variablen
Imperative Programmierung geht aus vom Modell eines Speichers,
aufgegliedert in einzelne Variablen, in denen Werte abgelegt
werden können. Der Speicher bzw. die Variablen werden verändert
durch Befehle bzw. Anweisungen, die selbst vom aktuellen
Speicherinhalt abhängen.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Das Behältermodell der Variablen
Imperative Programmierung geht aus vom Modell eines Speichers,
aufgegliedert in einzelne Variablen, in denen Werte abgelegt
werden können. Der Speicher bzw. die Variablen werden verändert
durch Befehle bzw. Anweisungen, die selbst vom aktuellen
Speicherinhalt abhängen. Ein typisches Beispiel ist die Anweisung
x = y + z.
Sie bedeutet: Addiere die Variableninhalte von y und z und lege
die Summe in der Variablen x ab.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Seiteneffekte
nicht nur der Variableninhalt von x kann sich ändern, sondern
auch der von y und z sowie aller möglicher anderer Variablen;
falls x ≡ y oder y ≡ z, dann ist dies unmittelbar einsichtig.
Also ist “x = y + z” keine Gleichheit, die zwischen den Werten
(Inhalten) von x, y und z gilt, und mittels der wir über Programme
nachdenken und Beweise führen können. Das Prinzip der
referential transparency“ (Werttreue), das in der funktionalen
”
Programmierung gilt, ist in der imperativen verletzt.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Konsequenzen
1
Der Nachweis von Programmeigenschaften wird viel
schwieriger, ebenso das Verstehen von Programmen.
2
Die Semantik eines Programms hängt von einem strikten
Nacheinander der Ausführung der einzelnen Anweisungen ab.
3
Wiederverwendung von Programmteilen in anderem Kontext
bedarf besonderer Vorsicht.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassen, Objekte und Methoden
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassen, Objekte und Methoden im Überblick
Java-Programme werden aus Klassen aufgebaut. Aus einer
Klassendefinition lassen sich beliebig viele Objekte erzeugen, die
auch Instanzen genannt werden (vgl. Arnold & Gosling [1], Kapitel
1.6 und 1.7).
Eine Klasse enthält folgende Bestandteile:
Objektvariablen (objektbezogene Datenfelder)
objektbezogene Methoden
Klassenvariablen (klassenbezogene Datenfelder)
klassenbezogene Methoden
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassen, Objekte und Methoden im Überblick
Java-Programme werden aus Klassen aufgebaut. Aus einer
Klassendefinition lassen sich beliebig viele Objekte erzeugen, die
auch Instanzen genannt werden (vgl. Arnold & Gosling [1], Kapitel
1.6 und 1.7).
Eine Klasse enthält folgende Bestandteile:
Objektvariablen (objektbezogene Datenfelder)
objektbezogene Methoden
Klassenvariablen (klassenbezogene Datenfelder)
klassenbezogene Methoden
Datenfelder (Synonym: Attribute) enthalten den Zustand des
Objektes oder der Klasse. Methoden sind Sammlungen von
imperativ formulierten Anweisungen, die auf den Datenfeldern
operieren, um deren Zustand zu ändern.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassen
Beispiel der Deklaration einer einfachen Klasse:
Beispiel (Klassendeklaration)
class Point {
double x, y;
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Das Erzeugen von Objekten
Objekte werden mit dem Schlüsselwort new erzeugt. Neu
geschaffene Objekte bekommen innerhalb eines Bereiches des
Speichers (welcher Heap genannt wird) einen Speicherplatz
zugewiesen und werden dort abgelegt. Auf alle Objekte in Java
wird über Objektreferenzen zugegriffen – jede Variable, die ein
Objekt zu enthalten scheint, enthält tatsächlich eine Referenz auf
dieses Objekt (bzw. auf deren Speicherplatz). Objektreferenzen
haben den Wert null, wenn sie sich auf kein Objekt beziehen. Wir
werden im folgenden Objekte und Objektreferenzen synonym
verwenden, es sei denn, die Unterscheidung ist wichtig.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Erzeugung und Initialisierung
Beispiel (Erzeugung eines Objekts)
Point lowerLeft = new Point();
Point upperRight = new Point();
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Erzeugung und Initialisierung
Beispiel (Erzeugung eines Objekts)
Point lowerLeft = new Point();
Point upperRight = new Point();
Beispiel (Wertzuweisung)
lowerLeft.x = 0.0;
lowerLeft.y = 0.0;
upperRight.x = 1280.0;
upperRight.y = 1024.0;
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassenvariablen
Beispiel (Klassenvariable)
class Point {
double x, y;
static Point origin = new Point();
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassenvariablen
Beispiel (Klassenvariable)
class Point {
double x, y;
static Point origin = new Point();
}
Beispiel (Klassenvariable als Konstante)
static final Point origin = new Point();
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Methoden
Eine Methode ist eine Funktion bzw. Prozedur. Sie kann
parameterlos sein oder Parameter haben. Sie kann einen
Rückgabewert liefern oder als void deklariert sein, wenn sie keinen
Wert zurückliefert. Methoden dürfen nicht geschachtelt werden.
Innerhalb von Methoden dürfen lokale Variablen deklariert werden.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Methoden
Eine Methode ist eine Funktion bzw. Prozedur. Sie kann
parameterlos sein oder Parameter haben. Sie kann einen
Rückgabewert liefern oder als void deklariert sein, wenn sie keinen
Wert zurückliefert. Methoden dürfen nicht geschachtelt werden.
Innerhalb von Methoden dürfen lokale Variablen deklariert werden.
Beispiel (Methoden)
class Point {
double x, y;
void clear() {
x = 0.0;
y = 0.0;
}
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Um eine Methode aufzurufen, gibt man ein Objekt und den
Methodennamen, getrennt durch einen Punkt, an.
Beispiel (Methodenaufruf)
lowerLeft.clear();
upperRight.clear();
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Methode distance
Beispiel (Definition der Methode distance)
double distance(Point p) {
double xdiff, ydiff; // lokale Variablen
xdiff = x - p.x;
ydiff = y - p.y;
return Math.sqrt(xdiff*xdiff + ydiff*ydiff);
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Methode distance
Beispiel (Definition der Methode distance)
double distance(Point p) {
double xdiff, ydiff; // lokale Variablen
xdiff = x - p.x;
ydiff = y - p.y;
return Math.sqrt(xdiff*xdiff + ydiff*ydiff);
}
Beispiel (Aufruf der Methode distance)
double d = lowerLeft.distance(upperRight);
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassenbezogene Methoden
Klassenbezogene Methoden werden durch das Schlüsselwort
static deklariert, z.B. ist Math.sqrt() eine Klassenmethode der
vordefinierten Klasse Math.
Beispiel (Definition der klassenbezogenen Methode distance)
static double distance(Point p1, Point p2) {
double xdiff = p1.x - p2.x;
double ydiff = p1.y - p2.y;
return Math.sqrt(xdiff*xdiff + ydiff*ydiff);
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Klassenbezogene Methoden
Klassenbezogene Methoden werden durch das Schlüsselwort
static deklariert, z.B. ist Math.sqrt() eine Klassenmethode der
vordefinierten Klasse Math.
Beispiel (Definition der klassenbezogenen Methode distance)
static double distance(Point p1, Point p2) {
double xdiff = p1.x - p2.x;
double ydiff = p1.y - p2.y;
return Math.sqrt(xdiff*xdiff + ydiff*ydiff);
}
Beispiel (Aufruf der klassenbezogenen Methode distance)
double d = Point.distance(lowerLeft, upperRight);
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Vererbung, Pakete und Gültigkeitsbereiche
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Vererbung
Klassen in Java können um zusätzliche Variablen und Methoden
erweitert werden. Dies wird durch das Schlüsselwort extends
angezeigt. Die entstehende Unterklasse besitzt dann alle
Eigenschaften der Oberklasse und zusätzlich die in der jeweiligen
Erweiterung angegebenen Eigenschaften. Dieses Konzept wird auch
als Vererbung bezeichnet, weil die Unterklasse alle Eigenschaften
der Oberklasse erbt.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Vererbung
Klassen in Java können um zusätzliche Variablen und Methoden
erweitert werden. Dies wird durch das Schlüsselwort extends
angezeigt. Die entstehende Unterklasse besitzt dann alle
Eigenschaften der Oberklasse und zusätzlich die in der jeweiligen
Erweiterung angegebenen Eigenschaften. Dieses Konzept wird auch
als Vererbung bezeichnet, weil die Unterklasse alle Eigenschaften
der Oberklasse erbt.
Zum Beispiel ist ein farbiger Punkt eine Erweiterung eines Punktes:
Beispiel
class ColoredPoint extends Point {
String color;
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Pakete
Bei größeren Softwareprojekten ist es häufig ratsam, diese in
verschiedene, unabhängige Teile aufzuteilen. Solche Teile werden
als Module oder Pakete bezeichnet. Java besitzt einige
Eigenschaften, die es erlauben, Software modular aufzubauen:
Verschiedene (i.d.R. logisch zusammengehörige) Klassen können in
einem Paket zusammengefasst werden. Die Klassendefinitionen
können in verschiedenen Dateien enthalten sein.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Der Paketname muss im Header jeder Datei angegeben sein:
Beispiel (A.java)
package abc;
public class A {
...
}
class B {
...
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Der Paketname muss im Header jeder Datei angegeben sein:
Beispiel (A.java)
Beispiel (C.java)
package abc;
public class A {
...
}
package abc;
class C {
...
}
class B {
...
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Der Paketname muss im Header jeder Datei angegeben sein:
Beispiel (A.java)
Beispiel (C.java)
package abc;
public class A {
...
}
package abc;
class C {
...
}
class B {
...
}
Beispiel (Sichtbarkeit)
import abc.A;
class test {
A a;
}
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Gültigkeitsbereiche
zugreifbar für
Nicht-Unterklassen im
selben Paket
zugreifbar für Unterklassen
im selben Paket
zugreifbar für
Nicht-Unterklassen in
einem anderen Paket
zugreifbar für Unterklassen
in einem anderen Paket
Alexander Goesmann
A&D II, Vorlesung 2010
public
ja
default (package)
ja
protected
ja
private
nein
ja
ja
ja
nein
ja
nein
nein
nein
ja
nein
ja
nein
Universität Bielefeld
Grundlegendes zu Java
Klassen, Objekte und Methoden
Vererbung, Pakete
Weiterführende Literatur
K. Arnold, J. Gosling: JavaTM - Die Programmiersprache.
Addison-Wesley, 1996.
T.H. Cormen, C.E. Leierson, R.L. Rivest: Introduction to
Algorithms. MIT Press, 1990.
D. Flanagan: Java in a Nutshell. O’Reilly & Associates Inc.,
1996.
F. Jobst: Programmieren in Java. Hanser Verlag, 1996.
H. Klaeren: Vom Problem zum Programm. 2.Auflage,
B.G. Teubner Verlag, 1991.
K. Echtle, M. Goedicke: Lehrbuch der Programmierung mit
Java. dpunkt-Verlag, 2000.
Alexander Goesmann
A&D II, Vorlesung 2010
Universität Bielefeld
Herunterladen