Algorithmen und Datenstrukturen

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
Einführung in die Programmierung Zusammenfassung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen 01 – Einleitung Prof. Dr. Th. Ottmann.
Funktionenklassen zur Messung der Komplexität
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 01 – Einleitung
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Sortieren vorsortierter Daten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Anwendungen von Stapeln und Schlangen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung mit Java
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Variablenkonzept Klassisch, in Java Basistyp
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Java Programme nur ein bisschen objektorientiert.
Implementieren von Klassen
 Präsentation transkript:

Algorithmen und Datenstrukturen 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, 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 2008 Prof. Dr. Thomas Ottmann

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

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 (Zeit- und Platzbedarf): Groß-O-Kalkül (Landausche Symbole) Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Pseudocode Abstrakte Beschreibung eines Algorithmus 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 2008 Prof. Dr. Thomas Ottmann

Pseudocode Details Kontrollfluss - if … then … [else …] - while … do … - repeat … until … - for … do … - Einrücken ersetzt Klammern Deklaration von Methoden Algorithm 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 2008 Prof. Dr. Thomas Ottmann

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

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 2008 Prof. Dr. Thomas Ottmann

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

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

Merkmale objekt-orientierter Programmierung Abstraktion Kapselung Modularität Vererbung Polymorphismus Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

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

Was ist Kapselung u. Information Hiding? 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

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

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

Ü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

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

Hello World Application (2) public class HelloWorld { public static void main(String[] args) { 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

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

Applications vs. Applets 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 2008 Prof. Dr. Thomas Ottmann

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

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

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

Programme ausführen: Scheme vs. Java 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 2008 Prof. Dr. Thomas Ottmann

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

Scheme vs. Java Variablen 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

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

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

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

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

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

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

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

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

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

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 2008 Prof. Dr. Thomas Ottmann

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

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

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

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

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

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

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

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

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

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. 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

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

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

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

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

Methoden definieren Allgemeine Syntax: <public|private|...> typ <name>([parameterliste]) { <methodenrumpf> } Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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