164
Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe www . informatik .uni-essen.de http://www.informatik.uni- essen.de/SysMod/lehre/Chemie/

Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe essen.de/SysMod/lehre/Chemie

Embed Size (px)

Citation preview

Page 1: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Folien zum Kurs„Programmierung mit Java“

SS 2004Siehe www.informatik.uni-essen.dehttp://www.informatik.uni-essen.de/SysMod/lehre/Chemie/

Page 2: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Einführung in die Programmierung

1. Der Begriff des Algorithmus2. Sprache und Grammatik3. Entwurf von Programmen4. Programmieren mit JAVA

Variablen und Typen, Operatoren Anweisungen, Wiederholungsanweisungen,

Verzweigungen Beispiele: Auswertung von Formeln, Monte-Carlo-

Simulation, Molekül-Kinetik, Zelluläre Automaten Einführung in die Objektorientierung Programmierung von Java-Applets

Page 3: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

1. Der Begriff des Algorithmus

Definition (Algorithmus als Verarbeitungsvorschrift)

Ein Algorithmus ist eine präzise, vollständige Verarbeitungsvorschrift, die so formuliert ist, dass die in der Vorschrift verwendeten Elementaroperationen von einer Maschine ausgeführt werden können.

Die Elementaroperationen müssen eindeutig definiert sein und die Reihenfolge ihrer Ausführung muss eindeutig festgelegt sein.

Page 4: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Andere Sicht auf den Begriff Algorithmus

Definition (Algorithmus als Funktion)

Ein Algorithmus beschreibt eine

Funktion (oder Abbildung) f: E A,

wobei

E die Menge der zulässigen Eingabedaten und A die Menge der möglichen Ausgabedaten bezeichnet.

Page 5: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (1)

Abstraktion oder Abstrahierung

Durch einen Algorithmus wird kein Einzelproblem, sondern eine Klasse von Problemen gelöst. Das konkrete Einzelproblem wird dann durch Parameter definiert.

Beispiel: "Berechne die Fakultät von n" löst eine Problemklasse; ein konkreter Einzelfall ergibt sich durch Angabe eines konkreten Parameters, z.B. n=4711.

Page 6: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (2)

Finitheit

statische Finitheit (= Endlichkeit der Beschreibung des Algorithmus)

dynamische Finitheit (= Endlichkeit von Datenstrukturen und Zwischenergebnissen)

Page 7: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (3)

Terminierung

Terminierende Algorithmen enden nach endlich vielen Schritten mit einem Ergebnis.

Aber auch nicht-terminierende Algorithmen sind von Bedeutung. Beispiele sind:

Software zur Steuerung von technischen Prozessen Betriebssysteme Kommunikationsprotokolle für Rechnernetze

Page 8: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (4)

Determinismus

Zu jedem Zeitpunkt der Ausführung des Algorithmus besteht maximal eine Fortsetzung, ansonsten heißt der Algorithmus nicht-deterministisch.

Ordnet man den möglichen Fortsetzungen Wahrscheinlichkeiten zu, dann erhält man einen stochastischen Algorithmus.

Page 9: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (5)

Determiniertheit

Bei gleichen Startbedingungen liefert der Algorithmus im Wiederholungsfalle das gleiche Ergebnis.

D.h. es wird nicht notwendigerweise die eindeutige Reihenfolge gefordert.

Beispiel: Die Auswertung von 3+4+5 kann erfolgen durch (3+4)+5 oder durch 3 + (4+5).

Page 10: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (6)

Effizienz

Ressourcenverbrauch eines Algorithmus, v.a. bzgl. Laufzeit oder Anzahl von Rechenschritten, meist abhängig von der Problemgröße.

Man spricht z.B. von linearer Ordnung O(n), quadratischer Ordnung O(n2), oder logarithmischer Ordnung O(log n).

Page 11: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (7)

Portabilität oder Portierbarkeit,

Übertragbarkeit von Programmen zwischen verschiedenen Rechnern und verschiedenen Betriebssystemen.

Portabilität ist im allgemeinen nicht ohne weiteres gegeben (Ausnahme: Java-Programme)

Page 12: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Eigenschaften von Algorithmen (8)

Robustheit und Zuverlässigkeit

Wie gutmütig reagiert ein Programm auf fehlerhafte Eingabedaten?

Wartbarkeit und Änderbarkeit

Wie gut ist ein Algorithmus an veränderte Problemstellungen oder andere Anwendungsumgebungen anzupassen?

Page 13: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiele für Algorithmen

Algorithmus zur Division von zwei Zahlen. (Ein robuster Algorithmus, muß den Fall der Division durch Null berücksichtigen).

Verfahren zur Bestimmung des größten gemeinsamen Teilers (ggT) zweier natürlicher Zahlen.

Verfahren zur Auswertung des geklammerten Ausdrucks (a+b)*c. Hier kann man einen nicht-deterministischen Algorithmus konstruieren, der bei gleichen Eingabewerten a, b und c unterschiedlich abläuft, aber dennoch immer das gleiche Ergebnis liefert. Hinweis: (a+b)*c=a*c+b*c.

Page 14: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiele für Algorithmen (2)

Ein Algorithmus zur Bestimmung der Lösungsmenge der quadratischen Gleichung ax2 +bx+c=0 muss für alle reellwertigen Parameter a,b und c korrekt arbeiten, also auch den Fall von nicht-reellen Lösungen berücksichtigen.

Ein Algorithmus zur Berechnung von π kann nicht dynamisch finit sein, die produzierte Darstellung von π besitzt ja unendlich viele Stellen.

Page 15: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wie beschreibt man Programme präzise und vollständig?

Dazu benötigt man eine (formale) Sprache und eine Grammatik, d.h. es wird ein Formalismus oder Repräsentation benötigt um Programme aufschreiben zu können

2. Sprache und Grammatik

Page 16: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Programmentwicklung durchläuft verschiedene Stadien

Verstehen und Analysieren des Problems Finden und Präzisieren eines Lösungsweges Aufschreiben des Algorithmus in sog. Pseudo-Code, der

aus einer Mischung von natürlichsprachlichen und programmiersprachlichen Anteilen besteht

Übersetzen des in Pseudo-Code notierten Algorithmus in eine Programmiersprache

Das entstandene Programm auf dem Rechner von Syntaxfehlern befreit und auf Funktionsfähigkeit getestet

Einsatz des Rechners zum Bearbeiten des Programms und Finden von Lösungen für konkrete Parameterwerte

Page 17: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Rolle von Programmen auf einem Rechner

Page 18: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Algorithmen werden in unterschiedlicher Form benötigt

Maschinenprogramme (Maschinencode)

Für Menschen verständliche Programme (problemorientiert)

Lesbarkeit,Modifizierbarkeit,…

Page 19: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Sprachen müssen also definiert werden

Syntax

Aufbau von Worten und Sätzen einer Sprache

Semantik

Bedeutung der Sprachelemente (Worte und Sätze) der Sprache

Hier: nur künstliche (mathematische) Sprachen

Page 20: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Notwendige Elemente einer Sprachdefinition

Zunächst: Syntax …

Zeichenvorrat … Alphabet

Regeln, nach denen aus dem Alphabet neue zusammengesetzte Elemente der Sprache gebildet werden können

Page 21: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Grundbegriffe …

Alphabet A (Vorrat von Zeichen)

freies Monoid A* (Menge aller Zeichenfolgen über dem Alphabet A)

Wörter w A* (Elemente aus A*)

Sprache L A* (Eine Teilmenge von A*)

Page 22: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiele für (künstliche) Sprachen

Wörter und Sprachen sind allgemein definiert

$$§§ ist ein Wort über dem Alphabet {$,§}

L={0, 1, 01, 11, 001, 011, 101, 111, ....} {0,1}* ist eine Sprache, welche sogar eine Interpretation hat (Binärzahlen), allerdings ist L hier nicht präzise definiert!

"Die Katze jagt die Maus!" ist ein Wort über dem Alphabet, welches auch die Leerzeichen enthält {Katze, Maus, Die, die, !, ,}. Die Elemente des Alphabets kann man als Atome der Sprache bezeichnen.

Page 23: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Es wird ein Regelwerk zur Wortbildung benötigt

Grammatik G = (T,N, P,S) ist gegeben durch

T Menge von Terminalsymbolen (die "Atome" der Sprache) (in Java z.B.: float, if, else, while, ...)

N Menge von Non-Terminalsymbolen (in Java z.B.: variable, block, assignment, ...)

P Menge von Produktionsregeln (in Java z.B.: Wenn B eine Bedingung ist und S1 und S2 Anweisungen sind, dann ist auch "if (B) S1 else S2" eine Anweisung)

S Menge von Startsymbolen (z.B.: Program)

Page 24: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Formale Sprache & Grammatik

Definition (Formale Sprache)Die Menge aller Wörter, die aus dem Startsymbol S ableitbar sind und nur aus Terminalsymbolen bestehen, heißt die durch die Grammatik G erzeugte formale Sprache L(G).

Beispiel (Wort einer formalen Sprache)Sei G eine Grammatik welche die Programmiersprache XYZ beschreibt, d.h. es gelte L(G)=XYZ. Ein Wort dieser formalen Sprache ist ein syntaktisch korrektes XYZ-Programm.(Für XYZ kann stehen Pascal, Modula-2, C, C++, ..., Java).

Page 25: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel für formale SpracheDie Grammatik G1 = (N1 , T1 , P1 , S1) definiert einen kleinen Auszug der deutschen Sprache.

N1 {Satz, Subjekt, Prädikat, Objekt, Artikel, Substantiv, Leerzeichen}

T1 {”die ”, ”Maus ”, ”Katze ”, ”jagt ”, ”beißt ”, ”.”}

P1 {(Satz ->Subjekt Prädikat Objekt ”.”),(Subjekt -> Artikel Substantiv),(Prädikat -> ”jagt ”), (Prädikat -> ”beißt ”),(Artikel -> ”die ”),(Objekt -> Artikel Substantiv),(Substantiv -> ”Maus ”),(Substantiv -> ”Katze ”)}

S1 Satz.

Page 26: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Ein Beispiel für einen Ableitungsprozess

Satz Subjekt Prädikat Objekt „.“ Artikel Substantiv Prädikat Objekt „.“ „die“ Substantiv Prädikat Objekt „.“ „die“ „Maus“ Prädikat Objekt „.“ „die“ „Maus“ „beißt“ Objekt „.“ „die“ „Maus“ „beißt“ Artikel Substantiv „.“ „die“„Maus“ „beißt“ „die“ Substantiv „.“ „die“„Maus“ „beißt“ „die“ „Katze“„.“

Page 27: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beschreibung des Regelwerks ist komplex

Die Angabe der Mengen N und T in der Regel einfach durch Aufzählung

Die Regelmenge P ist allerdings in den meisten praktischen Fällen etwas umfangreicher (zwar endlich aber groß)

Noch eine Bemerkung:bisher haben wir damit „nur“ die Syntax betrachtet!

Page 28: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Darstellung der Syntax von Sprachen

Syntaxdiagramme und EBNF

… sind Hilfsmittel um die Regelmengen für die Syntax zu beschreiben.

Page 29: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wichtige Regeln für Syntaxdiagramme

Syntaxdiagramme repräsentieren Produktionsregeln. Syntaxdiagramme sind (oft) numeriert. Kreise stehen für Zeichen des Alphabets (wie a,b, ..z,

A,...,Z, +,-,*,/, ? <,>, ...) Ovale stehen für Terminalsymbole (Atome wie float, int, if,

else, ...) Rechtecke stehen für Nicht-Terminalsymbole (block, ...,

literal, variable, ...) Die Durchlaufrichtung eines Diagramms wird durch Pfeile

angegeben Syntaxdiagramme können auch rekursiv verwendet werden

Page 30: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel für Syntaxdiagramme

Page 31: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Übungen (Zur Syntax von Namen)

Beschreiben Sie das oben gezeigte Syntaxdiagramm verbal.

Geben Sie jeweils zwei gültige und zwei ungültige Java-Identifier an.

Geben Sie das (ziemlich triviale) Syntaxdiagramm für Java-Digit an.

Page 32: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Kommentare zur Namensgebung

Es gibt weitere Möglichkeiten zur Namensgebung in Java. So sind nach einem einleitenden Java-Letter auch Sonderzeichen wie *, % und @ erlaubt, sogar der komplette Unicode-Zeichensatz (nicht nur ASCII) ist erlaubt!

Aber man ahnt die Konfliktmöglichkeiten mit Java-Operatoren!

Also man beschränke sich am besten auf die ASCII-Zeichen A-Z und a-z. Positive Beispiele zur (pragmatischen) Namensgebung sind z.B. AnzahlVersuche,AnzahlErfolge, MittelwertDerMessreihe, aktuellerWert, etc.

Page 33: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Backus-Naur-Normal-Form (BNF) und Erweiterte BNF

Zwei ältere Notationen sind genauso mächtig wie die Syntaxdiagramme

BNF , Extended BNF Metasymbole in BNF sind:

::= bedeutet: ist definiert als ... | bedeutet: oder.

Nichtterminalsymbole (entsprechen den Rechtecken in den Syntaxdiagrammen) werden in spitze Klammern gesetzt, also z.B. <Programm>

Page 34: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Regeln für das Bilden beliebig langer Summen

<Summe> ::= <Summand> | <Summand> + <Summe>

<Summand> ::= a | b | c

a + c + b + c

Page 35: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

EBNF und BNF

EBNF und BNF sind gleich mächtig EBNF ist komfortabler -> reichere Metasyntax = ”definiert als” (”::=” in BNF) (...|...) genau eine Alternative aus der Klammer muß stehen [ ... ] Inhalt der Klammer kann stehen oder nicht { ... } Inhalt der Klammer kann n–fach stehen, n ≥ 0 . Ende der Produktion (in BNF nicht speziell markiert). Nichtterminalsymbole sind einfach Symbole Terminalsymbole sind speziell gekennzeichnet,

durch Klammerung mit Anführungszeichen (”...”).

Page 36: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

3. Entwurf von Programmen

3.1 Schrittweise Verfeinerung oder Top-Down-Entwurf

3.2 Bottom-Up-Entwurf

3.3 Greedy-Algorithmen

Page 37: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

3.1 Schrittweise Verfeinerung

Betrachtung dieses Prinzips geht auch ohne Programmiersprache

Prinzip: Betrachte Algorithmus in Pseudosprache Ersetze eine Anweisung in der Pseudosprache durch

einfachere Anweisungen Mache das so lange bis alle Anweisungen sog.

elementare (oder „atomare“) Anweisungen sind, die von der „Maschine“ ausgeführt werden können.

Page 38: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Haushalts - Roboter

Koche eine Kanne Tee --- komplex (1) Gib Teebeutel in Kanne (2) Gib kochendes Wasser in die Kanne (3) Lasse 3 Minuten ziehen (4) Entferne Teebeutel aus der Kanne

Die Anweisungen (1)-(4) müssen weiter verfeinert werden!

Page 39: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Betrachte Anweisung (2)

"Gib kochendes Wasser in die Kanne" (2.1) Fülle Topf mit Wasser (2.2) Stelle Topf auf Herdplatte (2.3) Warte bis Wasser kocht (2.4) Gieße das Wasser vom Topf in die Kanne

Page 40: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Betrachte Anweisung (2.3)

"Warte bis Wasser kocht" (2.3.1) Schalte Herdplatte ein (2.3.2) Wiederhole "Messe die Wassertemperatur"

solange bis "Wassertemperatur nahe bei 100 C" (2.3.3) Schalte die Herdplatte aus

Page 41: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Bemerkungen zu Top-Down Ansatz

Beachte: manche Anweisungen oben müssen noch weiter präzisiert werden

Das Verfahren wird solange fortgesetzt, bis man auf „elementare“ Anweisungen kommt, die die Maschine (Haushaltsrobot oder Rechner/Java) direkt ausführen kann

Übung: Tic Tac Toe

Page 42: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Tic Tac Toe

Machen Sie einen Entwurf für ein Programm zum Spielen von Tic-Tac-Toe.

Zwei Spieler setzen abwechselnd einen Kreis (O) bzw. ein Kreuz (X) in ein 3x3-Spielfeld. Der Spieler, welcher zuerst 3 Kreise bzw. 3 Kreuze in einer Reihe, Linie oder Diagonale hat, hat gewonnen.

Das Programm soll abwechselnd Kreise und Kreuze entgegen nehmen, die Korrektheit der Eingabe prüfen, nach jedem Zug die Spielposition ausgeben, etc.

Schreiben Sie Ihren Entwurf in Pseudo-Code auf.

Page 43: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

3.2 Bottom-Up-Entwurf

Entgegengesetzt zu TopDown

Zunächst abgeschlossene Teilaufgaben lösen und implementieren

Lösungsalgorithmen für Teilaufgaben können dann in Form von Prozeduren oder Modulen vorliegen, aus denen größere Lösungsalgorithmen zusammengesetzt werden können.

Page 44: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Anwendungen des Bottom-Up Prinzips

Z. B. Numerik Vektorrechnung Matrizen Numerische Integration …

In der Regel wird man eine Kombination von TopDown und BottomUp verwenden

Page 45: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Java Programmierung

Variablen und Typen, Operatoren Anweisungen, Wiederholungsanweisungen,

Verzweigungen Beispiele:

Auswertung von Formeln Monte-Carlo-Simulation Molekül-Kinetik Zelluläre Automaten

Einführung in die Objektorientierung Programmierung von Java-Applets

Page 46: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Java Programmierung: Hello World

//HelloWorld

class HelloWorld{ public static void main (String args[ ]) { System.out.println("Hello" + "World!!"); }}

Page 47: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Aufbau von Java - Programmen

Klassen Klassen bestehen aus Variablen- und Methoden-

Vereinbarungen Methoden bestehen aus

Kopf Rumpf -> enthält Algorithmus

Startpunkt eines Programms: die spezielle Methode main

Page 48: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Variablen

Variablen haben Namen (frei wählbar) z. B. i Typ (ist fest kann in Java nicht geändert werden) Wert (kann durch Zuweisung geändert werden)

D. h. Variablen sind wie Behälter, die einen Wert aus einem bestimmten Wertevorrat (durch den Typ festgelegt) aufnehmen können

Page 49: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Deklaration von Variablen

Variablen existieren nicht automatisch, sie müssen deklariert werden:

int Ordnungszahl; boolean IstMetall;

float pi;String Name;int i,j,k;

Page 50: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Deklaration von Variablen (2)

mit gleichzeitiger Initialisierung:

int i = 123;float r = 5.5;boolean sunny = true;

123

5.5

true

i:

sunny:

r:

Page 51: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Datentypen

Datentypen (=Typen, Wertebereiche, Operationen) Es gibt drei Arten von Typen: sog "primitive" Datentypen

byte, short, int, long (von 8, 16, 32 bzw. 64 bit Länge) float, double (mit 32 bzw. 64 bit Länge) char (16 Bit, wegen Unicode) boolean (true, false)

Klassen (später) Arrays oder Felder (später)

Page 52: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wertzuweisung (assignment)• // Mit sofortiger Initialisierung• double SpeedOfLight = 2.99792458E8,• Pi = 3.141592,• PlanckConstant = 6.26176E-34,• BoltzmannConstant = 1.38066E-23;• // … oder erst deklarieren• float Frequency, Temperature;• char EinZeichen;• boolean Hit;• // ... und spaeter initialisieren• Frequency = 5.1E12;• Temperature = 273.0;• EinZeichen = 'X‘;• Hit = false;

Page 53: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Konstante in Java (siehe Pascal)

Es gibt keine echten Konstanten. Diese werden durch den Zusatz final nachgebildet:

Beispiele:final float Pi = 3.141592;final double PlanckConstant = 6.26176E-34;

Das Java-System sorgt dafür, dass final -Variablen nicht modifiziert werden können

Page 54: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Die Klasse String (Zeichenkette)

Hier nur drei Beispiele für String-Variable (ausführlicher später).

String S0 = " Das Ergebnis lautet: ",S1 = "Hello",S2 = "Es geht auch \n Zeilenumbruch!",S3 = "... oder \t Tabulator!" ;

Übung: \n und \t sind sog. Character Escape Codes, die einen Zeilenumbruch bzw. Tabulatorvorschub durchführen!

Page 55: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Literale repräsentieren Werte primitiver Typen

Hier eine kleine Auswahl:13, -47, 10000000, 13L, 007, 011, 0XA, 0XB,5.677777, 5.677777F, -2.5, 10.1E45, .36E-2,true, false, 'a', 'b', '7', '#', "Hello", "7",

Zu welchen Datentypen gehören die o.g. Literale? Geben Sie ein paar plausible, aber nicht zulässige Literale

an!

Page 56: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Ausdrücke und Operatoren

Die grundlegenden arithmetischen Operatoren sind

+, -, *, /, und %.

Das %-Zeichen stellt die Modulo-Funktion dar. Es gibt eine Reihe weiterer Operatoren …

Page 57: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Arithmetische Operatorenclass ArithmeticOperators{ public static void main (String args[ ]) {System.out.println("Dealing with operators!!"); int e,m,c; m = 47; c = 11;// Wertzuweisung an m und c e = m*c*c; // Arithmetische Operation System.out.println("e = m*c*c = " + e); System.out.println("e = m*c*c = " + m*c*c); System.out.println("e = m+c = " + (m+c) ); System.out.println("e = m-c = " + (m-c) ); System.out.println("e = m/c = " + (m/c) ); System.out.println("e = m%c = " + (m%c) ); }}

Page 58: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Zuweisungsoperatoren

Wegen der Verwandtschaft von Java mit C und C++ gibt es (neben dem einfachen Zuweisungsoperator =) auch folgende, weitere Zuweisungsoperatoren.

Operator Wirkungx += y x = x + y

x -= y x = x - y

x *= y x = x * y

x /= y x = x / y

Page 59: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Inkrementieren & Dekrementieren

Die Operatoren ++ und -- dienen zum inkrementieren (+1) und dekrementieren (-1).

Problematisch ist, daß ++ und -- beide als postfix- und als präfix-Operatoren verwendet werden können, d.h

y=x++; postfix-Operator: Erst Zuweisung von x an y, dann Inkrementierung von x

y=++x; präfix-Operator: Erst Inkrementierung von x, dann Zuweisung von x an y,

Operator Wirkung

x++; x=x+1;x--; x=x-1;

Page 60: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Vergleichsoperatoren

Die Vergleichsoperatoren sind gegeben durch:==, !=, <,>, >=, <=,

beachtenswert ist der Gleichheitsoperator ==

Beispiele zur Anwendung von Vergleichsoperatoren:

a == 0b == b // ist immer truec<3E9epsilon < e-9

Page 61: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Logische Operatoren

Name Java-Notation Beispiel

Konjunktion AND & bzw. && A & B

Disjunktion OR | bzw. || A || B

Exklusives-Oder XOR

^ A ^ B

Negation NOT ! !A

Page 62: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Präzedenz von Operatoren

... ist natürlich geregelt, z.B. "Punkt- geht vor Strich-Rechnung".

Im Zweifelsfalle bitte Klammern setzen, auch im Hinblick auf die Lesbarkeit.

Page 63: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wiederholungsanweisungen

Wiederholungsanweisungen oder Schleifen dienen dem mehrfachen Durchlaufen bestimmter Programmteile.

Dabei wird meist ein Zähler (oder auch mehrere Zähler ) aufwärts (oder auch abwärts) gezählt.

Page 64: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

for-Schleifen (Zählschleifen)

Sog. for-Schleifen bestehen aus den drei Teilen

1. Initialisierung der Schleife (Startwert festlegen, z.B. i=0)2. Test der Zählvariablen (z.B. i<10)3. Inkrementieren der Zählvariablen

(z.B. durch i++ oder i=i+1)

for (i = 0; i<10; i++) { ...<Schleifenrumpf ... }

Page 65: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel for-Schleife

Als sog. Pseudo-Code:

Beginne mit i=0Für i tue , (falls i < 10) folgendes

Drucke den Wert von i… und erhöhe den Wert von i um 1.

Als Java-Code:

for (i=0; i<10; i++)System.out.println("Loop: " + i);

Page 66: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Summation von Werten

Endliche bzw. abbrechende Reihen können einfach mit for-Schleifen berechnet werden, wenn die Zahl der Summanden bekannt ist und die Form der Summanden eine Funktion des Index ist, wie z.B. bei der geometrischen Reihe.

1+2+3+4+ ... + 9.int summe = 0;for (i=1; i<10; i++)

summe = summe + i;

Page 67: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Geschachtelte (for-) Schleifen

for (…) { s1;

for (…) { s2;…} }

Wie häufig werden die jeweiligen Anweisungen durchlaufen?

Beispiel:Schreiben Sie eine 3-fache for-Schleife, welche alle Sekunden eines Tages im Format hh:mm:ss angibt, also von 00:00:00, 00:00:01, ...., über 11:55:59, .. bis 23:59:59.

Page 68: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Schleifenabbruch durch Bedingungen

while , do - Schleifenwhile (condition){<Schleifenrumpf>}

Beispiel zur while-Schleifeint i = 1;while (i <5){System.out.println ("Nr: " + i); i++;

}

Page 69: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Übungen & Fragen

Ersetze die Anweisung i++ durch eine gleichwertige Anweisung!

Was passiert, wenn i++ durch i-- ersetzt wird?

Schreibe das Beispiel mit einer for-Schleife statt einer while-Schleife.

Page 70: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

do-Schleife

do{

<Schleifenrumpf>}while (condition)

Page 71: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel do-Schleife

/* Simple do loop */class DoTest {

public static void main (String args[]) {int x = 1;do

{System.out.println ("Looping, round " + x);x++;} while (x <= 10);

}}

Page 72: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wichtige Aspekte von Schleifen

Die while- und die do-Schleife sind die allgemeinere Form im Vergleich zur for-Schleife

Grundsätzlich kann es passieren, dass Schleifen während des Ablaufs nicht terminieren:(1) while (true) { … }(2) for (i=0; i>=0; i++) { … }

Die Formulierung von Schleifen sollte daher mit Sorgfalt geplant werden

Page 73: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Verzweigungsanweisungen

Man kann den Programmablauf aber abhängig davon machen, ob bestimmte Bedingungen (Boolesche Ausdrücke) erfüllt sind.

Bedingungen sind logische (=Boolesche) Ausdrücke, deren Auswertung entweder true oder false ergibt.

Beispiele für typische Bedingungen sindm > 0 (* hängt ab vom Wert von m *)n=m (* hängt ab von Wert von n und m *)2<3 (* ist immer true *)

Page 74: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Allgemeinste Form: if-Anweisung

Die Syntax der if-Anweisung istif (condition)

{ <Anweisungsfolge1>} else { <Anweisungsfolge2> }

Der else-Teil kann auch entfallen, dann spricht man von bedingter Anweisung.

Beispiel (Bedingte Anweisung)if (a>b) System.out.println("a ist groesser als b!");

Page 75: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel (AlternativAnweisungen)

if (a>b) System.out.println("a ist groesser als b!"); else System.out.println ("a ist nicht groesser als b!“);

Übungen und Fragen: Was bedeutet "condition"? Geben Sie Beispiele für "conditions"

an Konstruieren Sie ein Beispiel! Kann in den Anweisungsfolgen wiederum eine if-Anweisung

stehen?

Page 76: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Switch-Anweisung

Das switch-Konstrukt erlaubt die Auswahl zwischen mehreren (evtl. sehr vielen) Alternativen.

//Switch-Exampleimport java.lang.System;class SwitchExample{public static void main (String args[ ]){System.out.println("Switch-example");System.out.println("--------------");

Page 77: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Switch (Fortsetzung)

double x = 7.0, y = 3.0; char operator; operator = '-'; switch (operator) { case '+': System.out.println("x + y = " + (x+y)); break; case '-' : System.out.println("x - y = " + (x-y)); break; case '*' : System.out.println("x * y = " + (x*y)); break; case '/' : System.out.println("x / y = " + (x/y)); break; } }}

Page 78: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Bemerkungen zur switch-Anweisung

Die Auswahl erfolgt aus einer zu int kompatiblen Wertemengeswitch ( int-ausdruck) { … }

Die einzelnen switch - Arme laufen „ineinander“ wenn sie nicht explizit mit break; abgebrochen werden

Es gibt noch die Möglichkeit auch einen sogenannten default - Arm zu definieren

Page 79: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Weitere Beispiele (1)

//temperaturclass dh_temperatur_for{ public static void main (String args[ ]) { System.out.println("Umrechnung für verschiedene Temperaturskalen"); int kelvin, celsius, fahrenheit; for (kelvin=250;kelvin<=320; kelvin++) { celsius = kelvin-273; fahrenheit = celsius*9/5 + 32 ; System.out.println("Kelvin : "+kelvin+" Celsius :"+celsius+ " °"+ " Fahrenheit : "+fahrenheit+" °"); } }}

Achtung!

Page 80: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Weitere Beispiele (2)// Bestimmung von Pi mit Monte Carlo Simulationclass piberechnung{ public static void main (String args []){ int i; int treffer=0; double x,y; double pi; for (i=1; i<=5000; i++) { x=Math.random(); y=Math.random(); if ((x*x+y*y)<=1) treffer++; pi=(4*treffer/(double)i); System.out.println("Pi(n="+i+")="+pi); } }}

Beachte denType-Cast (= Typanpassung)

durch (double)i

Page 81: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Weitere Beispiele (3)

public class Mittelwert {

public static void main(String args[]) { int Anzahl; float Summe, Mittel;System.out.println( "Mittelwert einer Folge von float-Werten" );

Anzahl = 4;Summe = 10.0f;Mittel = Summe / Anzahl;

System.out.println("Der Mittelwert beträgt " + Mittel);

}}

Page 82: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Weitere Beispiele (4)

Nun wirklich eine Folge von Werten Folge repräsentiert durch eine Datei Ein/Ausgabe ist in Java etwas aufwändiger, da viele

Spezialitäten sichtbar werden, die sonst versteckt werden

Page 83: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Mittelwertbestimmung (1): Start des Programms

public class Mittelwert {

public static void main(String args[]) {System.out.println( "Mittelwert einer Folge von float - Werten" );System.out.println("Bitte den Dateinamen eingeben, “+

"der die Werte enthaelt");boolean weiter = true;String line;String DateiName = StringEingabe();float f;float Summe=0.0f, Mittel=0.0f;int Anzahl=0;

Page 84: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Mittelwertbestimmung (2): Eingabe

static String StringEingabe () { String s = ""; try {java.io.BufferedReader d = new java.io.BufferedReader( new java.io.InputStreamReader(System.in)); s = d.readLine(); } catch (java.io.IOException e) {} return s.trim(); }

KomplexesObjekt zur Darstellung

von Eingabedateien

Standard-Eingabe

Leerzeichenentfernen

Page 85: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beginn des try-catch Blocks zum Abfangen

von E/A-Fehlern

Mittelwertbestimmung (3):Datei eröffnen

java.io.BufferedReader DieDatei; try {DieDatei = new java.io.BufferedReader(

new java.io.InputStreamReader(new java.io.FileInputStream(DateiName)));

Objekt zurDarstellung derDatei, die Werte

enthält

Page 86: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Mittelwertbestimmung (4): Verarbeitung der Werte

while (weiter) { try { line = DieDatei.readLine(); if (line != null) { try { f= Float.valueOf(line).floatValue(); Summe = Summe +f; Anzahl ++; } catch (NumberFormatException e) {System.out.println ("String Conversion to float failed" + e);} } else weiter = false; // EOF occurred } catch (java.io.IOException e) {System.out.println (e); weiter = false;} }

Zeile einlesen

String -> Float

Page 87: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Mittelwertbestimmung (5): Abschluss: Datei schließen Mittelwert ausgeben try {DieDatei.close();} catch (java.io.IOException e) {System.out.println ("Error in closing file:"+DateiName+":" + e);} if (Anzahl > 0) { Mittel = Summe / Anzahl; System.out.println

("Der Mittelwert der " + Anzahl + " Werte beträgt " + Mittel ); } else System.out.println("Zu wenig Werte!");

Page 88: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Arrays bzw. Felder

Prinzip eines linearen Arrays

Page 89: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Prinzip von Arrays

Das zugrundeliegende Modell ist das homogene Cartesische Produkt.

Alle Komponenten eines Arrays sind alle vom gleichen Grundtyp (Basistyp oder Komponententyp)

Auf die Komponenten kann über Indizes (= Nummern) zugegriffen werden.

Page 90: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wichtige Aspekte von Arrays Die einzelnen Elemente werden von 0 bis n-1

durchnummeriert (-> Indexbereich) Die einzelnen Elemente sind über einen sogenannten

Index zugreifbar, der aus dem Indexbereich sein muss. In Java werden Array-Objekte zuerst deklariert, danach

generiert! Das Generieren geschieht mit new! Deklarieren und Generieren kann auch in einer einzigen

Anweisung formuliert werden Beide Phasen sollten unterschieden werden! In der Regel haben Arrays eine feste Größe, nachdem

sie generiert wurden.

Page 91: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Erstes Array - Beispielclass ArrayExample1{

public static void main (String args[ ]){

System.out.println("Array-Example"); System.out.println("--------------"); int[ ] Feld; // Deklaration einer Array-

// Variablen Feld = new int[10]; // Erzeugung eines Array-

// Objekts !! // mit subscripts

// 0,1,2, ..., 9 Feld [0] = 17; // Zugriff auf Array-Elemente Feld [1] = -5; System.out.println("Feld [0] :" + Feld [0]); System.out.println("Feld [1] :" + Feld [1]);

}}

Page 92: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Weitere Eigenschaften von Arrays

Arrays lassen sich besonders gut durch for-Schleifen bearbeiten. Die Zählvariable durchläuft einfach den Index-Bereich des Arrays!

Ein Array kann nicht erweitert oder verkleinert werden (stattdessen umkopieren! s.u.)

Die Anzahl der Elemente in einem Array kann über das Attribut length abgefragt werden.

Page 93: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel (Umkopieren von Werten mit Hilfe einer for-schleife)int i;int[ ] Quelle, Ziel; // Namen für 2 int-ArraysQuelle = new int[20];// Array der Laenge 20Ziel = new int[Quelle.length + 10]; // Array der Laenge 30..for (i=0; i<Quelle.length;i++){ Ziel[i] = Quelle[i]; System.out.println(i + „: „+ Quelle[i]);}

Page 94: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Mehrdimensionale Arrays Tabellen float[ ][ ] mat ; // Deklarationmat = new float [4][4]; // Erzeugen der Matrix...// Zeilenweises Ausdrucken der Matrix matfor (int y = 0; y < 4; y++)// y ist nur innerhalb des for-Schleifenrumpfs verfügbar { for (int x = 0; x < 4; x++) // für x gilt dies auch { System.out.print(mat[y][x] + „ ”); }; System.out.println();};

Page 95: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Deklaration mit Initialisierung

Initialisierung einer Array-Variablen: in geschweifte Klammern eingeschlossene Initialisierungswerte

Beispiel (ein-dimensionales Arrays)String[ ] Element = { "Dummy", "Hydrogen", "Helium", "Lithium"};// ist äquivalent zuString[ ] Element = new String[4];Element[0] = "Dummy" ;Element[1] = "Hydrogen" ;Element[2] = "Helium";Element[3] = "Lithim" ;

Page 96: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Initialisierung im mehrdimensionalen Fall

Beispiel (zwei-dimensionales Array)

// 4x4-Einheits-Matrixdouble[ ][ ] identity = // die 4 x 4 //Einheits - Matrix{ {1.0 , 0.0 , 0.0 , 0.0 } , {0.0 , 1.0 , 0.0 , 0.0 } , {0.0 , 0.0 , 1.0 , 0.0 } , {0.0 , 0.0 , 0.0 , 1.0 } ,};

Page 97: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Programmierung von Modellen aus Chemie und Physik

Formelauswertung Monte-Carlo-Techniken Molekül-Kinetik Game of Life

Page 98: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Mittlere freie Weglänge von Gasmolekülen (1)

Formel zur Berechnung:

mitN

l22

1

TRpNN A

Page 99: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Mittlere freie Weglänge von Gasmolekülen (2)

import java.lang.System;class weglaenge {

public static void main (String args [ ]) {

int i=0;double L; // mittlere freie Weglaenge [m]

double sigma=3.64E-10; // Molekueldurchmesser [m] double p=1013.25; // Druck [mbar] double T=298.15; // Temperatur [K]

double U; // mittlere Geschwindigkeit [m*s^-1] double M=4.0; // Molmasse [g*mol^-1] double Na=6.022E23; // Avogadrokonst. [mol^-1] double R=8.314; // Gaskonst. [J*(mol*K)^-1] double

pi=3.1415; // Pi

Page 100: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Mittlere freie Weglänge von Gasmolekülen (3)

U=Math.sqrt(3*R*T/M);L=1/(Math.sqrt(2)*pi*sigma*sigma*Na*p/(R*T));System.out.println("");System.out.println("Angabe von U in [m*s^-1]");System.out.println("Angabe von L in [m]");

System.out.println("Standardtemperatur T="+T+"K");System.out.println("Standarddruck p="+p+"mbar");System.out.println("U="+U+" L="+L);System.out.println("");for (T=273.15; T<=373.15; T+=10) { System.out.print("T="+T+" "); U=Math.sqrt(3*R*T/M); System.out.println("U="+U+" ");

Page 101: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beispiel: Mittlere freie Weglänge von Gasmolekülen (4)

for (p=900.0; p<1100; p+=10){L=1/(Math.sqrt(2)*pi*sigma*sigma*Na*p/(R*T));i++;if ((i%5)>0) System.out.print("p="+p+" L="+L+" : ");if ((i%5)==0) System.out.println("p="+p+" L="+L+" ");

} System.out.println(""); }

}}

Page 102: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Berechnung von mit Monte-Carlo-Techniken (1)

Bestimmung der Zahl kann durch „Werfen“ von zufälligen Punkten (x,y) in den Einheitskreis durchgeführt werden

Wir betrachten ein Quadrat mit Seitenlänge 1 im I. Quadranten mit dem einbeschriebenen Viertelkreis mit Radius 1 (Fläche

Sei die Zahl der Treffer T und die Gesamtzahl der Würfe N, so ist T/N

Mit wachsender Zahl der Würfe sollte das Ergebnis genauer werden

Page 103: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Berechnung von mit Monte-Carlo-Techniken (2)

Page 104: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Berechnung von mit Monte-Carlo-Techniken (3)

import java.lang.System;class piberechnung

{public static void main (String args [ ]) {int i;int treffer=0;double x,y;double pi; for (i=1; i<50001; i++)

{ x=Math.random(); y=Math.random(); if ((x*x+y*y)<=1) treffer++;

pi=(4*treffer/(double)i); System.out.println("Pi(n="+i+")="+pi); }

} }

Page 105: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Molekül-Kinetik und Monte-Carlo-Simulation (1)

Wir betrachten hier nur ein einziges Molekül in der x/y-Ebene, d.h. der Ort des Moleküls werde nur durch ein Koordinatenpaar (x, y) beschrieben

Die mittlere freie Weglänge sei L. Bei einer Kollision wird das Molekül mit dem Winkel (phi) abgelenkt und fliegt die Strecke (rho) m weit bis zur nächsten Kollision

Page 106: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Molekül-Kinetik und Monte-Carlo-Simulation (2)

Der neue Ort ergibt sich durch (x0+dx, y0+dy) wobei wir dx und dy durch eine Transformation der Polarkoordinaten und in das Cartesische Koordinatensystem erhalten:

dx = cos dy = sin

Nach N Kollision befindet sich das Molekül am Ort (xN, yN).Die sog. Diskolation ergibt sich durch

)( NNNN yyxxd

Page 107: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Molekül-Kinetik und Monte-Carlo-Simulation (3)

//Monte-Carlo-Simulation-Molekülausbreitung import java.lang.System;class Dislocation {public static void main (String args[ ])

{System.out.println("Gas molecule located at (x=0,y=0)");int i, number = 0;

double x=0.0, y=0.0, /* Aktuelle Koordinaten */dx=0.0, dy=0.0, /* aktuelle Verschiebung */phi=0.0, rho=0.0, /* Phi Winkel, Rho Länge */L=0.0, /* L mittlere freie Pfadlänge */disloc=0.0; /* dislocation */

L = 5.0E-10; // Halbwegs plausibler WertSystem.out.println("mean free path length: " + L);

number = 100;System.out.println("Number of steps " + number);

System.out.println("Simulation starts now!");

Page 108: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Molekül-Kinetik und Monte-Carlo-Simulation (4)

for (i=0; i<number; i++){phi = 360.0*Math.random(); // Winkelrho = L*Math.random()*2.0; // Zufallswert aus [0, 2*L]dx = rho*Math.cos(phi); // Transformation von dy = rho*Math.sin(phi); // Polar-> Cartesischen Koord.

x = x + dx;y = y + dy;}

disloc = Math.sqrt(x*x+y*y); // Berechnung der Dislokation d System.out.println("dislocation after " + number + "steps: " + disloc); }}

Page 109: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Game of Life und Zelluläre Automaten Das Game of Life wird auf einer Fläche durchgeführt, die in

rechteckige Zellen aufgeteilt ist Im Originalmodell wird die Fläche als unbegrenzt

betrachtet. Aber um die Generierung von Mustern auf dem Bildschirm zu verfolgen, werden wir die begrenzte Bildschirmfläche betrachten, unter der Annahme, daß der linke Rand mit dem rechten verbunden ist und ebenso die obere Bildschirmzeile mit der unteren. Diese Abwandlung spielt das “Game of Life” auf der Oberfläche eines Torus

Zu Beginn nimmt man eine Anfangspopulation an. Die belegten Felder werden mit einem Stern auf dem Monitor gekennzeichnet, die leeren Zellen ergeben eine leere Fläche. Von der ursprünglichen Population ausgehend wird die folgende Generation unter Anwendung folgender Regeln berechnet:

Page 110: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Game of Life und Zelluläre Automaten

Belegte Zellen werden nur überleben, wenn sie zwei oder drei belegte Nachbarzellen haben. Nachbarzellen sind Zellen mit einer gemeinsamen Linie oder mit einer gemeinsamen Ecke

Belegte Zellen sterben und werden zu leeren Zellen, wenn es mehr als drei Nachbarn gibt (überfüllt) oder wenn es nur einen oder überhaupt keinen Nachbarn gibt (Isolationstod)

Eine Geburt findet in einer leeren Zelle statt, wenn diese Zelle genau drei belegte Nachbarzellen hat

Page 111: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Game of Life und Zelluläre Automaten

Tod (T), Geburt (G) und Überleben (Ü) von Zellen

Page 112: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Aufgabe: Ferromagnetismus

Schreiben Sie ein Programm zur Simulation des zweidimensionalen Ising-Modells für Ferromagnetismus

Jede Zelle kann in einem von zwei Spin-Zuständen sein

In diesem Modell werden nur vier Nachbarn in Betracht gezogen (West, Nord, Ost und Süd)

Wenn eine Zelle zwei Nachbarn mit Aufwärtsspin und zwei mit Abwärtsspin hat, dann kann die Zelle in der nächsten Generation mit derselben Wahrscheinlichkeit einen der beiden Spins haben

Page 113: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Aufgabe: Ferromagnetismus

Wenn es mehr Nachbarn mit einer Art von Spin gibt, geht man bei dieser Zelle von einer höheren Wahrscheinlichkeit aus, daß sie diesen Spin belegen wird

Darüber hinaus sind diese Wahrscheinlichkeiten temperaturabhängig

Page 114: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Aufgabe: Ferromagnetismus

Man könnte z.B. annehmen, daß drei Nachbarn mit identischem Spin mit der Wahrscheinlichkeit p = 0.5+0.25/(1+a*T) zu einer Belegung mit demselben Spin führen

Wenn es vier identische Nachbarn gibt, kann diese Wahrscheinlichkeit 0.5+0.5/(1+a*T) sein. Die Konstante a ist charakteristisch für das Material (Stichwort: Curie-Temperatur).

Page 115: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Aufgabe: Legierungen

Gegeben ist eine n x n - Matrix, die mit As und Bs gefüllt ist. Dies sollte in einem Zufallsprozeß geschehen, in dem die Wahrscheinlichkeit der Füllung eines bestimmten Matrixelements mit A durch pa gegeben ist

Um die Matrix vollständig zu füllen, muß die Wahrscheinlichkeit für B pB = 1 - pA sein. Dies kann als ein sehr einfaches Modell für eine Legierung betrachtet werden

Was ist die Mindestwahrscheinlichkeit pA , um Strukturen in der Matrix zu erhalten, wo alle (oder fast alle) As verbunden sind?

Page 116: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Das Programm zur linearen Regression

Zunächst der Kern

Dann alles drum herum : Eingabe, Darstellung,…

Ausgangspunkt: Tabelle (zwei-dimensionales Array) für die

Speicherung der Werte Methoden zur Berechnung der Mittelwerte …

Page 117: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Das Array zur Speicherung der Werte

double [] [] theArray = new double [10] [2];

theArray [i] [0]; theArray [i] [1];X-Werte Y-Werte

Page 118: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Zu berechnende Formeln …

double sumx = 0.0d;double sumy = 0.0d; for (int i = 0; i<theArray.length;i++) {sumx = sumx + theArray[i][0]; sumy = sumy + theArray[i][1]; } meanx = sumx/theArray.length; meany = sumy/theArray.length;

Page 119: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Ziel: die Geradengleichung

Mittelwert der y-WerteMittelwert der x-Werte

Empirischer Regressionskoeffizient

Page 120: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Nun rückwärts …

empirische Kovarianz

Page 121: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Empirische Kovarianz …

double sum=0.0d; for (int i = 0; i<theArray.length;i++) {sum = sum + (theArray[i][0]-meanx) * (theArray[i][1]-meany); }covariance = sum/(theArray.length-1);

Page 122: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Die Quadrate der Differenzen

double sumxdiffs=0.0d, sumydiffs=0.0d; for (int i = 0 ; i<theArray.length;i++) { sumxdiffs = sumxdiffs + (theArray[i][0]-meanx) *(theArray[i][0]-meanx); sumydiffs = sumydiffs + (theArray[i][1]-meany) *(theArray[i][1]-meany); } sdiff2x = sumxdiffs/(theArray.length - 1); sdiff2y = sumydiffs/(theArray.length - 1);

Page 123: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Nun muss alles zusammengefügt werden

Die Mittelwerte berechnen Der Mittelwert der Quadrate der Abweichungen Die empirische Kovarianz Die Regressionskoeffizienten

-> Abstraktionen schaffen -> Methoden

Page 124: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Abstraktion: Berechne alles

void computeCoeffiecients() { computeMeans(); computeSquareDiffs(); computeCovariance(); regressioncoeff_x = covariance/sdiff2x; regressioncoeff_y = covariance/sdiff2y; }

Page 125: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

… stützt sich auf einfachere Abstraktionen

void computeMeans() { double sumx = 0.0d; double sumy = 0.0d; for (int i = 0; i<theArray.length;i++) {sumx = sumx + theArray[i][0]; sumy = sumy + theArray[i][1]; } meanx = sumx / theArray.length; meany = sumy / theArray.length; }

Page 126: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Punkte zur Beachtung

Einige Variablen sind lokal

Die anderen sind für die Methode global, d.h. sie müssen an anderer Stelle deklariert sein

Page 127: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Fortsetzung (1) …

void computeSquareDiffs() { double sumxdiffs=0.0d, sumydiffs=0.0d; for (int i = 0 ; i<theArray.length;i++) { sumxdiffs = sumxdiffs + (theArray[i][0]-meanx) *(theArray[i][0]-meanx); sumydiffs = sumydiffs + (theArray[i][1]-meany) *(theArray[i][1]-meany); } sdiff2x = sumxdiffs/(theArray.length - 1); sdiff2y = sumydiffs/(theArray.length - 1); }

Page 128: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Fortsetzung (2)

void computeCovariance() { double sum=0.0d; for (int i = 0; i<theArray.length;i++) {sum = sum + (theArray[i][0]-meanx) *(theArray[i][1]-meany); } covariance = sum/(theArray.length-1); }

Page 129: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Noch ist nicht alles zusammen gefügt

Wo sind die bisher nicht deklarierten Variablen aufgeführt?

Es werden alle Eigenschaften zu einer Klasse zusammengefasst

Wie kommen die Daten zu der Berechnung? Die Daten werden bei der Initialisierung übergeben

(siehe new)

Page 130: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Die Idee der Objektorientierung

Zusammenfassung der Daten und der diese Daten manipulierenden Methoden in einer Einheit

Klassendefinition enthält Variablendeklarationen und Methodenvereinbarungen

Von einer Klasse können Instanzen gebildet werden Mit anderen Worten: Eine Klasse ist ein Bauplan für

Instanzen Instanzen heißen Objekte

Page 131: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Im Beispiel lineare Regressionclass Table{ double [ ] [ ] theArray; double meanx, meany; double sdiff2x,sdiff2y; double covariance, regressioncoeff_x, regressioncoeff_y; void computeMeans() { … } void computeSquareDiffs() {…} void computeCovariance() {…} void computeCoeffiecients() { computeMeans(); computeSquareDiffs(); … }}

Page 132: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Nun müssen noch die Daten her …

Ein neues Objekt der Klasse Table wird mit Hilfe von new hergestellt

Table Messwerte = new Table();

Eine Möglichkeit: Zuweisung an die Variable theArray … z.B.:

Messwerte.theArray = new double …Messwerte.computeCoeffiecients();

… ist unschön

Page 133: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Besser: Werte bei Objekterzeugung übergeben

Formulierung eines speziellen sogenannten Konstruktor, der für die richtige Initialisierung und Werteübergabe sorgt

Table (double [] xs, double [] ys) {theArray = new double [xs.length][2]; for (int i=0;i< theArray.length; i++) {theArray[i][0] = xs[i]; theArray[i][1] = ys[i]; } }

Page 134: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Konstruktor …

Ist keine Methode Daher eigene Syntax (kein Rückgabewert) Vordefinierte Konstruktoren sorgen für Speicherplatz und

Standardinitialisierung Benutzerdefinierte Konstruktoren werden anschließend

ausgeführt Im obigen Beispiel werden die als Parameter übergebenen

Arrays in die Variable theArray kopiert Vorteil?

Page 135: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Das gesamte Programm

public class LineareRegression {public static void main(String args[]) {

System.out.println( “…" );double [] xs = {1d, 2d, 3d},

ys = {1d,1.5d,3d};Table T = new Table(xs,ys); T.computeCoeffiecients();System.out.println(T.meanx + " "

+ T.meany + " " + T);

}}

Page 136: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Beachte

T.meany -> Zugriff auf die Variable meany des Objektes auf das T verweist

System.out.println( … T); funktioniert, da in der Klasse Table eine Methode toString() definiert wurde!

public String toString(){ return "Coefficients:“ +regressioncoeff_x + " , " + regressioncoeff_y;}

Page 137: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Zusammenfassend

Programm ist in mancher Hinsicht noch nicht ausgereift: Nicht sehr fehlertolerant (z.B. nur ein Wertepaar) Es muss immer ein neues Objekt erzeugt werden,

wenn ein Wertepaar hinzugefügt wird …

Page 138: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Verwendung von Vector statt Array

Zusammenfassend Nachteile / Vorteile Wichtigster Nachteil des Arrays: nach der Initialisierung ist

die Größe fest Wichtigster Vorteil des Array: einfacher Zugriff auf einzelne

Elemente […] Vector (siehe Java package java.util)

Kann in seiner Größe variieren Zugriff ein wenig komplizierter (mittels spezieller

Methoden) Sonst kann der Programmcode fast so bleiben

Page 139: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Hier kurz der Vergleich Array Vector

void computeMeans() { double sumx = 0.0d; double sumy = 0.0d; for (int i = 0; i<theArray.length;i++) {sumx = sumx + theArray[i][0]; sumy = sumy + theArray[i][1]; } meanx = sumx/theArray.length; meany = sumy / theArray.length; }

Page 140: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Hier kurz der Vergleich Array Vector

void computeMeans() { double sumx = 0.0d; double sumy = 0.0d; for (int i = 0; i<theArray.size();i++) {sumx = sumx + ((WertePaar)theArray.elementAt(i)).x(); sumy = sumy + ((WertePaar)theArray.elementAt(i)).y(); } meanx = sumx/theArray.size(); meany = sumy / theArray.size(); }

Page 141: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Objektorientierung: Prinzipien Klasse

Eine Klasse (in Java genannt ”class”) ist ein Muster oder eine Schablone zur Erzeugung von Objekten mit identischen oder ähnlichen Eigenschaften. Das heißt, in Java werden nicht direkt Objekte definiert, sondern zunächst Klassen, welche diese Objekte beschreiben.

Instanz, ObjektEine Instanz (englisch ”instance”) einer Klasse ist ein anderes Wort für ”tatsächlich existierendes Objekt”. Während Klassen sozusagen abstrakte Repräsentationen von Objekten sind, ist eine Instanz eine Konkretisierung, manchmal auch "Inkarnation" genannt.

Page 142: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Objektorientierung (2): Attribute

AttributeObjekte besitzen Attribute, welche das Aussehen, den Zustand oder andere Eigenschaften des Objekts beschreiben. Solche Attribute werden durch Instanzenvariablen (englisch ”instance variables”) beschrieben.

Bei Erzeugung eines konkreten Objekts, also einer Instanz, erhalten diese Variablen konkrete Werte, die während der Lebenszeit des Objekts konstant sein oder auch während des Programmablaufs verändert werden können.

Page 143: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Objektorientierung (3): Methode

Methoden zur Beschreibung von VerhaltenKlassen besitzen auch ein sogenanntes Verhalten (englisch ”behaviour”). Das Verhalten einer Klasse legt fest, ob und wie sich der interne Zustand einer Klasse ändert oder was eine Instanz gegebenenfalls als Auftrag ausführen kann. Dieses Verhalten wird durch sogenannte Methoden (englisch ”methods”) beschrieben, welche klasseninterne Funktionen beschreiben. Methoden arbeiten also auf den Instanzen dieser Klassen.

Page 144: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Objektorientierung (4): Konstruktoren

KonstruktorenDas Erzeugen von Instanzen als konkreten Objekten geschieht mit Hilfe von sogenannten Konstruktoren. Wir haben das schon im Zusammenhang mit den Arrays kennen gelernt, als ein konkreter Array mit Hilfe von new erzeugt wurde. Ähnliches gilt auch für Objekte der Klasse String. Bemerkenswert ist, dass in Java eine Klasse über mehrere Konstruktionsmethoden verfügen kann.

Page 145: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Erstes Beispiel für ein Java-Programm mit Klasse (1)

Betrachte Punkte in einem 2-dimensionalen Koordinatensystem mit ganzzahlig eingeteilten x- und y- Koordinaten (z.B. Bildschirmspeicher, Pixelgraphik oder auch Atome in einem Kristallgitter)

Die Klasse zur Beschreibung von Punkten könnte so aussehen:class Punkt // Der Name der Klasse ist Punkt{

int x,y; // Die Attribute sind x und y . . .

}

Page 146: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Da ein Klassenname auch ein Typname ist, können Variablen angelegt werden durch

Punkt P1, P2;

Die Variablen P1 und P2 stellen aber noch keine aktuellen Punkte dar, sondern sie müssen erst mit aktuellen Objekten ”versorgt” werden. Die Erzeugung erfolgt mit der Anweisung new z.B.:

Punkt P1;P1 = new Punkt();

Erstes Beispiel für ein Java-Programm mit Klasse (2)

Page 147: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Da Objekte etwas komplexer sind als einfache Werte (int, float, char …) ist dieser etwas aufwendigere Prozeß notwendig

Für die Erzeugung eines neuen Objektes eines Typs können spezielle Vorschriften angegeben werden, damit schon zu diesem Zeitpunkt bestimmte Eigenschaften des Objektes sichergestellt werden können

Zunächst soll jedoch betrachtet werden, wie objektspezifische Vorschriften – die Operationen oder Methoden aussehen

Erstes Beispiel für ein Java-Programm mit Klasse (3)

Page 148: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Es soll die Methode move für das Bewegen von Punkten definiert werden. Die Eingabe für move ist der Versatz dx bzw. dy in x- bzw. y- Richtung. Die Beschreibung von move wird Teil der Deklaration der Klasse Punkt:

class Punkt{ int x,y;

void move(int dx, int dy) // Methode mit Parametern { x = x + dx; // Rumpf der Methode y = y + dy; } . . .

}

Erstes Beispiel für ein Java-Programm mit Klasse (4)

Page 149: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Wichtig: Methoden besitzen eine sog. Signatur. D.h. sie haben

einen Rückgabetyp (hier void = keine Rückgabe) einen Namen (hier move) und eine Liste von sog. Formalparametern (hier dx und dy)

Insgesamt ergibt sich folgendes Fragment zur Klassenbenutzung:Punkt P1; // Deklaration einer Variablen P1P1 = new Punkt(); // Erzeugung des ObjektesP1.x = 5; P1.y = 2; // Attribute erhalten WerteP1.move(-1,1); // Aufruf der Methode move

Erstes Beispiel für ein Java-Programm mit Klasse (5)

Page 150: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

// Erstes Java Programm ... mit Klassen public class Punkte {public static void main(String args[ ]) { Punkt P;P = new Punkt(); // ... hier mit Konstruktor 1P.x = 5;System.out.println(”x: ”+P.x + ”; y: ” + P.y);

P = new Punkt(4,6); // ... hier mit Konstruktor 2System.out.println(”x: ”+P.x + ”; y: ” + P.y);

P.move(1,-10); // ... Benutzung der MethodeSystem.out.println(”x: ”+P.x + ”; y: ” + P.y);}}

Erstes Beispiel für ein Java-Programm mit Klasse (6)

Page 151: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

class Punkt // Hier beginnt die Klassendefinition{ int x,y; void move(int dx, int dy) { x = x + dx; y = y + dy; } Punkt () // Konstruktor 1 { x = 0; y = 0; } Punkt (int xx, int yy) // Konstruktor 2 { x = xx; y = yy; }}

Erstes Beispiel für ein Java-Programm mit Klasse (7)

Page 152: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Ausgabe:

x: 5; y: 0x: 4; y: 6x: 5; y: -4

Zur Übung:

Entwerfen ( oder programmieren Sie sogar) ein Java-Programm zur Darstellung und Manipulation von Punkten im 3-dimensionalen reellen Raum

Erstes Beispiel für ein Java-Programm mit Klasse (8)

Page 153: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Die class Motorcycle könnte z.B. die Attribute Farbe und Fabrikat haben. Das Verhalten wäre durch Methoden wie Starte den Motor, stoppe den Motor, Beschleunigen, Gang wechseln beschrieben.

// Programm mit Klasseclass Motorcycle // Hier beginnt die Klassendefinition{

// Attribute des MotorradsString make; // FabrikatString color;boolean engineState; // Motor an oder aus? // Methode zum Starten des Motorsvoid startEngine ( ){

Noch ein Beispiel: Die Klasse Motorcycle

Page 154: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

if (engineState == true){

System.out.println ("The engine is already on.");}else{engineState = true;System.out.println ("The engine is now on.");}} // Ende dieser Methode

// Methode zum Anzeigen der Attributevoid showAtts ( ){System.out.println ("This motorcycle is a " + color + " " + make);

Noch ein Beispiel: Die Klasse Motorcycle

Page 155: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

if (engineState == true){System.out.println ("The engine is on.");}else{

System.out.println ("The engine is off.");}

} // Ende dieser Methode} // Ende der Klassendefinition fuer Motorcycle

public class MotorcycleTest // Beginn des eigentlichen Programms{

public static void main (String args [ ]){ // Definition und Generierung eines Objekts!!

Motorcycle m = new Motorcycle ( );

Noch ein Beispiel: Die Klasse Motorcycle

Page 156: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

// ... und jetzt erhalten die Attribute ihre Wertem.make = "Yamaha RZ2350";m.color = "yellow";System.out.println ("Calling showAtts...");m.showAtts ( );System.out.println ("--------");System.out.println ("Starting engine...");m.startEngine ( );System.out.println ("---------");System.out.println ("Calling showAtts...");m.showAtts ( );System.out.println ("---------");System.out.println ("Starting engine...");m.startEngine ( );

}}

Noch ein Beispiel: Die Klasse Motorcycle

Page 157: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Compilieren generiert zwei Klassen, nämlich Motorcycle.class und MotorcycleTest.class. Die Klasse Motorcycle.class kann auch von anderen main-Klassen benutzt werden.

/home/bmc/MyJava>javac MotorcycleTest.java

Das Ausführen erfolgt durch die Zeile

/home/bmc/MyJava>java MotorcycleTest

Noch ein Beispiel: Die Klasse Motorcycle

Page 158: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Ausgabe:Calling showAtts...This motorcycle is a yellow Yamaha RZ2350The engine is off.--------Starting engine...The engine is now on.---------Calling showAtts...This motorcycle is a yellow Yamaha RZ2350The engine is on.---------Starting engine...The engine is already on.

Noch ein Beispiel: Die Klasse Motorcycle

Page 159: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Unter einem Applet versteht man ein „kleines“ Anwendungsprogramm in Java für eine spezielle Aufgabe

Ein Applet ist an eine WWW-Seite gekoppelt

Es wird mit der WWW-Seite über das Internet übertragen und auf dem Client ausgeführt

Ein Applet wird durch einen Web-Browser nach dem sogenannten Sandkastenprinzip (Sandbox) abgearbeitet, d. h. es hat keine Rechte für die Bearbeitung lokaler (Client) Dateien

Java-Applet Programmierung (1)

Page 160: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Erzeuge eine Datei namens "HelloWorld.java" mit folgendem Inhalt:

import java.applet.*;import java.awt.*;public class HelloWorld extends Applet

{ public void paint(Graphics g) { g.drawString("Hello World",25,50); }

}

Java-Applet Beispiel (1)

Page 161: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Compiliere die Datei: javac HelloWorld.java

Erzeuge eine Datei namens "HelloWorld.html" im selben Verzeichnis:<HTML><HEAD><TITLE>Java-Applet Beispiel</TITLE></HEAD><BODY>Applet:<APPLET code="HelloWorld.class" width=150 height=100></APPLET></BODY></HTML>

Java-Applet Beispiel (2)

Page 162: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Lade die HTML-Datei in einen WWW-Browser, der Java-Applets ausführen kann:

Java-Applet Beispiel (3)

Page 163: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Alternativ kann das Applet auch im Appletviewer (Bestandteil des Java Development Kit) gestartet werden:

Java-Applet Beispiel (4)

Page 164: Folien zum Kurs „Programmierung mit Java“ SS 2004 Siehe   essen.de/SysMod/lehre/Chemie

Java-Applet / Applikation Unterschiede

Applet Applikation

Einbindung in HTML-Seite

Eigenständiges Programm

Enthält keine main() - Methode

Enthält main() - Methode

Eingeschränkt Rechte bei der Ausführung

Keine Einschränkung der Rechte