Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Algorithmen und Datenstrukturen

Ähnliche Präsentationen


Präsentation zum Thema: "Algorithmen und Datenstrukturen"—  Präsentation transkript:

1 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

2 Literatur Ottmann, Widmayer: Algorithmen und Datenstrukturen, Spektrum Akademischer Verlag, Heidelberg, Berlin; ISBN: , 4. Auflage, 2002 Saake, Sattler: Algorithmen und Datenstrukturen: eine Einführung mit Java, dpunkt-Verlag, Heidelberg, 2002; ISBN: 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: Kleinberg, Tardos: Algorithm Design, Pearson/Addison Wesley, ISBN , 2005 Baase, Van Gelder: Computer Algorithms – Introduction to Design & Analysis, Addison-Wesley; ISBN: , Third Edition, 1999 Goodrich, Tamassia : Data Structures and Algorithms in Java, John Wiley & Sons; ISBN: ISBN: , 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

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

4 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

5 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

6 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

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

11 Merkmale objekt-orientierter Programmierung
Abstraktion Kapselung Modularität Vererbung Polymorphismus Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. 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 2008 Prof. Dr. Thomas Ottmann

13 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

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

16 Ü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

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

18 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

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

20 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

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

24 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

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

26 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

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

29 Einfache Datentypen in Java
Typ Inhalt Platz boolean true oder false bit char Unicode Zeichen bit byte Integer  {−128, , 127} bit short Integer{−32768, , 32767} bit int Integer {− , , } 32 bit long 64-bit Integer bit float IEEE 754 Gleitkommazahl bit double IEEE 754 Gleitkommazahl 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

30 Variablen Deklarieren und Initialisieren
Beispiele: int i; int j=0; float e=2.7182f, pi= f; final double PI= ; 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

31 Zuweisung Elementare Grundoperation Imperativer Sprachen
int i; float e; double pi = ; 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

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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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 2008 Prof. 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: null hat eine Referenz den Wert null, verweist sie auf kein Objekt Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. 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( ); 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

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

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

51 Methoden definieren Allgemeine Syntax:
<public|private|...> typ <name>([parameterliste]) { <methodenrumpf> } Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. 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 2008 Prof. 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: 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

54 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

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

60 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

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

66 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

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


Herunterladen ppt "Algorithmen und Datenstrukturen"

Ähnliche Präsentationen


Google-Anzeigen