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
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.
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)
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
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
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
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)
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
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.
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)
Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 11
Merkmale objekt-orientierter Programmierung
• Abstraktion• Kapselung• Modularität• Vererbung• Polymorphismus
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).
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
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, . . .
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!
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ß.
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
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“
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]);
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
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
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
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>
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.
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/
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!
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)
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
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.
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!
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!)
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
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
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
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
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
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, . .
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;
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!
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;
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
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!
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“
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
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“)
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} };
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
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
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!
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
Informatik II: Algorithmen und Datenstrukturen, SS 2008Prof. Dr. Thomas Ottmann 51
Methoden definieren
Allgemeine Syntax:<public|private|...> typ <name>([parameterliste]) {
<methodenrumpf>
}
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“
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];
}
}
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];
}}
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
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)
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
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
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
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 */}
}
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);
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.)
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“)
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() */}
}
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
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
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, ...