View
0
Download
0
Category
Preview:
Citation preview
Pro Informatik 2009: Objektorientierte ProgrammierungTag 11
Marco Block-Berlitz, Miao Wang
Freie Universität Berlin, Institut für Informatik
31.08.2009
2Pro Informatik 2009: Objektorientierte Programmierung
Agenda
Tag 11 – BerechenbarkeitProgrammiersprachen, Algorithmus, Berechenbarkeit, Registermaschinen, Turingmaschine, Halteproblem, Laufzeitanalyse, O-NotationJava-Dokumentation, Einführung in Eclipse
Tag 12 – Objektorientierung IIWiederholung OOP, Innere Klassen, Anonyme Klassen, Vererbung, Typverträglichkeit, Verdecken, Ersetzen, Identifizieren, Überladen, Die Klasse ObjectGenerizität
Tag 13 – Spezifikation und VerifikationFormale Verfahren zur Spezifikation und Verifikation imperativer Programme, Assertions, partielle und totale Korrektheit, Hoare-Kalkül, Umwandlung von Rekursion zu IterationVerschiedene Übungen zum Hoare-Kalkül
Tag 14 – Software-EngineeringIterative Softwareentwicklung, UML, Softwareentwicklung im TeamEntwicklungswerkzeuge, Entwurfsmuster
Tag 15 – ProgrammiertechnikenTop-Down, Bottom-Up, Rekursion, Brute Force, Greedy, Teile und Herrsche,Dynamisches Programmieren, MemoisationKlausurvorbereitung
3Pro Informatik 2009: Objektorientierte Programmierung
Agenda
Tag 16 – DatenstrukturenAbstrakte Datentypen, ADT Folge: Stack, Queue, Liste, ADT Menge: Bäume: Binärbäume, Suchbäume, AVL-Bäume, Prioritätswarteschlangen, Heap, GraphenADTs in Java
Tag 17 – SortieralgorithmenInsertionSort, BubbleSort, SelectionSort, ShellSort, MergeSort, QuickSort, Binary Tree Sort, HeapSortUntere Schranke für vergleichsbasierte Sortierverfahren, BucketSort, CountingSort, RadixSort
Tag 18 – SuchalgorithmenBinärsuche, Breitensuche, Tiefensuche, Backtracking Klausurvorbereitung
Tag 19 – Klausur
Tag 20 – Letzter TagWeitere Projekte am Fachbereich, Klausurnachbesprechung, Grillen?
4Pro Informatik 2009: Objektorientierte Programmierung
Organisatorisches
Kontakt:Miao Wang
Email: miao.wang@fu-berlin.de
Büro: R 136
Tutorien:SR 005, 006, 049 (Laptops)
RR K38, K44, K46 (Pool-Rechner)
Achtung: Am 04.09 ist SR 005 besetzt
Übungen:Übungszettel mit Abgabe
Programmierprojekt in Gruppen (2er, 3er)
Klausur:Vorletzter Vorlesungstag: Do, 10.09.2009
Voraussetzung: Bearbeitung der Übungen, 20 € Kursgebühr
Scheinnote entspricht Klausurnote
mailto:miao.wang@fu-berlin.de�
5Pro Informatik 2009: Objektorientierte Programmierung
BERECHENBARKEIT
6Pro Informatik 2009: Objektorientierte Programmierung
Programmiersprachen
7Pro Informatik 2009: Objektorientierte Programmierung
Programmiersprachen
8Pro Informatik 2009: Objektorientierte Programmierung
Programmiersprachen
Programmierparadigma
deklarativ(beschreibend, logisch)
imperativ(befehls-, problemorientiert, prozedural)
funktional(z.B. Haskell)
relational(z.B. Prolog)
prozedural(z.B. Pascal)
objektorientiert(z.B. Java)
f 0 = 1f x = x*f(x-1)
member(X,L):-concat(L1,[X|L2],L)
y = 1;while (x>1) {
y = x * y;x = x – 1;
}
Person p = new Person(“Hans”, 41);
Keine Zuweisungen, keine Kontrollstrukturen, oftmals Rekursion.
„ausführbare Spezifikation“
Zur Lösung eines Problems müssen die verfügbaren Operationen des Rechners durch geschickte Kombinationen verbunden werden.
„rechnernahe Implementierung“
9Pro Informatik 2009: Objektorientierte Programmierung
Relevante Programmiersprachenim Studium an der FU
1959 Lisp
1965 Basic
1971 Pascal
1972 C
1975 Prolog
1985 C++
1987 Perl
1990 Haskell
1995 Delphi
1995 Java
2000 C#
relational
prozedural
prozedural
prozedural
relational
objektorientiert
objektorientiert
funktional
objektorientiert
objektorientiert
objektorientiert
Hohe Relevanz für Studium am Fachbereich Mathematik/Informatik an der FU-Berlin
10Pro Informatik 2009: Objektorientierte Programmierung
Funktionale vs. Imperative Programmierung
Funktionale Programme: Definition von Ausdrücken (expressions)
Berechnung: Auswertung von Ausdrücken (liefern Wert)
Variablen: Namen für Ausdrücke oder Werte
Imperative Programme: Anweisungsfolgen (Befehle, statements)
a1, a2, a3, …imperare (lat.) = befehlen
Berechnung/Programmausführung: Ausführung der Anweisungen, bewirkt Effekte durch Änderung von Zuständen von Variablen (u.a.)
Variablen: Namen von Behältern für Werte (d.h. Speicherzellen), enthalten einen Wert, der durch einen anderen Wert ersetzt werden kann.
f 0 = 1f x = x*f(x-1)
y = 1;while (x>1) {
y = x * y;x = x – 1;
}
11Pro Informatik 2009: Objektorientierte Programmierung
Funktionale vs. Imperative Programmierung
x=3f (x-1)
systematische Veränderung vonzwei Speicherzellen
x = 2f (x-1)
x = 1f (x-1)
x = 0f (0)=1
1*1
2*1
3*2
x=3;
y = 1;while (x>1) {
y = x * y;x = x – 1;
}
X
Y
1
6
vier unterschiedliche Werte mit dem Namen x, es wird kein y benötigt
f 3 hat den Wert 6 (und f 2 = 2 )
f 0 = 1f x = x*f(x-1)
y = 1;while (x>1) {
y = x * y;x = x – 1;
}
12Pro Informatik 2009: Objektorientierte Programmierung
Haskell
Oft sehen Programme in Haskell sehr elegant aus und dienen der Spezifikation von höheren Programmiersprachen.
In Haskell wird die Unterscheidung von Datentypen geschult.
Als Beispiel sehen wir die member-Funktion
und die Fakultäts-Funktion
Der QuickSort-Algorithmus läßt sich sehr kurz formulieren:
member :: Int -> [Int] -> Boolmember b [] = Falsemember b (a:x) = (a==b) || member b x
fac :: Int -> Intfac 0 = 1fac n = n * fac (n-1)
qSort [] = []qSort (a:x) = qSort[y|y
13Pro Informatik 2009: Objektorientierte Programmierung
Spezifikation einer Funktion
Mathematik: Spezifikation einer Funktion
Informatik: funktionales Programm
Informatik: imperativer Algorithmus und imperatives Programm
Haskell
f(x) = 1 , für x=0x * f(x-1) , für x>0{ undefiniert für x1) {
y = x * y;x = x – 1;
}
setze y=1;solange x>1, wiederhole:
setze y auf x*yund x auf x-1
14Pro Informatik 2009: Objektorientierte Programmierung
Logische Programmierung mit Prolog
Prolog ist die „Sprache der KI“. Wir können Regeln definieren und automatisch schlussfolgern. Prolog ist eine sehr mächtige Sprache, da eine automatische, optimierte Suche hinter den Kulissen arbeitet. Es folgen ein paar Beispiele.
Ist X Element einer Liste L?
Definition des member-Prädikats:
Prolog
member(X, [X|T]).member(X, [Y|T]) :- member (X, T).
?member (c, [a,b,c]).yes
?member (X, [a,b]).X=a;X=b;
Literaturhinweis:PROLOG - Programming for Artificial Intelligence", 3.Auflage, Pearson Verlag, 2001
15Pro Informatik 2009: Objektorientierte Programmierung
Logische Programmierung mit Prolog
Die Konkatenation von Listen lässt sich elegant formulieren
Mit Hilfe des concat-Prädikats, können wir member ausdrücken
Wir können Elemente von Listen entfernen und neue Listen beschreiben
Mit del können wir sogar insert ausdrücken
Oder kurz mal alle Permutationen
Mehr dazu in Vorlesung: „Künstliche Intelligenz“
Prolog
concat ([], L, L).concat ([X|L1], L2, [X|L3]) :- concat(L1, L2, L3).
member(X, L) :- concat(_, [X|_], L).
del(X, [X|Tail], Tail).del(X, [Y|Tail], [Y|Tail2]) :- del(X, Tail, Tail2).
insert(X, List, List_with_X) :- del(X, List_with_X, List).
perm([],[]).perm([X|L],P) :- perm(L, L1), insert(X,L1,P).
16Pro Informatik 2009: Objektorientierte Programmierung
C als Implementierungsprache für UNIX entwickelt (Kernighan, Ritchie, ATT Labs, 1970)
ursprünglich reine Systemimplementierungssprache, Bedeutung erst durch Verbreitung UNIX
Heute noch oft benutzt für Betriebssyteme, Echtzeitsysteme, hardwarenahe Systeme
Später (Bjarne Stroustrup, 1979) weiterentwickelt zu C++ mit Objektorientierung
Liste von Hello-World Programmen: http://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/Programmiersprachen
C/C++
#include
int main(void) {printf("Hallo Welt!\n");return 0;
}
#include #include
int main() {std::cout
17Pro Informatik 2009: Objektorientierte Programmierung
Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmier-aufgaben gedacht sind. Sie sind meist wenig restriktiv, was die Sprachelemente angeht.
Eigenschaften
• oft interpretiert
• liberale Typen, oft kein Zwang zur Deklaration von Variablen
• implizite Typwandlung
• automatische Speicherverwaltung
Anwendungen
• einfache Aufgaben
• Prototyp erstellen (rapid prototyping)
• Betriebssystemkommandosprache
Beispiele
• Python, PHP, Perl, Ruby, Javascript ( ≠ Java !), Tcl, Bash, C-Shell, Basic, …, Lisp (?)
Skriptsprachen
18Pro Informatik 2009: Objektorientierte Programmierung
Algorithmus (algorithm) benannt nach AlKhwarizmi (arab. Mathematiker, 9.Jhd.)
Ein Algorithmus abstrahiert von Rechnerhardware und konkreter Programmiersprache und ist imperativ (!). Ein Algorithmus ist ein schrittweises Verfahren zur Lösung einer Klasse gleichartiger Problemen mit folgenden Eigenschaften:
1. Jeder Einzelschritt ist für ausführenden Instanz eindeutig verständlich und ausführbar
2. Das Verfahren ist endlich beschreibbar
3. Optional: Der nächste auszuführende Schritt ist eindeutig bestimmt
4. Optional: Das Verfahren terminiert
5. Optional: Das Verfahren ist determiniert
6. Optional: Das Verfahren ist deterministisch
Gilt Punkt 3, so ist der Algorithmus sequentiell, ansonsten nichtsequentiell (concurrent).
Gilt Punkt 4, so ist der Algorithmus terminierend, ansonsten nichtterminierend.
Gilt Punkt 5, so ist der Algorithmus determiniert, ansonsten nicht determiniert.
Gilt Punkt 6, so ist der Algorithmus deterministisch, ansonsten nichtdeterministisch.
Traditioneller Algorithmusbegriff
19Pro Informatik 2009: Objektorientierte Programmierung
Sequentiell?
Termination?
Determiniert?Der Algorithmus liefert stets das gleiche Ergebnis bei gleichen Startbedingungen und Eingaben
Deterministisch?Während des Algorithmus ist der nächste Handlungsschritt eindeutig definiert.
Traditioneller Algorithmusbegriff
y=0;x=3;while (x>1) {
y=y*x}
y=11;x=3;m=0;while (y>=x) {
y=y-x || m=m+1;}
Reihenfolge beliebig
20Pro Informatik 2009: Objektorientierte Programmierung
Vom Algorithmus zum ausführbaren Programm
Programm als Quellcode in höherer ProgrammierspracheIdee/Algorithmus
Programm in Maschinensprache
Ausführbares Programm
Programmieren (Coding)
Übersetzung (Compiler)
Binden mit anderen (Hilfs-)Programmen(Linker)
Compiler (z.B. C, C++)
21Pro Informatik 2009: Objektorientierte Programmierung
Vom Algorithmus zum ausführbaren Programm
Programm als Quellcode in höherer ProgrammierspracheIdee/Algorithmus
Interpretierer
Programmieren (Coding)
Interpreter (z.B. Prolog, C#, Java)
Heute: Keine klare Trennung mehr zwischen Übersetzung und Interpretation, meist erst Übersetzung in Byte-Code / Intermediate Language
Interpretation
22Pro Informatik 2009: Objektorientierte Programmierung
Java:
Vom Algorithmus zum ausführbaren Programm
Java BytecodeJava-Quellcode
JVM
Interpretation
javac
Übersetzung (Compiler)
class xyz {…
}
bnc 0xE.. sto 0xF..
plattformunabhängigerMaschinencode
plattformabhängigerMaschinencode
Intel, Sun, SparcWin / Mac / Solaris / Linux
23Pro Informatik 2009: Objektorientierte Programmierung
Berechenbarkeit
Definition: „Eine Funktion ist berechenbar, wenn es einen Algorithmus gibt, der die Funktion berechnet“
Sei T der Definitionsbereich von f
A berechnet f, wenn Eingabe n in T liegt und A nach einer endlichen Zahl von Schritten f(n) liefert
Liegt n nicht in T, so terminiert A nicht
f ist somit eine partielle Funktion
Frage: Welche Funktionen sind berechenbar? Gibt es Funktionen, die überhaupt nicht berechenbar sind?
Funktion fEingabe n Ausgabe f(n)
Algorithmus A
Literaturhinweis:Theoretische Informatik – kurzgefaßt, 3. Auflage, Uwe Schöning, Spektrum Akademischer Verlag, 2001
24Pro Informatik 2009: Objektorientierte Programmierung
Entscheidbarkeit
Definition: „Eine Funktion ist entscheidbar, wenn sie eine charakteristische Funktion repräsentiert und diese entscheidbar ist“
Entscheidbar: f gibt ja aus, wenn n in T - ansonsten nein
Semi-entscheidbar: f gibt ja aus, wenn n in T – ansonsten undefiniert
Unentscheidbar
Funktion fEingabe nja wenn n in T
nein sonst
Algorithmus A
25Pro Informatik 2009: Objektorientierte Programmierung
Turingmaschine
Die Turingmaschine dient als einfaches Rechnermodell:
• Ein unendlich langes Speicherband mit Feldern, auf dem jeweils ein Zeichen gespeichert werden kann
• Ein programmierbaren Schreib-Lesekopf, der sich auf dem Band feldweise bewegen kann und die Zeichen lesen oder ändern kann
26Pro Informatik 2009: Objektorientierte Programmierung
Nicht entscheidbare Probleme: Halteproblem
Das Halteproblem von Turingmaschinen ist ein Standardbeispiel für ein nicht entscheidbares Problem [Alan Turing, 1936]:
Kann man ein Programm A entwickeln, das als Eingabe ein anderes Programm B und einen Eingabewert n erhält und entscheiden kann, ob das andere Programm B terminiert?
Antwort: Nein
27Pro Informatik 2009: Objektorientierte Programmierung
BeweisAngenommen es gibt ein Programm A, welches folgendes tut:
Und ein Programm T:
Was passiert, wenn eine Turingmaschine T(T) aufruft?
Dann liefert T(T) entweder Ja oder bleibt in einer Endlosschleife
Terminiert T(T) und liefert Ja, dann lieferte A(T,T) Nein. Das bedeutet wiederum, dass T(T) nicht terminiert. Widerspruch!
Terminiert T(T) nicht, dann lieferte A(T,T) Ja. Das bedeutet wiederum, das T(T) terminiert.Widerspruch!
Es gibt keine Turingmaschine, die das Halteproblem entscheiden kann!
Nicht entscheidbare Probleme: Halteproblem
A(Programm B, Eingabe n):if A(n) terminiert return Ja else return Nein
T(Programm X):while A(X,X) == Ja continueelse return Ja
28Pro Informatik 2009: Objektorientierte Programmierung
Registermaschine
Die Registermaschine (RAM-Modell) ist ein weiteres Rechnermodell, das etwas ähnlicher ist zu heutigen Rechnern als die Turingmaschinen:
• Ein Befehlszeiger p
• Eine Eingabe n
• Eine Ausgabe o
• Ein unendlich großer, durchnummerierter Registerspeicher: r1, r2, r3, etc..
Operationen werden durch den Befehlssatz einer Programmiersprache festgelegt.
29Pro Informatik 2009: Objektorientierte Programmierung
LOOP-Registermaschine
Befehlssatz einer LOOP-Registermaschine
Beispiel: Multiplikation xi = xj * xk
Mit LOOP-Programmen kann man genau die primitiv rekursiven Funktionen fk :: Nk → Nberechnen.
Aber das sind bekanntlich nicht alle berechenbaren Funktionen.
xi = xj + cxi = xj – cLOOP xi {}
c: konstante natürliche ZahlAddition wie üblichSubtraktion:xi erhält den Wertxj – c, wenn xj – c ≥ 0sonst 0
LOOP xi {xi = xi - 1}LOOP xj {xi = xi + xk}
30Pro Informatik 2009: Objektorientierte Programmierung
Primitiv Rekursive Funktionen
1. Die k-stellige Nullfunktion, die immer 0 ausgibt:
2. Die Nachfolgerfunktion
3. Die k-stellige Projektionen
4. Die Kompositionm-stellige Funktion gm n-stellige Funktionen h
5. Die primitive Rekursion zweier Funktionen
Alle primitiv-rekursiven Funktionen sind im intuitiven Sinn berechenbar. Sie schöpfen aber nicht alle intuitiv berechenbaren Funktionen aus. Beispiel: Die Ackermannfunktion.
31Pro Informatik 2009: Objektorientierte Programmierung
Ackermannfunktion
Die Ackermannfunktion (Ackermann 1926) ist eine extrem schnell wachsende mathematische Funktion, die berechenbar ist, aber nicht primitiv rekursiv:
Literaturhinweis:Theoretische Informatik – kurzgefaßt, 3. Auflage, Uwe Schöning, Spektrum Akademischer Verlag, 2001
32Pro Informatik 2009: Objektorientierte Programmierung
WHILE-Registermaschine
Damit die Registermaschine, alle intuitiv berechenbaren Funktionen realisieren kann, ist eine Spracherweiterung nötig.
Die WHILE-Registermaschine kann alle berechenbaren Funktionen realisieren und somit auch alleLOOP-Programme.
xi = xj + cxi = xj – cWHILE (xi ≠ 0) {}
Führe solange aus bis xi den Wert 0 hat
33Pro Informatik 2009: Objektorientierte Programmierung
GOTO-Registermaschine
Alternativ gibt es den GOTO-Befehlssatz.
Die Klasse der GOTO-Programme ist gleich der Klasse der WHILE-Programme
xi = xj + cxi = xj – cif xi=c then GOTO MjGOTO MjHALT
Literaturhinweis:Go To Statement Considered Harmful, E. W. Dijkstra, Communications of the ACM, Vol.11, No.3, 1968, pp. 147–148
35Pro Informatik 2009: Objektorientierte Programmierung
LAUFZEITANALYSE
36Pro Informatik 2009: Objektorientierte Programmierung
Laufzeitanalyse
Die Laufzeit T(n) eines Algorithmus ist die maximale Anzahl der Schritte bei einer Eingabegröße n.
Wie man die Größe einer Eingabe misst, muss konkret festgelegt werden, z.B. für Sortieralgorithmen wählt man sinnvollerweise die Anzahl der zu sortierenden Objekte.
Welche Schritte dabei gezählt werden (z.B. arithmetische Operationen, Vergleiche, Speicherzugriffe,
Wertzuweisungen) hängt sehr stark von dem verwendeten Modell oder der verwendeten Programmiersprache ab. Sogar ein Compiler kann Einfluss auf die Anzahl der Schritte haben.
Oft unterscheiden sich die Laufzeiten des gleichen Algorithmus’ unter Zugrundelegung verschiedener Modelle um konstante Faktoren. Das Ziel der Laufzeitanalyse besteht darin, den Einfluss solcher modell- und implementierungsabhängiger Faktoren auszublenden und damit einen davon unabhängigen Vergleich von Laufzeiten zu ermöglichen.
Literaturhinweis:Algorithmen – kurz gefasst, Uwe Schöning, Spektrum Akademischer Verlag, 1997
37Pro Informatik 2009: Objektorientierte Programmierung
Konstante Laufzeit
Einfaches Beispiel:
Die Funktion constFunction benötigt in Bezug auf die Eingabegröße n 2 Arbeitsschritte.
Unabhängig von der Eingabe benötigt die Funktion konstant viele Arbeitsschritte. Wir sprechen dann von konstanter Laufzeit.
Auch constFunction2 benötigt eine konstante Anzahl an Arbeitsschritten. Von der asymptotischen Laufzeit her unterscheiden sich die beiden Funktionen nicht.
int constFunction (int[] n) {int i = 2*12+2; // 2 Schritte return i;
}
int constFunction2 (int[] n) {int i = 0; // 1 Schrittwhile(i < 10) { // 10 mal
i++; // 1 Schritt}return i;
}
38Pro Informatik 2009: Objektorientierte Programmierung
Lineare Laufzeit
Einfaches Beispiel:
Die Funktion sumFunction benötigt in Bezug auf die Eingabegröße n folgende Arbeitsschritte:
sumFunction(n) = 1 + n * 1 = n+1
Für diese Fälle wollen wir konstante Werte, die keinen signifikanten Einfluss haben, weglassen. Für dieses Beispiel ergebe sich sumFunction(n) = n, dann sprechen wir von linearer Laufzeit.
int sumFunction (int[] n) {int sum = 0; // 1 Schrittfor (int i=0; i
39Pro Informatik 2009: Objektorientierte Programmierung
Asymptotische Betrachtung
Vergleich von Laufzeiten bezieht sich auf das langfristige Verhalten.
Konstanten können daher ignoriert werden.
Bei der asymptotischen Betrachtung interessieren wir uns für den höchsten Term,z.B. O(n4 + 7000n3 + 900n2 + 10000n + 1000000) = O(n4)
40Pro Informatik 2009: Objektorientierte Programmierung
O-Notation
Die Landau-Symbole werden verwendet, um Laufzeiten für Algorithmen anzugeben und vergleichen zu können:
Asymptotische Schranken in O-Notation:
41Pro Informatik 2009: Objektorientierte Programmierung
O-Notation
42Pro Informatik 2009: Objektorientierte Programmierung
Asymptotische Laufzeitklassen
Unsere constFunction liegt also in O(2) = O(1)
Unsere sumFunction liegt in O(n+2) = O(n)
Welche Laufzeiten haben folgende Funktionen?
• Finden des Maximums aus einem Array mit n natürlichen Zahlen
• Finden des Minimums aus einem Array mit n reellen Zahlen
• Multiplikation einer mxn Matrix mit einer nxk Matrix
int constFunction (int[] n) {int i = 2*12+2; // 2 Schritte return i;
}
int sumFunction (int[] n) {int sum = 0; // 1 Schrittfor (int i=0; i
43Pro Informatik 2009: Objektorientierte Programmierung
Asymptotische Laufzeitklassen
Übliche Laufzeiten:
Kannst du diese Laufzeiten der Größe nach sortieren?
44Pro Informatik 2009: Objektorientierte Programmierung
Speicherbedarfanalyse
Genauso wie über die Laufzeit eine asymptotische Analyse geführt werden kann, so geht das auch mit dem Speicherbedarf.
Die Summe eines Zahlenarrays: Laufzeit liegt in O(n), Speicherbedarf in O(n).
Berechnung der n-ten Potenz (naiv): Laufzeit liegt in O(n), Speicherbedarf bei O(1)
int sumFunction (int[] n) {int sum = 0; // 1 Schrittfor (int i=0; i
45Pro Informatik 2009: Objektorientierte Programmierung
PAUSE
46Pro Informatik 2009: Objektorientierte Programmierung
Java Dokumentation
Die wichtigsten Anlaufstellen:
• Java 2 Platform, Standard Edition, v 1.4.2 API Specificationhttp://java.sun.com/j2se/1.4.2/docs/api/
• Java 2 Platform Standard Edition 5.0 API Specificationhttp://java.sun.com/j2se/1.5.0/docs/api/
• Java™ Platform, Standard Edition 6 API Specificationhttp://java.sun.com/javase/6/docs/api/
• Galileo Computing Openbook: Java ist auch eine Insel (8. Auflage) http://openbook.galileocomputing.de/javainsel8/
• B. Eckel: Thinking in Java , Prentice Hall, 2006http://www.codeguru.com/java/tij/
• Java-Tutorial von Sunhttp://java.sun.com/docs/books/tutorial/
Bei Fragen:
• unser Forum: http://www.java-uni.de/forum/
http://java.sun.com/j2se/1.4.2/docs/api/�http://java.sun.com/j2se/1.5.0/docs/api/�http://java.sun.com/javase/6/docs/api/�http://openbook.galileocomputing.de/javainsel8/�http://www.codeguru.com/java/tij/�http://java.sun.com/docs/books/tutorial/�http://www.java-uni.de/forum/�
47Pro Informatik 2009: Objektorientierte Programmierung
Eclipse
Eclipse ist eine integrierte Entwicklungsumgebung (IDE) für Java
www.eclipse.org
http://www.eclipse.org/�
48Pro Informatik 2009: Objektorientierte Programmierung
Eclipse
Roadmap:• Eclipse installieren
• Eclipse starten und kennenlernen
• Einstellungen
• Workspace und Projekte
• Views und Perspektiven
• Klasse erstellen
• Interface erstellen
• In Eclipse Methodendokumentation anschauen
• Auto-Generator
• Refactoring
• Shortcuts
• Jar erstellen
• Debuggen
�Pro Informatik 2009: Objektorientierte Programmierung�Tag 11AgendaAgendaOrganisatorischesBerechenbarkeitProgrammiersprachenProgrammiersprachenProgrammiersprachenRelevante Programmiersprachen�im Studium an der FUFunktionale vs. Imperative ProgrammierungFunktionale vs. Imperative ProgrammierungHaskellHaskellPrologPrologC/C++SkriptsprachenTraditioneller AlgorithmusbegriffTraditioneller AlgorithmusbegriffVom Algorithmus zum ausführbaren ProgrammVom Algorithmus zum ausführbaren ProgrammVom Algorithmus zum ausführbaren ProgrammBerechenbarkeitEntscheidbarkeitTuringmaschineNicht entscheidbare Probleme: HalteproblemNicht entscheidbare Probleme: HalteproblemRegistermaschineLOOP-RegistermaschinePrimitiv Rekursive FunktionenAckermannfunktionWHILE-RegistermaschineGOTO-RegistermaschineLaufzeitanalyseLaufzeitanalyseKonstante LaufzeitLineare LaufzeitAsymptotische BetrachtungO-NotationO-NotationAsymptotische LaufzeitklassenAsymptotische LaufzeitklassenSpeicherbedarfanalysePAUSEJava DokumentationEclipseEclipse
Recommended