Java: Der Einstieg - Technische Fakultät · Eine Methode ist eine Funktion bzw. Prozedur. Sie kann...

36
Java: Der Einstieg Algorithmen und Datenstrukturen II 1

Transcript of Java: Der Einstieg - Technische Fakultät · Eine Methode ist eine Funktion bzw. Prozedur. Sie kann...

Java: Der Einstieg

Algorithmen und Datenstrukturen II 1

Grundlegendes zu Java: Historisches

• 1990-1991: Entwicklung der Programmiersprache OAK durch James Goslingvon Sun Microsystems (zunächst für Toaster, Mikrowellen etc.; unabhängigvom Chip, extrem zuverlässig)

• Umbenennung in Java

• 1995: α und β Release

• von IBM, SGI, Oracle und Microsoft lizensiert

Algorithmen und Datenstrukturen II 2

Grundlegendes zu Java: Eigenschaften• durch den Bytecode (Zwischensprachencode) unabhängig von der Plattform

• Syntax an C und C++ angelehnt

• im Gegensatz zu C und C++ vollständig spezifiziert

• objektorientiert

• streng typisiert

• unterstützt parallele Abläufe (Nebenläufigkeit / Threads)

• Graphical User Interface (GUI)

• netzwerkfähig

• modularer Aufbau

• Nachteil: Effizienz leidet (ca. 5–10mal langsamer als C und C++)

Algorithmen und Datenstrukturen II 3

Anwendungen

SelbstständiglaufendeAnwendung

Quellprogramm

?Java-Compiler

Java-Bytecode auf dem Server

?Java-Interpreter

Ablauf des Programms

Algorithmen und Datenstrukturen II 4

Applets

Applet Quellprogramm

?Java-Compiler

Java-Bytecode auf dem Server

?Übertragung per Internet

Bytecodes auf dem Rechner desBenutzers (Client)

?

Java-Interpreter im Browser oderApplet-Viewer

Ablauf des Programms

Algorithmen und Datenstrukturen II 5

Sicherheit

• keine Pointerarithmetik wie in C

• Garbage Collectiona

• Überprüfungen zur Laufzeit (Datentypen, Indizes, etc.) durch Mechanismen zurVerifizierung von Java-Bytecode bei der Übertragung

• dennoch ist die (Netz-)Sicherheit umstritten

aEin Garbage Collector entfernt automatisch Objekte, Felder und Variablen, auf die keine Referenzmehr vorhanden ist, aus dem Speicher (siehe Arnold & Gosling [?], S. 12, Kapitel 1.6).

Algorithmen und Datenstrukturen II 6

Erstellen eines Java-Programms1. Quellprogramm erstellen:

class Hello {

public static void main(String[] args) {

System.out.println("Hello World");

}

}

Algorithmen und Datenstrukturen II 7

Erstellen eines Java-Programms1. Quellprogramm erstellen:

class Hello {

public static void main(String[] args) {

System.out.println("Hello World");

}

}

2. Übersetzen eines Programms:

> javac Hello.java

Algorithmen und Datenstrukturen II 7

Erstellen eines Java-Programms1. Quellprogramm erstellen:

class Hello {

public static void main(String[] args) {

System.out.println("Hello World");

}

}

2. Übersetzen eines Programms:

> javac Hello.java

3. Interpretation des Bytecodes:

> java Hello

Algorithmen und Datenstrukturen II 7

Grundzüge imperativer Sprachen

Algorithmen und Datenstrukturen II 8

Das Behältermodell der Variablen

Imperative Programmierung geht aus vom Modell eines Speichers, aufgegliedert ineinzelne Variablen, in denen Werte abgelegt werden können. Der Speicher bzw. dieVariablen werden verändert durch Befehle bzw. Anweisungen, die selbst vomaktuellen Speicherinhalt abhängen.

Algorithmen und Datenstrukturen II 9

Das Behältermodell der Variablen

Imperative Programmierung geht aus vom Modell eines Speichers, aufgegliedert ineinzelne Variablen, in denen Werte abgelegt werden können. Der Speicher bzw. dieVariablen werden verändert durch Befehle bzw. Anweisungen, die selbst vomaktuellen 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 derVariablen x ab.

Algorithmen und Datenstrukturen II 9

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ührenkönnen. Das Prinzip der „referential transparency“ (Werttreue), das in derfunktionalen Programmierung gilt, ist in der imperativen verletzt.

Algorithmen und Datenstrukturen II 10

Konsequenzen

1. Der Nachweis von Programmeigenschaften wird viel schwieriger, ebenso dasVerstehen von Programmen.

2. Die Semantik eines Programms hängt von einem strikten Nacheinander derAusführung der einzelnen Anweisungen ab.

3. Wiederverwendung von Programmteilen in anderem Kontext bedarfbesonderer Vorsicht.

Algorithmen und Datenstrukturen II 11

Klassen, Objekte und Methoden im Überblick

Java-Programme werden aus Klassen aufgebaut. Aus einer Klassendefinition lassensich beliebig viele Objekte erzeugen, die auch Instanzen genannt werden (vgl.Arnold & Gosling [?], Kapitel 1.6 und 1.7).

Eine Klasse enthält folgende Bestandteile:

• Objektvariablen (objektbezogene Datenfelder)

• objektbezogene Methoden

• Klassenvariablen (klassenbezogene Datenfelder)

• klassenbezogene Methoden

Algorithmen und Datenstrukturen II 12

Klassen, Objekte und Methoden im Überblick

Java-Programme werden aus Klassen aufgebaut. Aus einer Klassendefinition lassensich beliebig viele Objekte erzeugen, die auch Instanzen genannt werden (vgl.Arnold & Gosling [?], Kapitel 1.6 und 1.7).

Eine Klasse enthält folgende Bestandteile:

• Objektvariablen (objektbezogene Datenfelder)

• objektbezogene Methoden

• Klassenvariablen (klassenbezogene Datenfelder)

• klassenbezogene Methoden

Algorithmen und Datenstrukturen II 12

Datenfelder (Synonym: Attribute) enthalten den Zustand des Objektes oder derKlasse. Methoden sind Sammlungen von imperativ formulierten Anweisungen, dieauf den Datenfeldern operieren, um deren Zustand zu ändern.

Algorithmen und Datenstrukturen II 13

Klassen

Beispiel der Deklaration einer einfachen Klasse:

class Point {

double x, y;

}

Algorithmen und Datenstrukturen II 14

Das Erzeugen von Objekten

Objekte werden mit dem Schlüsselwort new erzeugt. Neu geschaffene Objektebekommen innerhalb eines Bereiches des Speichers (welcher Heap genannt wird)einen Speicherplatz zugewiesen und werden dort abgelegt. Auf alle Objekte in Javawird über Objektreferenzen zugegriffen – jede Variable, die ein Objekt zu enthaltenscheint, enthält tatsächlich eine Referenz auf dieses Objekt (bzw. auf derenSpeicherplatz). Objektreferenzen haben den Wert null, wenn sie sich auf keinObjekt beziehen. Wir werden im folgenden Objekte und Objektreferenzensynonym verwenden, es sei denn, die Unterscheidung ist wichtig.

Algorithmen und Datenstrukturen II 15

Erzeugung und Initialisierung

Point lowerLeft = new Point();

Point upperRight = new Point();

Algorithmen und Datenstrukturen II 16

Erzeugung und Initialisierung

Point lowerLeft = new Point();

Point upperRight = new Point();

0.0.1 Wertzuweisung

lowerLeft.x = 0.0;

lowerLeft.y = 0.0;

upperRight.x = 1280.0;

upperRight.y = 1024.0;

Algorithmen und Datenstrukturen II 16

Klassenvariablen

class Point {

double x, y;

static Point origin = new Point();

}

Algorithmen und Datenstrukturen II 17

Klassenvariablen

class Point {

double x, y;

static Point origin = new Point();

}

static final Point origin = new Point();

Algorithmen und Datenstrukturen II 17

MethodenEine Methode ist eine Funktion bzw. Prozedur. Sie kann parameterlos sein oderParameter 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.

Algorithmen und Datenstrukturen II 18

MethodenEine Methode ist eine Funktion bzw. Prozedur. Sie kann parameterlos sein oderParameter 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.

class Point {

double x, y;

void clear() {

x = 0.0;

y = 0.0;

}

}

Algorithmen und Datenstrukturen II 18

Um eine Methode aufzurufen, gibt man ein Objekt und den Methodennamen,getrennt durch einen Punkt, an.

lowerLeft.clear();

upperRight.clear();

Algorithmen und Datenstrukturen II 19

Methode distance

double distance(Point p) {

double xdiff, ydiff; // Beispiel fuer lokale Variablen

xdiff = x - p.x;

ydiff = y - p.y;

return Math.sqrt(xdiff*xdiff + ydiff*ydiff);

}

Aufruf: double d = lowerLeft.distance(upperRight);

Algorithmen und Datenstrukturen II 20

Klassenbezogene Methoden

Klassenbezogene Methoden werden durch das Schlüsselwort static deklariert, z.B.ist Math.sqrt() eine Klassenmethode der vordefinierten Klasse Math.

0.0.2 “distance” als Klassenmethode

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);

}

Aufruf: double d = Point.distance(lowerLeft, upperRight);

Algorithmen und Datenstrukturen II 21

Vererbung, Pakete und Gültigkeitsbereiche

Algorithmen und Datenstrukturen II 22

Vererbung

Klassen in Java können um zusätzliche Variablen und Methoden erweitert werden.Dies wird durch das Schlüsselwort extends angezeigt. Die entstehende Unterklassebesitzt dann alle Eigenschaften der Oberklasse und zusätzlich die in der jeweiligenErweiterung angegebenen Eigenschaften. Dieses Konzept wird auch als Vererbungbezeichnet, weil die Unterklasse alle Eigenschaften der Oberklasse erbt.

Algorithmen und Datenstrukturen II 23

Vererbung

Klassen in Java können um zusätzliche Variablen und Methoden erweitert werden.Dies wird durch das Schlüsselwort extends angezeigt. Die entstehende Unterklassebesitzt dann alle Eigenschaften der Oberklasse und zusätzlich die in der jeweiligenErweiterung angegebenen Eigenschaften. Dieses Konzept wird auch als Vererbungbezeichnet, weil die Unterklasse alle Eigenschaften der Oberklasse erbt.

Zum Beispiel ist ein farbiger Punkt eine Erweiterung eines Punktes:

class ColoredPoint extends Point {

String color;

}

Algorithmen und Datenstrukturen II 23

Pakete

Bei größeren Softwareprojekten ist es häufig ratsam, diese in verschiedene,unabhängige Teile aufzuteilen. Solche Teile werden als Module oder Paketebezeichnet. Java besitzt einige Eigenschaften, die es erlauben, Software modularaufzubauen: Verschiedene (i.d.R. logisch zusammengehörige) Klassen können ineinem Paket zusammengefasst werden. Die Klassendefinitionen können inverschiedenen Dateien enthalten sein.

Algorithmen und Datenstrukturen II 24

Der Paketname muss im Header jeder Datei angegeben sein:

A.java C.java

package abc; package abc;

public class A { class C {

... ...

} }

class B {

...

}

Algorithmen und Datenstrukturen II 25

Der Paketname muss im Header jeder Datei angegeben sein:

A.java C.java

package abc; package abc;

public class A { class C {

... ...

} }

class B {

...

}

Algorithmen und Datenstrukturen II 25

import abc.A;

class test {

A a;

}

Algorithmen und Datenstrukturen II 26

Gültigkeitsbereiche

public default (package) protected private

zugreifbar für Nicht-Unterklassen imselben Paket

ja ja ja nein

zugreifbar für Unterklassen im selbenPaket

ja ja ja nein

zugreifbar für Nicht-Unterklassen in einemanderen Paket

ja nein nein nein

zugreifbar für Unterklassen in einemanderen Paket

ja nein ja nein

Algorithmen und Datenstrukturen II 27