Microsoft PowerPoint Presentation: 01

Werbung
Einleitung
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
Literatur
Ottmann, Widmayer: Algorithmen und Datenstrukturen, Spektrum Akademischer
Verlag, Heidelberg, Berlin; ISBN: 3-8274-1029-0, 4. Auflage, 2002
Saake, Sattler: Algorithmen und Datenstrukturen: eine Einführung mit Java, dpunktVerlag, Heidelberg, 2002; ISBN: 3-89864-122-8
Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms, Second Edition, MITPress 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 2008
Prof. Dr. Thomas Ottmann
2
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 2008
Prof. Dr. Thomas Ottmann
3
Beschreibung und Analyse von Algorithmen
Sprache zur Formulierung von Algorithmen
Natürliche Sprache, Flussdiagramme, Programmiersprache (Java,
C, ...) Pseudocode
Mathematisches Instrumentarium zur Messung der Komplexität (Zeitund Platzbedarf):
Groß-O-Kalkül (Landausche Symbole)
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
4
Pseudocode
Abstrakte Beschreibung eines
Algorithmus
Strukturierter als Beschreibung mit
normalem Sprachvokabular
Weniger detailliert als ein
Programm
Bevorzugte Notation zur
Beschreibung eines
Algorithmus
Versteckt
Programmentwurfsprobleme
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
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
5
Pseudocode Details
Kontrollfluss
Methodenaufruf
- if … then … [else …]
var.method(arg[,arg…])
- while … do …
Rückgabewert
- repeat … until …
return Ausdruck
- for … do …
Ausdrücke
- Einrücken ersetzt Klammern
Zuweisung
Deklaration von Methoden
(wie = in Java)
Algorithm method(arg[, arg…])
= Gleichheitstest
Input …
(wie == in Java)
Output …
n² Superscripts und andere
mathematische
Formatierungen
sind erlaubt
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
6
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 2008
Prof. Dr. Thomas Ottmann
7
Was ist Java
Definition: (aus ”The Java Language: A Whitepaper“/SUN)
Java: A simple, object-oriented, distributed, interpreted,
robust, secure, architecture neutral, portable, highperformance, 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 2008
Prof. Dr. Thomas Ottmann
8
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 2008
Prof. Dr. Thomas Ottmann
9
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 2008
Prof. Dr. Thomas Ottmann
10
Merkmale objekt-orientierter Programmierung
•
•
•
•
•
Abstraktion
Kapselung
Modularität
Vererbung
Polymorphismus
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
11
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 2008
Prof. Dr. Thomas Ottmann
12
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 2008
Prof. Dr. Thomas Ottmann
13
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 2008
Prof. Dr. Thomas Ottmann
14
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 2008
Prof. Dr. Thomas Ottmann
15
Übersetzen und ausführen
Übersetzen/Compilieren
javac HelloWorld.java
Wenn die Compilation erfolgreich ist, wird eine Datei
HelloWorld.class erzeugt.
Ausführen des Programms
java 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 2008
Prof. Dr. Thomas Ottmann
16
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 2008
Prof. Dr. Thomas Ottmann
17
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 2008
Prof. Dr. Thomas Ottmann
18
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 2008
Prof. Dr. Thomas Ottmann
19
Applications vs. Applets
Applet:
Application:
•ist letztlich ein Objekt
•eingebettet in Viewer/Browser
•Sicherheitsbeschränkungen:
•eigenständiges Programm
(innerhalb JVM)
•GUI vollständig zu
programmieren
•Lesen und Schreiben von
Dateien möglich
•voller Zugriff auf Komponenten
des Systems
–Filezugriff eingeschränkt
(bes. schreiben/löschen von
Dateien verboten)
–keine zusätzlichen Programme
oder Threads startbar
–keine externen
Netzverbindungen
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
20
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 2008
Prof. Dr. Thomas Ottmann
21
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 2008
Prof. Dr. Thomas Ottmann
22
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 2008
Prof. Dr. Thomas Ottmann
23
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
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
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.
24
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 2008
Prof. Dr. Thomas Ottmann
25
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 2008
Prof. Dr. Thomas Ottmann
26
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 2008
Prof. Dr. Thomas Ottmann
27
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 2008
Prof. Dr. Thomas Ottmann
28
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 2008
Prof. Dr. Thomas Ottmann
29
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 2008
Prof. Dr. Thomas Ottmann
30
Zuweisung
Elementare Grundoperation Imperativer Sprachen
int 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 2008
Prof. Dr. Thomas Ottmann
31
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 2008
Prof. Dr. Thomas Ottmann
32
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 2008
Prof. Dr. Thomas Ottmann
33
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 2008
Prof. Dr. Thomas Ottmann
34
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 2008
Prof. Dr. Thomas Ottmann
35
Zuweisungen sind Anweisungen
Beispiele:
i = j = 0 ;
e += 3.71 ;
i--; --i; i++; ++i;
Zuweisungsoperatoren:
=
+=, -=, *=, /=, %=
++
-i++, i-++i, --i
Zuweisung
i+=3 Abkürzung für i=i+3, etc.
inkrementieren
dekrementieren
i nach Auswertung erhöhen/erniedrigen
i vor Auswertung erhöhen/erniedrigen
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
36
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 2008
Prof. Dr. Thomas Ottmann
37
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 2008
Prof. Dr. Thomas Ottmann
38
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 2008
Prof. Dr. Thomas Ottmann
39
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 2008
Prof. Dr. Thomas Ottmann
40
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 2008
Prof. Dr. Thomas Ottmann
41
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 2008
Prof. Dr. Thomas Ottmann
42
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 2008
Prof. Dr. Thomas Ottmann
43
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: null
hat eine Referenz den Wert null, verweist sie auf kein
Objekt
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
44
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 2008
Prof. Dr. Thomas Ottmann
45
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 2008
Prof. Dr. Thomas Ottmann
46
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 2008
Prof. Dr. Thomas Ottmann
47
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 2008
Prof. Dr. Thomas Ottmann
48
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 2008
Prof. Dr. Thomas Ottmann
49
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 2008
Prof. Dr. Thomas Ottmann
50
Methoden definieren
Allgemeine Syntax:
<public|private|...> typ <name>([parameterliste])
{
<methodenrumpf>
}
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
51
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 2008
Prof. Dr. Thomas Ottmann
52
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: Matrixklasse
public class Matrix {
private double[][] elems;
public double getElem(int i, int j) {
return elems[i][j];
}
}
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
53
Objekte erzeugen mit Konstruktoren
Konstruktoren sind Methoden die beim Anlegen von Objekten (mittels
new) 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 2008
Prof. Dr. Thomas Ottmann
54
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 2008
Prof. Dr. Thomas Ottmann
55
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 2008
Prof. Dr. Thomas Ottmann
56
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 2008
Prof. Dr. Thomas Ottmann
57
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 2008
Prof. Dr. Thomas Ottmann
58
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 2008
Prof. Dr. Thomas Ottmann
59
Klassendefinition in Java
Beispiel: Polynomfunktionen
public 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 2008
Prof. Dr. Thomas Ottmann
60
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 2008
Prof. Dr. Thomas Ottmann
61
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 2008
Prof. Dr. Thomas Ottmann
62
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 2008
Prof. Dr. Thomas Ottmann
63
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 2008
Prof. Dr. Thomas Ottmann
64
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 2008
Prof. Dr. Thomas Ottmann
65
Schnittstellen in Java
Schlüsselwort: interface (statt abstract class)
Methoden werden nicht extra als abstract deklariert.
Beispiel: Funktionen
public 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 2008
Prof. Dr. Thomas Ottmann
66
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, ...
Informatik II: Algorithmen und Datenstrukturen, SS 2008
Prof. Dr. Thomas Ottmann
67
Herunterladen