Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann...

67
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg Einleitung

Transcript of Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann...

Page 1: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II, SS 2008Algorithmen und Datenstrukturen

Vorlesung 1Prof. Dr. Thomas Ottmann

Algorithmen & Datenstrukturen, Institut für InformatikFakultät für Angewandte WissenschaftenAlbert-Ludwigs-Universität Freiburg

Einleitung

Page 2: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 2

Literatur

Ottmann, Widmayer: Algorithmen und Datenstrukturen, Spektrum AkademischerVerlag, Heidelberg, Berlin; ISBN: 3-8274-1029-0, 4. Auflage, 2002

Saake, Sattler: Algorithmen und Datenstrukturen: eine Einführung mit Java, dpunkt-Verlag, Heidelberg, 2002; ISBN: 3-89864-122-8

Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms, Second Edition, MIT-Press and McGraw Hill, 2002

Sedgewick: "Algorithms in Java (parts 1-4)", Addison-Wesley, ISBN: 0-201-36120-5

Kleinberg, Tardos: Algorithm Design, Pearson/Addison Wesley, ISBN 0-321-29535-8, 2005

Baase, Van Gelder: Computer Algorithms – Introduction to Design & Analysis,Addison-Wesley; ISBN: 0-201-61244-5, Third Edition, 1999

Goodrich, Tamassia : Data Structures and Algorithms in Java, John Wiley & Sons;ISBN: ISBN: 0-471-73884-0 , 4th Edition, 2006

Zahlreiche weitere Bücher von : D. Knuth, S.Baase, Nievergelt / Hinrichs, Güting/Dieker, Heun, A. Drozdeck, Th. Standisch, Kruse, Wood, u.v.a.

Page 3: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 3

Lernziele

Algorithmen für wichtige Probleme :

Sortieren, Suchen, Wörterbuch-Problem, Berechnung kürzester Pfade, . . .

Datenstrukturen :

Listen, Stapel, Schlangen, Bäume, Hash-Tabellen, . . .

Problemlösetechniken :

Divide-and-Conquer, Greedy, vollständige Aufzählung, Backtracking, . . .

Ziele:

Finden effizienter Algorithmen für Instanzen von Problemen aus einem gegebenen Bereich

Fähigkeit zur Beurteilung von Algorithmen aufgrund präziser Kriterien (Korrektheit, Effizienz)

Page 4: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 4

Sprache zur Formulierung von Algorithmen

Natürliche Sprache, Flussdiagramme, Programmiersprache (Java, C, ...) Pseudocode

Mathematisches Instrumentarium zur Messung der Komplexität (Zeit- und Platzbedarf):

Groß-O-Kalkül (Landausche Symbole)

Beschreibung und Analyse von Algorithmen

Page 5: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 5

Pseudocode

Abstrakte Beschreibung einesAlgorithmus

Strukturierter als Beschreibung mit normalem Sprachvokabular

Weniger detailliert als ein Programm

Bevorzugte Notation zur Beschreibung eines Algorithmus

Versteckt Programmentwurfsprobleme

Beispiel : Finden des größten Elements

in einem array

Algorithmus arrayMax(A,n)

Input array A mit n Integern

Output größtes Element von A

currentMax = A[0]

for i = 1 to n – 1 do

if A[i] > currentMax then

currentMax = A[i]

return currentMax

Page 6: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 6

Pseudocode Details

Kontrollfluss- if … then … [else …]- while … do …- repeat … until …- for … do …- Einrücken ersetzt Klammern

Deklaration von MethodenAlgorithm method(arg[, arg…]) Input … Output …

Methodenaufruf var.method(arg[,arg…])

Rückgabewert return Ausdruck

Ausdrücke Zuweisung

(wie = in Java)= Gleichheitstest (wie == in Java)n² Superscripts und andere mathematische Formatierungen sind erlaubt

Page 7: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 7

Exkurs: Kurze Java Einführung

• Was ist Java?• Was ist Objekt-Orientierte Programmierung?• Ein erstes Objekt: das ”Hello World!”-Applet• Variablen in Java: Datentypen, Deklaration und

Zuweisung• Operatoren in Java• Anweisungen in Java

(Folgt dem Kurs von M. Bader, TUM)

Page 8: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 8

Was ist Java

Definition: (aus ”The Java Language: A Whitepaper“/SUN)

Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multi-threaded, and dynamic language.

einfach

objekt-orientiert

interpretiert (”Java Virtual Machine“)

robust, sicher

verteilt, multithread-fähig, dynamisch

architekturunabhängig, portabel

Page 9: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 9

Was ist ein Objekt?

Definition:

”An object is a software bundle of variables and related methods.“

Ein Objekt ist charakterisiert durch seine Identität, seinen Zustand und

sein Verhalten:

• die Identität unterscheidet es von allen anderen Objekten;

• der Zustand ist durch die Werte seiner Variablen gegeben;

• das Verhalten eines Objekts ist durch seine ”Methoden“ (Funktionen,

Prozeduren) gegeben

Objekte können real existierende Komponenten wiedergeben, die Teil

der Problemstellung sind.

Page 10: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 10

Was ist eine Klasse?

Definition:

”A class is a blueprint that defines the variables and the methods

common to all objects of a certain kind.“

Objekte vs. Klassen:

• Klassen werden vom Programmierer definiert (”Konstruktionsplan“)

- Objekte werden während des Programmablaufs erzeugt• Objekte sind Instanzen einer Klasse• alle Objekte einer Klasse besitzen die gleichen Methoden, zeigen

daher gleiches Verhalten• alle Objekte einer Klasse haben die gleichen Variablen (”Member“),

aber mit unterschiedlichem Inhalt (Zustand)

Page 11: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 11

Merkmale objekt-orientierter Programmierung

• Abstraktion• Kapselung• Modularität• Vererbung• Polymorphismus

Page 12: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 12

Was ist Abstraktion?

Konzentration auf die wesentlichen Eigenschaften

• ignoriere Details• Programmdesign mittels Objekten und Klassen (anstelle

von Variablen/Speicherzellen)• ”Was tut ein Objekt?“ anstelle von ”wie wird es das tun?”• top-down Ansatz• lege erst Schnittstellen (Interaktion der Objekte) fest,

implementiere später

Abstraktion ist Teil objektorientierten Designs (Programmentwurf).

Page 13: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 13

Was ist Kapselung u. Information Hiding?

Kapselung:• Objekte enthalten alle benötigten Variablen sowie die darauf

arbeitenden Funktion (”Methoden“)• Ziel: Wissen über Implementierung einer Klasse für andere Klassen

nicht nötig

Information Hiding:• Implementierung einer Klasse wird vor anderen Klassen verborgen

Zugriff auf private Variablen oder Methoden wird verboten• Modifikation eines Objekts nur über öffentliche Methoden (und

Variablen) möglich• Ziel: Implementierung einer Klasse für andere Klassen nicht sichtbar

Page 14: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 14

Was ist Vererbung?

Vererbung: eine Klasse kann Eigenschaften einer Oberklasse

übernehmen.

Ziele:• Wiederverwendung existierender (funktionierender, fehlerfreier)

Klassen• definiere generisches Verhalten in einer Oberklasse, das dann von

verschiedenen (verwandten) Klassen geerbt werden kann

Beispiel: Fahrzeug (= Oberklasse)• mögliche Unterklassen: Auto, Motorrad, Pferdekutsche, . . .• Unterklassen von Auto: Cabrio, Kombi, Limousine, . . .

Page 15: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 15

Ein erstes Programm: Hello World

/*Die HelloWorld Klasse implementiert eine Applikation, die "Hello World!" auf der Standardausgabe ausgibt.

*/

public class HelloWorld {

public static void main(String[] args) {

// Ausgabe des strings "Hello World"

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

}

}

Diesen Text in einem File mit Namen HelloWorld.java ablegen!

Page 16: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 16

Übersetzen und ausführen

Übersetzen/Compilierenjavac HelloWorld.java

Wenn die Compilation erfolgreich ist, wird eine Datei HelloWorld.class erzeugt.

Ausführen des Programmsjava HelloWorld Das Programm wird von dem Java-Interpretierer (JVM) ausgeführt.

Hierbei ist zu beachten, daß der Name der Klasse, die die Methode main enthält, mit dem Dateinamen übereinstimmen muß.

Page 17: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 17

Hello World Application (1)

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}

}

public static void main(String[] args):

• definiere Methode main• main ist öffentlich und ”statisch“ (Klassenmethode, greift nicht auf

Membervariablen der Klasse zu)• main hat Parameter args (die Kommandozeilenparameter als Feld

von Strings)• Programmausführung besteht aus Aufruf von main

Page 18: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 18

Hello World Application (2)

public class HelloWorld {

public static void main(String[] args) {

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

}

}

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

• gib die Zeichenkette "Hello World!" auf der ”Standardausgabe“ aus• (i.d.R. Terminalausgabe)• System.out modelliert das Objekt ”Standardausgabe“• println ist eine Methode dieses Objekts: ”gebe eine Zeichenkette

aus“

Page 19: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 19

Parameter von der Kommandozeile

Programmbeispiel: alle Kommandozeilenparameter ausdrucken

public class Echo {public static void main(String[] args) {

for(int i=0;i<args.length;i++)

System.out.println(args[i]);

}

}

Eingabe von Zahlen: Umwandlung über Integer, Double, etc.double a = (new Double(args[0])).doubleValue();

int b = (new Integer(args[1])).intValue();

int c = Integer.parseInt(args[2]);

Page 20: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 20

Applications vs. Applets

Applet:

•ist letztlich ein Objekt•eingebettet in Viewer/Browser•Sicherheitsbeschränkungen:

–Filezugriff eingeschränkt

(bes. schreiben/löschen von

Dateien verboten)

–keine zusätzlichen Programme

oder Threads startbar

–keine externen Netzverbindungen

Application:

•eigenständiges Programm (innerhalb JVM)•GUI vollständig zu programmieren•Lesen und Schreiben von

Dateien möglich•voller Zugriff auf Komponenten des Systems

Page 21: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 21

Alternative: ein Java Applet

Ein ”Java Applet“ ist typischerweise Teil einer Webseite

• der Programmierer entwirft eine Klasse

• der Webbrowser erzeugt (und ”startet“) ein Objekt dieser Klasse

Page 22: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 22

Hello World als Applet (1)

Java Quellcode: HelloApp.java

Import java.applet.*; import java.awt.*; public class HelloApplet extends Applet {

public void paint(Graphics g) {

g.drawString("Hello World!",50,50);

}

//public void paint(Graphics g) {

//g.drawString("Hello World!",50,50);

//}

}

Compilieren: javac HelloApp.java Ausführen: appletviewer HelloApp.html

Page 23: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 23

Hello World als Applet (2)

Der Java-Bytecode wird in eine HTML-Datei namens HelloApp.html eingebettet:

<HTML> <HEAD> <TITLE> Applettester </TITLE> </HEAD>

<BODY> <APPLET CODEBASE="." CODE="HelloApp.class" HEIGHT=100 WIDTH=200>

</APPLET> </BODY> </HTML>

Page 24: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 24

Programme ausführen: Scheme vs. Java

Scheme

benötigt DrScheme als Laufzeitumgebung

ist interaktiv: Benutzer gibt Ausdrücke ein, DrScheme berechnet Ergebnis

ist deklarativ: Funktionen können wie in der Mathematik definiert werden

Java

”Compiler“ übersetzt Quelltext in Java Bytecode Java Virtual Machine führt Bytecode aus

nicht interaktiv: Änderung des

Quelltexts erfordert erneutes

Compilieren.

imperativ: Ein-/Ausgabe explizit programmiert; Abarbeitung der Instruktionen vom Programm vorgegeben.

Page 25: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 25

Eclipse

Eclipse:

• Programmierumgebung für Java• übernimmt bzw. unterstützt Eingeben und Editieren des

Java-Quelltexts• Übersetzen des Java-Quelltexts• Erzeugen und Austesten der programmierten Objekte• Ausführen der übersetzen Programme und Applets

Zu finden unter http://www.eclipse.org/

Page 26: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 26

Scheme vs. Java Variablen

Scheme•Ausdrücke enthalten Variablen (Platzhalter)

•Auswertung von Ausdrücken: Anwenden von Funktionen auf Argumente, Rekursion

•Wichtigster Datentyp: Listen,

Java•Variablen sind einfache Datentypen oder ”Objekte“•enthalten bestimmten Variablentyp (ganze Zahl, Graphics-Objekt, . . . )•Variablentyp wird im Voraus festgelegt•Objekte bündeln einfache Datentypen bzw. andere Objekte

Fundamental unterschiedliche Konzepte bzgl. Variablen!

Page 27: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 27

Variablen in Java (1)

Variablen• spiegeln die Architektur eines von Neumann Rechners

wieder• sind symbolische Namen für Speicherzellen des

Rechners• müssen explizit (durch Anweisungen) mit Werten gefüllt

und verändert werden

Die Gesamtheit aller Variablenwerte repräsent den Zustand des Rechners (zu einem bestimmten Zeitpunkt)

Page 28: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 28

Variablen in Java (2)

• Variablen müssen stets deklariert werden

(Typ festlegen) bevor sie verwendet werden• es gibt verschiedene Variablentypen• eine Variable eines bestimmten Typs kann nur

Information dieses Typs enthalten.• einfache Variablen enthalten Werte (Zahlen, Zeichen,

true/false), keine Terme oder Ausdrücke• Variablen für komplexe, logische Datenstrukturen

(Listen, Mengen, etc.) sind vom Programmierer zu implementieren (Klassen).

• Felder können aus einfachen Variablen und aus Objekten gebildet werden

Page 29: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 29

Einfache Datentypen in Java

Typ Inhalt Platz

----------------------------------------------------boolean true oder false 1 bit

char Unicode Zeichen 16 bit

byte Integer {−128, . . . , 127} 8 bit

short Integer{−32768, . . . , 32767} 16 bit

int Integer {−2147483648, . . . , 2147483647} 32 bit

long 64-bit Integer 64 bit

float IEEE 754 Gleitkommazahl 32 bit

double IEEE 754 Gleitkommazahl 64 bit

-----------------------------------------------------------------------------------------------

Mit final lassen sich Konstanten definieren, z.B. final int, final

double, etc.

Page 30: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 30

Variablen Deklarieren und Initialisieren

Beispiele:int i;

int j=0;

float e=2.7182f, pi=3.14159f;

final double PI=3.14159265;

char c=’A’;

• falls nicht explizit initialisiert wird, erfolgt implizite Initialisierung (i.d.R. zu 0)

• Variablen dürfen (beinahe) überall deklariert werden• beachte Typkorrektheit!

Page 31: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 31

Zuweisung

Elementare Grundoperation Imperativer Sprachenint i; float e;double pi = 3.14159265;

i = 3;

e = (2.7182f * i) - 1.5f;

pi *= 2.0;

• beachte das ’=’ (’:=’ gibt es in Java nicht!)• das Semicolon schließt die Zuweisung ab• alle Operationen müssen typ-korrekt sein (float double) (beachte implizite Typumwandlungen beim Rechnen!)

Page 32: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 32

Arithmetische Operatoren

+ Addition

- Subtraktion

* Multiplikation

/ Division;

für int (etc.) ist die Division ganzzahlig

% modulo-Rechnung (”Rest“ bei der Division)

Vorrangrelationen:• ”Punkt vor Strich“: *,/,% vor +,-• Plus/Minus als Vorzeichen vor *,/,%• Klammern heben Vorrang auf

Page 33: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 33

Typumwandlung bei „Zahlentypen“

Implizite Umwandlungen:• Regel: ”niedrigerer“ Typ wird in ”höheren“ Typ

umgewandelt• Hierarchie: byte → short → int → long → float → double• Beispiel: 3.0 / 5

Explizite Umwandlungen: (<type>) <expression>• auch entgegen der Hierarchie• Genauigkeitsverlust möglich• ggf. Fehler wegen anderem Wertebereich• Beispiel: (float) 3 / 5

Page 34: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 34

Anweisungen in Java

Zusammenfassung:• Zuweisungen und Methodenaufrufe sind Anweisungen• Blockanweisungen: { ... }• bedingte Anweisungen: if ... else, switch ... case

• Schleifen: while, do ... while, for;• innerhalb Schleifen: break, continue• Anweisungen zur Ausnahmenbehandlung: try ... catch ...finally

Page 35: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 35

Grundkonstrukte imperativer Sprachen

Variablen als Namen für Speicherzellen

Anweisungen:• Zuweisung als elementare Anweisung• Komplexe Anweisungen:

Composition

Selektion

Iteration

• Funktionen und Prozeduren/Methoden

Page 36: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 36

Zuweisungen sind Anweisungen

Beispiele:

i = j = 0 ;

e += 3.71 ;

i--; --i; i++; ++i;

Zuweisungsoperatoren:

= Zuweisung

+=, -=, *=, /=, %= i+=3 Abkürzung für i=i+3, etc.

++ inkrementieren

-- dekrementieren

i++, i-- i nach Auswertung erhöhen/erniedrigen

++i, --i i vor Auswertung erhöhen/erniedrigen

Page 37: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 37

Anweisungen Zusammenfassen: Blockanweisung

Syntax: { <statement> <statement> <statement> ...}

Beispiel:

{ int a=2,b=3;

{ g.drawString("a = "+a, 50,50);

g.drawString("b = "+b, 50,100);

}

g.drawString("a + b = "+(a+b), 50,150);

}

• Beachte: Der Strichpunkt trennt nicht Anweisungen, er ist Bestandteil bestimmter Anweisungen!

• Wozu sind Blockanweisungen sinnvoll? if, for, while, . .

Page 38: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 38

Bedingte Anweisungen

Syntax:• if ( <expression> ) <statement>• if ( <expression> ) <statement> else <statement>

Beispiele:

if ( a != 0 ) b /= a;

if ( x > -1 && x < 1 ) {

if ( x < 0 ) erg = 1+x;

else erg = 1-x;

} else

erg = 0;

Page 39: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 39

Boolesche Operatoren

==, != gleich/ungleich

<, <= kleiner (oder gleich)

>, >= größer (oder gleich)

&& logisches UND

|| logisches ODER

! logisches NICHT (einsteliger Operator)

Vorrangrelationen:

&& vor ||

!= und == vor && und ||

! vor !=, ==, &&, und ||

Klammern heben Vorrangrelationen auf klug einsetzen!

Page 40: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 40

Bedingte Anweisungen: Beispiele

Bedingungen in bedingten Ausdrücken müssen vom Typ boolean sein!

entweder Ausdruck mit boolschen Operatoren:if ( a != 0 ) b /= a;

if ( x >= 0 ) abs = x; else abs = -x;

if ( x < -1 || x > 1 ) erg = 0;

oder Variable vom Typ boolean:boolean c = ( a != 0);

if ( c ) b /= a;

Page 41: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 41

While Anweisung

Syntax: while (<expression>) <statement>

Beispiele:

while (a >= b) a -= b;

i = 1;

while (a >= 1) {

a /= 2;

i++;

}

• führe <statement> solange aus bis <expression> falsch ist• <statement> wird u.U. nie ausgeführt

Page 42: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 42

Do-While Anweisung

Syntax: do <statement> while (<expression>);

Beispiel:

a = 1.0;

do {a *= 2.0;

i--;

} while(i>0);

• führe <statement> solange aus bis <expression> falsch ist• <statement> wird mindestens einmal ausgeführt!

Page 43: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 43

For Anweisung

Syntax:

for(<expression>; <expression>; <expression>) <statement>

Beispiele:

for(i=1;i<=10;i++) a *= 2.0;

a = 17;

for(int i=1;a>=1;i++) a /= 2.0;

• 1. Ausdruck: Initialisierung• 2. Ausdruck: Fortsetzungsbedingung• 3. Ausdruck: ”Schleifenzähler“

Page 44: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 44

Referenzvariablen

Neben den einfachen Datentypen (int, float, etc.) kennt Java noch die sog. Referenztypen.

Zu diesen gehören:

alle Arten von Feldern (int[], float[][], . . . )alle Objekttypen (String, Graphics, . . . )Aus Effiziengründen enthalten diese Variablen nicht das

Feld/Objekt selbst, sondern nur einen Verweis (Referenz) auf das Objekt.

Sonderfall: nullhat eine Referenz den Wert null, verweist sie auf kein

Objekt

Page 45: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 45

Objekte erzeugen und vernichten

Objekte müssen explizit vom Programmierer erzeugt werden.

Objekte werden mit dem Befehl new erzeugt:

String leer = new String();

Double pi = new Double(3.14159265);

Die Parameter richten sich nach den definierten Konstruktoren

Wie werden Objekte wieder gelöscht?• vom Programierer gar nicht• nicht mehr benötigte (zugreifbare) Objekte werden von Java

automatisch gelöscht (”Garbage Collection“)

Page 46: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 46

Feldvariablen (Arrays)

Felder (Arrays) können von jedem Datentyp angelegt

werden.

Beispiele:char[] alphabet;

String[] informatikStudenten;

Feldvariablen kann man bei der Definition mit einem Feld vorbelegen.

Beispiele:int[] primes = {2,3,5,7,11,13,17,19,23,29,31};

int[][] matrix = { {1,0,0}, {0,1,0}, {0,0,1} };

Page 47: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 47

Felder anlegen

• Dynamisch werden Felder mittels new angelegt:

char[] alphabet = new char[26];

double[][] matrix = new double[10][10];

String[] physikStudenten = new String[200];

• als Feldgröße darf ein beliebiger Ausdruck (Variable) eingesetzt• werden• zwei- oder mehrdimensionale Felder sind Felder von Feldern (von• Feldern . . . )• die Feldgröße läßt sich über die ”Membervariable“ .length

ermitteln,

z.B. alphabet.length, matrix.length,

insbes. matrix[2].length

Page 48: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 48

Wie wird auf Felder zugegriffen?

Beispielprogramm:

public void paint(Graphics g) {

int[] primes = {2,3,5,7,11,13,17,19,23,29,31};

for(int i=0;i<primes.length;i++)

g.drawString(i+"-te Primzahl ist "+primes[i],

50,50+20*i);

}

Nicht vergessen:• Feldindizes beginnen bei 0• Feldgröße liefert Zahl der Elemente• Java liefert Exception bei falschen Indizes

Page 49: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 49

Felder sind Referenzvariablen

Beispiel:

int[] a = {1,2,3,4,5};int[] b = a;b[3] = 0;

Welchen Wert enthält b[2]? ) Antwort: 3 (!!!)Welchen Wert enthält a[3]? ) Antwort: 0 (!!!)

a und b sind Referenzen auf das selbe Feld

Änderungen der Elemente von a wirken sich genauso auf b aus (und umgekehrt)

gilt analog für alle Objektvariablen!

Page 50: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 50

Methoden in Java

Jede Java-Klasse besteht aus den Membervariablen und aus den Methoden, die auf diesen arbeiten.

Jede Java-Methode ist Teil einer Klasse:• Methoden modifizieren den Zustand (= die Variablen)

eines Objekts• Methoden geben Auskunft über den Zustand (= die

Variablen) eines Objekts• (private) Hilfsmethoden führen bestimmte Teilaufgaben

aus• es gibt keine ”lokalen“ Methoden

Page 51: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 51

Methoden definieren

Allgemeine Syntax:<public|private|...> typ <name>([parameterliste]) {

<methodenrumpf>

}

Page 52: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 52

Offentliche und private Methoden/Variablen

Java erlaubt verschiedene Einschränkungen bzgl. des Zugriffs auf dieVariablen und Methoden eines Objekts, v.a.:

public: auf öffentliche Variablen/Methoden darf von allen Klassen aus zugegriffen werden.

private: auf private Variablen/Methoden darf nur innerhalb der eigenen Klasse zugegriffen werden.

protected: auf geschützte Variablen/Methoden darf nur von Unterklassen aus zugegriffen werden (s. Vererbung).

Kapselung von Daten, ”information hiding“

Page 53: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 53

Rückgabewerte von Funktionen

• Java-Methoden können Werte liefern• Typ des Rückgabewerts steht vor dem Funktionsnamen• Funktionen ohne Rückgabewert: void• Rückgabebefehl: return <expression>;

Beispiel: Matrixklassepublic class Matrix {

private double[][] elems;

public double getElem(int i, int j) {

return elems[i][j];

}

}

Page 54: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 54

Objekte erzeugen mit Konstruktoren

Konstruktoren sind Methoden die beim Anlegen von Objekten (mittelsnew) aufgerufen werden:

• sie haben keinen Rückgabewert und heißen wie ihre Klasse• sie initialisieren Membervariablen• sie legen dabei ggf. Unterobjekte oder Felder an

Beispiel: Aufruf Matrix a = new Matrix(10);

public class Matrix {private double[][] elems;public Matrix(int size) {elems = new double[size][size];

}}

Page 55: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 55

Methoden überladen

Definition:

eine Methode heißt überladen, wenn in der selben Klasse gleichnamige Methoden mit unterschiedlicher Signatur existieren.

unterschiedliche Implementierung

Auswahl gemäß Art und Zahl der aktuellen Parameter

Anwendung:• Methoden, die gleiches oder sehr ähnliches Verhalten

haben, aber unterschiedliche Parameter erfordern: z.B. java.io.PrintStream.println(...)

• Konstruktoren

Page 56: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 56

Lokale Variable, Blockstruktur

Definition: Jede innerhalb einer Methode oder einer Blockanweisung

deklarierte Variable heißt lokale Variable.

Eigenschaften:• eine lokal Variable ist nur innerhalb des Blocks definiert, in dem sie• deklariert wurde (ebenso in allen ”Unterblöcken“)• eine lokale Variable überschattet eine gleichnamige Variable

(ebenso Parameter oder Membervariable) eines äußeren Blocks• eine lokale Variable verliert ihre Gültigkeit sobald ”ihr“ Block

beendet

wird• in rekursiven Methoden hat jeder Funktionsaufruf einen separaten

Satz lokaler Variablen (ebenso Parameter)

Page 57: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 57

Lokale Variablen: Beispiel

Einsatz in Konstruktoren:

public class Complex {

double real;

double imag;

public Complex(double real, double imag) {

this.real = real;

this.imag = imag;

}

}

Die Membervariablen real und imag werden von den gleichnamigen

Parametern überschattet Umweg über this

Ziel: ”sprechende“ Parameternamen

Page 58: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 58

Globale Variablen

Java kennt keine globalen Variablen:

Jede Variable ist entweder lokal oder Teil einer Klassendefinition.

Ersatzkonstruktion: Klassen-Variablen (static)• einer Klasse zugeordnet• existiert während der gesammten Programmlaufzeit• sofern public deklariert, global zugreifbar• Beachte: Änderung des Wertes möglich bzw.

erwünscht?• read-only für andere Klassen private Klassenvariable

mit öffentlicher Zugriffsmethode

Page 59: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 59

Eigene Klassen definieren

Definition:

”A class is a blueprint that defines the variables and the methods common to all objects of a certain kind.“

Variablen:• Membervariablen (Objektvariablen) sind einem Objekt zugeordnet• statische Variablen sind der gesamten Klasse zugeordnet

Methoden:• Objektmethoden sind einem Objekt zugeordnet• Klassenmethoden (statische Methoden) sind der gesamten Klasse

zugeordnet kein this

Page 60: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 60

Klassendefinition in Java

Beispiel: Polynomfunktionenpublic class Polynomial {

private double[] coeff; /* Membervariable für Koeffizienten */

public final static int maxGrad = 100; /*Klassenvariable */

public Polynomial(double[] coeff) {this.coeff = (double[]) coeff.clone();

}public double value(double x) {

/* Objektmethode: Funktionswert an der Stelle x */}public static Polynomial id() {

/* Klassenmethode: liefert Funktion f(x)=x */}

}

Page 61: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 61

Zugriff auf Klassen- und Objektmethoden

• Objektmethoden: <objektvariable>.<methode>• Klassenmethoden: <klassenname>.<methode>

analog für Klassen- und Objektvariablen

Beispiel: Polynomfunktionen

double[] coeff = {1.0,0.0,1.0};Polynomial a,b;a = Polynomial.id();b = new Polynomial(coeff);g.drawSting("Max. Polynomgrad ist “+Polynomial.maxGrad,0,0);double result = b.value(1.5);

Page 62: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 62

Was ist Vererbung?

Vererbung:

”Klasse kann Eigenschaften einer Oberklasse übernehmen“

Ziele:• Wiederverwendung existierender (funktionierender, fehlerfreier)

Klassen• definiere generisches Verhalten in einer Oberklasse, das dann von

verschiedenen (verwandten) Klassen geerbt werden kann

Beispiel: Applets• Java stellt generische Applet-Klasse zur Verfügung• Programmierer erweitert generische Klasse um spezifisches

Verhalten.• implementiert generische Methoden (init(), paint(), etc.)

Page 63: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 63

Vererbung in Java

Syntax: class UnterKlasse extends Oberklasse { ... }

Unterklasse erbt:• alle Objekt- und Klassenvariablen• alle Objekt- und Klassenmethoden

Einschränkungen:

• Ableitung nur von einer einzigen Klasse (Ausnahme: Schnittstellen)• nur auf public- und protected-Variablen der Oberklasse

zugreifbar.• nur public- und protected-Methoden der Oberklasse aufrufbar.• Sichtbarkeitseinschränkungen bleiben erhalten (keine ”private

Vererbung“)

Page 64: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 64

Abstrakte Klassen und Methoden

Abstrakte Methode:eine abstrakte Methode hat keine Implementierung, nur ihre ”Signatur“

ist festgelegt.

Abstrakte Klasse:eine abstrakte Klasse hat mindestens eine abstrakte Methode;es können keine Objekte dieser Klasse erzeugt werden!

Beispiel:public abstract class Matrix { /* .. Member, etc. .. */

abstract double getElem(int i, int j);double frobeniusNorm() {/* Implementierung basierend auf getElem() */}

}

Page 65: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 65

Schnittstellen

Definition:

Eine Schnittstelle (in Java) ist eine abstrakte Klasse, die ausschließlich

abstrakte Methoden besitzt (insbes. keine Variablen).

Einsatz von Schnittstellen:• modelliere Verhalten von Klassen, ohne Implementierung

festzulegen• erzwinge komplette Implementierung der Schnittstellenfunktionen im

Verbund mit Polymorphismus:• Zugriff von anderen Klassen aus nur über Schnittstellenmethoden• „mehrfache Vererbung“: eine Klasse darf mehrere Schnittstellen

imlementieren, darf aber nur von einer einzigen Klasse abgeleitet sein

Page 66: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 66

Schnittstellen in Java

Schlüsselwort: interface (statt abstract class)

Methoden werden nicht extra als abstract deklariert.

Beispiel: Funktionenpublic interface Function {

public double value(double x);

}

• Schnittstellen gehören wie Klassen in eine eigene Datei, also z.B. Function.java

• müssen genauso compiliert werden

Page 67: Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 67

Schnittstellen implementieren: implements

Schlüsselwort: implements

Beispiel:public class Polynomial implements Function {

/* ... Implementierug ...*/

}

• alle Methoden der Schnittstelle müssen implementiert werden (ansonsten bleibt die Klasse abstrakt)

• Klasse darf mehrere Schnittstellen implementieren;

Syntax: implements Klasse1, Klasse2, ...