Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 1 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät."—  Präsentation transkript:

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

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

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

4 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann4 Sprache zur Formulierung von Algorithmen Natürliche Sprache, Flussdiagramme, Programmiersprache (Java, C,...) Pseudocode Mathematisches Instrumentarium zur Messung der Komplexität (Zeit- und Platzbedarf): Groß-O-Kalkül (Landausche Symbole) Beschreibung und Analyse von Algorithmen

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

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

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

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

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

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

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

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

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

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

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

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

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

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

19 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann19 Parameter von der Kommandozeile Programmbeispiel: alle Kommandozeilenparameter ausdrucken public class Echo { public static void main(String[] args) { for(int i=0;i

20 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann20 Applications vs. Applets Applet: ist letztlich ein Objekt eingebettet in Viewer/Browser Sicherheitsbeschränkungen: –Filezugriff eingeschränkt (bes. schreiben/löschen von Dateien verboten) –keine zusätzlichen Programme oder Threads startbar –keine externen Netzverbindungen Application: eigenständiges Programm (innerhalb JVM) GUI vollständig zu programmieren Lesen und Schreiben von Dateien möglich voller Zugriff auf Komponenten des Systems

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

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

23 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann23 Hello World als Applet (2) Der Java-Bytecode wird in eine HTML-Datei namens HelloApp.html eingebettet: Applettester

24 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann24 Programme ausführen: Scheme vs. Java Scheme benötigt DrScheme als Laufzeitumgebung ist interaktiv: Benutzer gibt Ausdrücke ein, DrScheme berechnet Ergebnis ist deklarativ: Funktionen können wie in der Mathematik definiert werden Java Compiler übersetzt Quelltext in Java Bytecode Java Virtual Machine führt Bytecode aus nicht interaktiv: Änderung des Quelltexts erfordert erneutes Compilieren. imperativ: Ein-/Ausgabe explizit programmiert; Abarbeitung der Instruktionen vom Programm vorgegeben.

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

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

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

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

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

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

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

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

33 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann33 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: ( ) auch entgegen der Hierarchie Genauigkeitsverlust möglich ggf. Fehler wegen anderem Wertebereich Beispiel: ( float ) 3 / 5

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

35 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann35 Grundkonstrukte imperativer Sprachen Variablen als Namen für Speicherzellen Anweisungen: Zuweisung als elementare Anweisung Komplexe Anweisungen: Composition Selektion Iteration Funktionen und Prozeduren/Methoden

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

37 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann37 Anweisungen Zusammenfassen: Blockanweisung Syntax: {...} 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,..

38 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann38 Bedingte Anweisungen Syntax: if ( ) if ( ) else Beispiele: if ( a != 0 ) b /= a; if ( x > -1 && x < 1 ) { if ( x < 0 ) erg = 1+x; else erg = 1-x; } else erg = 0;

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

40 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann40 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 ) erg = 0; oder Variable vom Typ boolean : boolean c = ( a != 0); if ( c ) b /= a;

41 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann41 While Anweisung Syntax: while ( ) Beispiele: while (a >= b) a -= b; i = 1; while (a >= 1) { a /= 2; i++; } führe solange aus bis falsch ist wird u.U. nie ausgeführt

42 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann42 Do-While Anweisung Syntax: do while ( ); Beispiel: a = 1.0; do { a *= 2.0; i--; } while(i>0); führe solange aus bis falsch ist wird mindestens einmal ausgeführt!

43 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann43 For Anweisung Syntax: for( ; ; ) 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

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

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

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

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

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

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

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

51 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann51 Methoden definieren Allgemeine Syntax: typ ([parameterliste]) { }

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

53 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann53 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 ; Beispiel: Matrixklasse public class Matrix { private double[][] elems; public double getElem(int i, int j) { return elems[i][j]; }

54 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann54 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]; }

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

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

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

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

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

60 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann60 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 */ }

61 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann61 Zugriff auf Klassen- und Objektmethoden Objektmethoden:. Klassenmethoden:. 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);

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

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

64 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann64 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() */ }

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

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

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


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

Ähnliche Präsentationen


Google-Anzeigen