Einfu00FChrung Java Sw Ro
-
Upload
catalina-stoican -
Category
Documents
-
view
212 -
download
0
description
Transcript of Einfu00FChrung Java Sw Ro
Einführung in die Programmierung (JAVA)
In Kooperation zwischenTU Darmstadt - Fachgebiet Wirtschaftsinformatik II und FILS – Deutsche
Abteilung Veranstaltungskonzept: Thomas Miklitz (TU Darmstadt)
Dozenten in Bukarest: Prof. Dr. Ing. Dorin Irimescu / Dr. Ing. Cristian Mustata
Wintersemester 2004/2005
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 2
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Organisatorisches (1)
Ablauf 6 x „Hörsaalübung“ mittwoch 8-12 oder 12-16 Saal R420 12 x Übung „Fahrplan“ zur Veranstaltung in Darmstadt
1. Vw 20.10 - 26.10 Vorlesung (24.10)
2. Vw 27.10 - 2.11 Vorlesung (31.10)
3. Vw 3.11 - 9.11 1. Übung Vorlesung (7.11)
4. Vw 10.11 - 16.11 2. Übung
5. Vw 17.11 - 23.11 3. Übung
6. Vw 24.11 - 30.11 4. Übung
7. Vw 1.12 - 7.12 5. Übung
8. Vw 8.12 - 14.12 6. Übung
9. Vw 15.12 - 21.12 7. Übung22.12 - 28.12
29.12 - 4.1
10. Vw 5.1 - 11.1 Vorlesung (9.1)
11. Vw 12.1 - 18.1 8. Übung Vorlesung (16.1)
12. Vw 19.1 - 25.1 9. Übung Vorlesung (23.1)
13. Vw 26.1 - 1.2 10. Übung
14. Vw 2.2 - 8.2 11. Übung
15. Vw 9.2 - 15.2 12. Übung16.2 - 22.2
Weihnachtsferien
Weihnachtsferien
Klausur
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 3
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Organisatorisches (2)
Übung in Kleingruppen Termine: Mittwoch 08:00-09:40 10:00-11:40
Mittwoch 12:00-13:40 14:00-15:40
Informationen zur Veranstaltung im Internet Allgemeine Informationen auf der Fachgebiets-Homepage unter Lehre
Übungsblätter, Musterlösungen, Downloads im Online-SekretariatBenutzername: bwl5Passwort: winf
Newsgroup für Diskussionen zur Veranstaltung:tud.fb01.bwl.kommunikationssysteme (auf dem Newsserver: news.tu-darmstadt.de)
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 4
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Organisatorisches (3)
Literatur Ratz, Scheffler, Seese: Grundkurs Programmieren in Java, Band 1. Hanser,
2001. Mössenböck: Sprechen Sie Java. dpunkt, 2003.
Campione, Walrath, Huml: The Java Tutorial. Addison-Wesley, 2000. Online verfügbar: http://java.sun.com/docs/books/tutorial/
Software erforderlich: Java 2 SE 1.4.2 SDK dringend empfohlen: Netbeans IDE 3.5.1 with Java 2 SE 1.4.2 COBUNDLE
erhältlich im Internet: http://java.sun.com/j2se/1.4.2/download.html
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 5
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Generationen von Programmiersprachen
1. Generation: Maschinensprachen Interne Sprache eines bestimmten Prozessors,
Maschinenbefehle sind als Zahlen (Bitmuster) codiert
2. Generation: maschinenorientierte Sprachen Assembler, bilden Maschinenbefehle in eine für
den Menschen lesbare Form ab (Mnemonics)
3. Generation: höhere Programmiersprachen Prozedurale Sprachen, abstrahieren von dem
verwendeten Prozessor, Problem/Algorithmus stehen im Vordergrund. Bsp.: Cobol, Pascal, C.
4. Generation: nicht-prozedurale Sprachen Beschreiben was zu tun ist, nicht wie es zu tun ist.
Bsp.: SQL
Objektorientierte Sprachen Anderes Programmierprinzip als 1.-3.
Bsp. C++, Smalltalk, Java
B81000BB0500F6E3
MOV AX,10HMOV BX,5MUL BX
16 * 5;
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 6
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Übersetzungsprogramme
Assembler Übersetzt maschinenorientierte Sprache in Maschinensprache 1:1 Übersetzung
Compiler Übersetzung aus höherer Sprache in Maschinensprache Überprüfung syntaktischer Fehler, Optimierung 1:n Übersetzung
Assembler und Compiler übersetzen das Quellprogramm als Ganzes
Interpreter Jede Anweisung des Quellprogramms wird einzeln auf Korrektheit geprüft
und ausgeführt. Es wird kein Maschinencode erzeugt.
langsamere Programmausführung
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 7
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Java – Was ist das?
Definition von Sun Microsystems: A simple, object-oriented, distributed, interpreted, robust, secure, architecture
neutral, portable, high-performance, multi-threaded, and dynamic language.
einfach (im Vergleich zu anderen Programmiersprachen) objekt-orientiert verteilt (netzwerkfähig) interpretiert robust (gegenüber Programmierfehlern) sicher plattformunabhängig, portabel performant (darüber lässt sich diskutieren) multithread-fähig (parallele Ausführung mehrerer Abläufe) dynamisch (Es werden nur benötigte Programmteile geladen.)
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 8
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Warum lernen/lehren wir Java?
Java ist relativ einfach zu lernen (z.B. im Vergleich zu C/C++).
bietet umfangreiche Bibliotheken.
ist in der Praxis weit verbreitet.
ist für viele Betriebssysteme verfügbar.
kann kostenlos verwendet werden.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 9
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Java Virtual Machine
Java kombiniert den Einsatz von Compiler und Interpreter.
Das Quellprogramm wird in einen maschinenunabhängigen Bytecode kompiliert.
Der Bytecode besteht aus Befehlen der Maschinensprache eines virtuellen Prozessors.
Der Bytecode wird auf dem Zielsystemvon einem Interpreter (Java Virtual Machine, JVM) ausgeführt.
Vorteile gegenüber Interpreter: Bytecode ist bereits optimiert Bytecode ist syntaktisch korrekt Quellcode wird nicht offen gelegt
Test.class
Editor/IDE
Test.java
Compiler
JVM
Quellcode
Bytecode
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 10
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Ein erstes Programm: HelloWorld
Grundgerüst für ein einfaches Java-Programm:
Die Methode main wird beim Ausführen der Klasse von der JVM gestartet.
/*Unser erstes Programm
*/public class HelloWorld {
public static void main(String [] args) {System.out.println("Hello World"); // sage Hallo
}}
einzeiliger Kommentar
mehrzeiliger KommentarName der Klasse
Methode main muss immer so deklariert werden
Befehl für Bildschirmausgabe
jede Anweisung muss mit einem Semikolon
abgeschlossen werden
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 11
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Elementare Datentypen in Java
*) Gleitkommazahlen entsprechend IEEE 754
Typ Inhalt Wertebereich Speicherbedarf
boolean Wahrheitswert {true, false} 1 bit
char Unicode-Zeichen [\u0000; \uFFFF] 16 bit
byte ganze Zahl [-128;127] 8 bit
short ganze Zahl [-32.768;32.767] 16 bit
int ganze Zahl [-2.147.483.648; 2.147.483.647] 32 bit
long ganze Zahl [-263; 263-1] 64 bit
float Gleitkommazahl* [-3,4028·1038; 3,4028·1038] 32 bit
double Gleitkommazahl* [-1,7976·10308; 1,7976·10308] 64 bit
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 12
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Variablen
Variablen sind Speicherstellen, in denen (zur Laufzeit eines Programms) Werte gespeichert werden können.
Jede Variable hat einen Namen, einen Typ und einen Wert. Variablen müssen stets deklariert werden, d.h. es wird der Datentyp
festgelegt, bevor sie verwendet werden kann. Eine Variable eines bestimmten Typs kann nur Werte des
entsprechenden Typs enthalten.
Beispiele:int i;double d;boolean b;
Variablen können beim Deklarieren auch initialisiert werden. Falls keine explizite Initialisierung erfolgt, wird die Variable implizit mit
0 initialisiert.
Beispiele:int j=5;float pi = 3.14159265;
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 13
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Literale
Literale sind (fest im Programm eingetragene) Konstanten. Im Gegensatz zu Variablen haben sie also einen festen Wert und werden nicht durch einen Namen, sondern durch den Wert selbst angesprochen
Auch Literale haben einen Datentyp, den der Compiler aber automatisch zuordnet
Beispiele:
Datentyp Literal-Beispiel
int 1, 31, -1234, 0x14
long 1L, 31L, -1234L, 0x14L
double 1.0, 3.14, 3D, 3E20D, 3.0E20D
float 1.0F, 3.14F, 3F, 3E20F, 3.0E20F
boolean true, false
char 'a', 'A', ' ', '\n', '\'', '\\', '\"'
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 14
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Operatoren (1)
Arithmetische Operatoren
+ Addition- Subtraktion* Multiplikation/ Division% Modulo (Rest bei Ganzzahldivision)
++ Inkrementierung-- Dekrementierung
Beispiel:x = ++y; y = y + 1;x = y;x = y++; x = y; y = y + 1;
als Präfix- oder Postfix-Operator
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 15
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Operatoren (2)
Zuweisungsoperatoren= einfache Wertzuweisung+=, -=, *=, /=, %= reflexive Wertzuweisung,
z.B. x += 3; x = x + 3;
Vergleichsoperatoren== gleich!= ungleich<,<= größer (oder gleich)>,>= kleiner (oder gleich)
Logische Operatoren! Negation&& logisches UND|| logisches ODER
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 16
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Logische Operatoren
a und b sind logische Ausdrücke
Beispiele:( x > 3) && ( y <= 5 )
( ( x < 7 ) || ( y < 7) ) && !b
( x < 7 ) || ( y < 7) && !b
Operator JAVA Syntax a = true
b = true
a = true
b = false
a = false
b = false
NICHT ( !a ) false false true
UND ( a && b ) true false false
ODER ( a || b ) true true false
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 17
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Ausdrücke & Wertzuweisungen
Ein Ausdruck repräsentiert immer einen Wert eines bestimmten Datentyps.z.B. Zahl, Attribut, Variable, Methode mit Rückgabewert, Rechenoperation
Mit einer Wertzuweisung wird einem Attribut oder einer Variablen ein bestimmter Wert zugewiesen.Format: Variable = Ausdruck;
Beispiel:int i;
int j;
j = 5;
i = j;
j = 6 * i;
AusdrückeWertzuweisung
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 18
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Typumwandlungen
Implizite Umwandlungen bei der Auswertung arithmetischer Operationen mit Operanden
unterschiedlichen Typs bei Zuweisungen, wenn der Typ des zugewiesenen Ausdrucks nicht dem
der Variablen entspricht niedrigerer Typ wird in höheren Typ umgewandelt:
byte short int long float double
char
z.B. int i = 5;
double d = i;
Explizite Umwandlungen (type casting) auch ein höherer Typ kann in einen niedrigeren umgewandelt werden evtl. Genauigkeitsverlust bzw. Fehler wegen anderem Wertebereich
z.B. double d = 3.1415;
int i = (int)d;
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 19
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Anweisungen
Anweisungen in Java Zuweisungen und Methodenaufrufe ( später) Blockanweisungen bedingte Anweisungen repetitive Anweisungen Anweisungen zur Ausnahmebehandlung ( später)
Blockanweisungen fassen mehrere Anweisungen zu einer Anweisung zusammen werden v.a. zusammen mit bedingten und repetitiven Anweisungen
eingesetzt
Beispiel:int i=1;
int j=1;
{
j*=i;
i++;
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 20
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Bedingte Anweisungen (1)
if-Anweisung führt eine Anweisung nur aus, wenn eine Bedingung erfüllt ist
Syntax:if (Bedingung) Anweisung;if (Bedingung) Anweisung else Anweisung;
Beispiele:if (a != 0) b /= a;
if (i > 0) { r = 1;} else if (i < 0) { r = -1;} else { r = 0;}
Kann auch eine Blockanweisung sein
wird ausgeführt, wenn die Bedingung nicht erfüllt ist
boolean
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 21
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Bedingte Anweisungen (2)
switch-Anweisung ermöglicht für Integer-Vergleiche eine kompaktere Schreibweise als die if-Anweisung
Syntax:switch (Ausdruck) {
case Wert : Anweisung; break;
default : Anweisung;}
der Wert von Ausdruck wird berechnet das Programm springt zu der Marke, die mit dem berechneten Wert übereinstimmt Stimmt keine Marke mit dem Wert überein, springt das Programm zur default-Marke
Beispiel:switch (x) {
case 1 : System.out.println("Eins"); break;case 2 :case 3 : System.out.println("Zwei oder Drei"); break;default : System.out.println("Unbekannt");
}
integer
Optional, wird ausgeführt, falls keine Aussage zutrifft
Optional, bricht die Switch Anweisung ab
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 22
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Repetitive Anweisungen (1)
while-Anweisung wiederholte Ausführung einer Anweisung
Syntax: while (Bedingung) Anweisung;
solange Bedingung wahr ist, wird Anweisung ausgeführt unter Umständen wird Anweisung nie ausgeführt (ablehnende Schleife)
Beispiel:while (a >= b) a -= b;
int i = 0;
while (a > 1) {
a /= 2;
i++;
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 23
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Repetitive Anweisungen (2)
do-while Anweisung wiederholte Ausführung einer Anweisung
Syntax:do Anweisung while (Bedingung);
führt Anweisung solange aus bis Bedingung falsch ist Anweisung wird mindestens einmal ausgeführt! (annehmende Schleife)
Beispiel:int i = 0;
do {
a /= 2;
i++;
}
while (a > 1);
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 24
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Repetitive Anweisungen (3)
for Anweisung wiederholte Ausführung einer Anweisung
Syntax:for (Initialisierung; Bedingung; Aktualisierung) Anweisung;
Führe Initialisierung aus Solange Bedingung wahr ist, führe Anweisung aus Nach jeder Ausführung von Anweisung führe Aktualisierung aus Anweisung wird unter Umständen nie ausgeführt (ablehnende Schleife)
Beispiel:for (int i=1; i<=10; i++) a *= 2.0;
a = 17;
for (int i=1; a>=1; i++) a /= 2.0;
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 25
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Repetitive Anweisungen (4)
for vs. while Schleife jede for Schleife kann in eine while Schleife transformiert werden
for (Initialisierung; Bedingung; Aktualisierung) Anweisung;
ist äquivalent zu
Initialisierung;
while (Bedingung){
Anweisung;
Aktualisierung;
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 26
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Wiederholung
Programmiersprachen, Übersetzungsprogramme
Überblick Java
Datentypen, Variablen
Operatoren, Zuweisungen
Anweisungen bedingte Anweisungen (if, switch) repetitive Anweisungen (for, while, do...while)
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 27
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Methodenaufrufe (1)
Methoden sind Unterprogramme, die vom Hauptprogramm aufgerufen werden können und Hilfsfunktionen ausüben.
Wird eine Methode aufgerufen, so unterbricht der Anweisungsblock, in dem der Aufruf stattfindet, seine Abarbeitung bis alle Anweisungen der aufgerufenen Methode abgearbeitet sind.
Methoden müssen (fast) immer mit Bezug zu der Klasse oder einem Objekt der Klasse, in der sie definiert sind, aufgerufen werden.
Ausnahme: Aufruf aus (einem Objekt) der Klasse, in der die Methode definiert wird
Beispiel:System.out.println(....);
Math.sin(...);
Objekt
Klasse
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 28
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Methodenaufrufe (2)
Bei einem Methodenaufruf müssen Parameter von den Typen, die in der Signatur der Methoden definiert sind, übergeben werden. Diese Parameter sind Ausdrücke der entsprechenden Typen.
Beispiel: Signatur:
int max(int a, int b)
Methodenaufruf:int i;
Math.max(i, 2*4);
Methoden mit einem Rückgabetyp sind Ausdrücke, können also nur dort eingesetzt werden, wo ein Wert des entsprechenden Typs verlangt wird.
Beispiel:int i = Math.max(5,8);
Rückgabetyp
Parameter
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 29
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Einfache Ausgaben in Java
Ein- und Ausgaben erfolgen in Java über sog. Streams (Datenflüsse). Standard-Objekt für Bildschirmausgabe ist System.out Es stellt insbesondere die Methoden print() und println() zur
Verfügung.
Syntax:// einfache Ausgabe:
System.out.print(Argument1 [+ Argutment2 + ...]);
// mit Zeilenumbruch
System.out.println(Argument1 [+ Argutment2 + ...]);
Beispiele:System.out.println("Heute ist der "+ tag +". Tag im Monat");
System.out.println("Morgen ist der "+ (tag+1) +". Tag im Monat ");
beliebige Datentypen
Ausdrücke müssen in Klammern gesetzt werden, damit sie vor der Ausgabe ausgewertet werden können
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 30
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Mathematische Methoden in Java
Die Java-Klassenbibliothek enthält eine Klasse Math, welche die gebräuchlichen mathematischen Funktionen enthält:
Beispiel:y = Math.sqrt(x);
double ceil(double x) ganzzahliges Aufrunden der Zahl x
double floor(double x) ganzzahliges Abrunden der Zahl x
* int max(int x,int y) Maximum von x und y
* int min(int x,int y) Minimum von x und y
double pow(double x,double y) Potenzfunktion xy
double sqrt(double x) Wurzel von x
double sin(double x) Sinus von x
double exp(double x) Exponentialfunktion ex
double log(double x) natürlicher Logarithmus ln x
* int abs(int x) Absolutbetrag
long/int round(double/float x) rundet double nach long bzw. float nach int
* jeweils für die Datentypen double, float, long, int verfügbar
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 31
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Zeichenketten (1)
Zeichenketten (Strings) sind in Java nicht als primitiver Datentyp, sondern als Klasse realisiert.
Diese beinhalten eine große Anzahl an Methoden zum Umgang mit Zeichenketten.
SyntaxString stringName;
BeispielString stringName;
stringName = "Hans Mustermann";
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 32
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Zeichenketten (2)
Wichtige Methoden der String-Klasseint stringName.length() liefert die Länge des Strings
char stringName.charAt(int index) liefert das Zeichen an der entsrpechenden Position des Strings
boolean stringName.equals(String anotherString) vergleicht zwei Strings
boolean stringName.equalsIgnoreCase(String anotherString) vergleicht zwei Strings unabhängig von der Groß- und Kleinschreibung
String stringName.concat(String anotherString) verkettet zwei Strings (wie "+")
int stringName.indexof(String zeichen) liefert die erste Position des zeichen innerhalb des Strings
int stringName.indexOf(String zeichen, int anfang) liefert die erste Position des zeichen innerhalb des Strings ab der Stelle anfang
String stringName.toUpperCase() wandelt alle Zeichen in Großbuchstaben
String stringName.toLowerCase() wandelt alle Zeichen in Kleinbuchstaben
String stringName.replace(char zeichen1, char zeichen2) erstezt alle zeichen1 durch zeichen2
String stringName.trim() entfernt alle Leerzeichen am Beginn und am Ende des Strings
String stringName.substring(int position) liefert den Stringinhalt ab der Stelle position
String stringName.substring(int position, int ende) liefert den Stringinhalt ab der Stelle position bis zur Stelle ende
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 33
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Typumwandlungen mit Strings
Zu jedem primitiven Datentyp existiert eine Klasse gleichen Namens. Sie beginnen im Unterschied dazu jedoch mit einem Großbuchstaben, z.B. Double
Ausnahme: Datentyp int, zugehörige Klasse heißt Integer In diesen Klassen befinden sich die Methoden, die zur Umwandlung
der numerischen Datentypen in Strings und umgekehrt benötigt werden
Konvertierung:
von nach Methodenaufruf
String int IntegerVariable = Integer.parseInt(StringVariable)
String double DoubleVariable = Double.parseDouble(StringVariable)
int String StringVariable = Integer.toString(IntegerVariable)
double String StringVariable = Double.toString(DoubleVariable)
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 34
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Objektorientierte Programmierung
„Objektorientierte Programmiersprachen sehen [...] ein Programm als eine Sammlung von Objekten, die miteinander in Verbindung stehen und zum Zwecke der Problemlösung Nachrichten austauschen“
(K ö n i g e t a l., G r u n d z ü g e d e r W i r t s c h a f t s i n f o r m a t i k, 2 0 0 4)
Ein Objekt hat einen Zustand, der durch seine Attribute (Variablen)
repräsentiert wird verfügt über ein Verhalten, welches durch seine Methoden
(Operationen) bestimmt wird besitzt eine Identität, durch die es von allen anderen Objekten
unterschieden werden kann
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 35
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Objektorientierte Programmierung (2)
Eine Klasse ist ein Bauplan für eine Gruppe gleichartiger Objekte. Sie definiert die Attribute und Methoden für diese Objekte.
Objekte vs. Klassen Klassen werden vom Programmierer definiert – Objekte werden zur Laufzeit
erzeugt jedes Objekt ist Instanz genau einer Klasse, aber eine Klasse kann beliebig
viele Instanzen besitzen alle Objekte einer Klasse besitzen die gleichen Methoden und haben daher
das gleiche Verhalten alle Objekte einer Klasse haben die gleichen Attribute, allerdings mit
unterschiedlichen Werten (Zustand)
A u t o
H e r s t e l l e rM o d e l l
Ei n A u t o : A u t o
H e r s t e l l e r = "V W"
M o d e l l = "G o l f"
A n d e r e s A u t o : A u t o
H e r s t e l l e r = „O p e l"
M o d e l l = "A s t r a"
Klasse Objekte
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 36
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Klassen in Java
Um Objekte erzeugen zu können, muss eine passende Klasse vorhanden sein.
Jede Klassendefinition wird mit dem Schlüsselwort class eingeleitet; dahinter steht der Name der Klasse.
Eine Klasse besteht aus Variablen und Methoden.
Syntax:[Modifier] class Klassenname {
Typ attributName1;
Typ attributName2;
[Modifier] Typ Methodenname(Typ param1, Typ param2, ...){
}
}
Beginn der Klasse
Ende der Klasse
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 37
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Methoden (1)
Methoden definieren die Funktionalität, die ein Objekt ausführen kann
die Methoden eines Objektes operieren auf den Attributen eines Objektes
Methoden bestehen aus einer Signatur und einem Anweisungsblock
die Signatur definiert die Sichtbarkeit, den Rückgabetyp, den Namen und die Parameter einer Methode
der Anweisungsblock enthält die Anweisungen, die bei dem Aufruf der Methode ausgeführt werden
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 38
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Methoden (2)
Parameter enthält eine Signatur eine Liste mit einem oder mehreren Parametern, so
müssen der Methode beim Aufruf Werte von denselben Typen übergeben werden
die Parameter können im Anweisungsblock wie Variablen verwendet werden
verlangt eine Methode keine Parameter, so sind die beiden runden Klammern der Signatur leer
Rückgabetyp eine Methode muss bei der Beendigung einen Wert von ihrem Rückgabetyp
an den Aufrufer übergeben Syntax für Rückgabe an den Aufrufer: return rueckgabewert; der Aufrufer kann diesen Wert als Ergebnis des Methodenaufrufs weiter
benutzen gibt eine Methode keinen Wert zurück, so wird anstelle des Rückgabetyps
void angegeben
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 39
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Methoden (3)
Syntax:[Modifier] Typ Methodenname(Typ param1, Typ param2, ...){
Anweisungsblock;
}
Beispiel:public double quadriere (double x) {
double y = x * x;
return y;
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 40
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Überladene Methoden
Eine Methode heißt überladen, wenn in der selben Klasse gleichnamige Methoden mit unterschiedlicher Signatur existieren (Overloading)
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
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 41
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Attribute
Attribute sind Variablen, die zu einem Objekt bzw. zu einer Klasse gehören
In den Attributen sind die Daten gespeichert, die ein Objekt verwalten kann
Syntax:Modifier Attributtyp attributName;
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 42
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Kapselung vs. Information Hiding
Kapselung: Objekte enthalten alle benötigten Variablen, sowie die darauf arbeitenden
Funktionen ("Methoden") Ziel: Wissen über die Implementierung einer Klasse für andere Klassen
nicht nötig
Information Hiding (Geheimnisprinzip): Implementierung einer Klasse wird vor anderen Klassen verborgen Zugriff auf private Variablen oder Methoden wird verboten Modifikation eines Objektes nur über öffentliche Methoden (und Variablen)
möglich Ziel: Implementierung einer Klasse für andere Klassen nicht sichtbar
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 43
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Öffentliche und private Methoden/Variablen
Java erlaubt verschiedene Einschränkungen bzgl. des Zugriffs auf die Variablen und Methoden eines Objekts. Dies wird über die Modifier gesteuert
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 (siehe Vererbung)
Beispiel:public class Buffer {
private int item;public void insert (int i) { ... ]public int remove() { ... }
}
Implementierung des Pufferspeichers ist nach außen nicht sichtbar
Für Klassen verwenden wir immer den Modifier public
Der Puffer kann nur über diese beiden Methoden manipuliert werden
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 44
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Klassenmethoden und -attribute
eine Klassenmethode (-attribut) ist eine Methode (Attribut), die nicht einem Objekt, sondern einer Klasse zugeordnet ist
Klassenmethoden (-attribute) werden über den Modifier static definiert
Klassenmethoden können nur auf Klassenvariablen, nicht auf Objektvariablen zugreifen
Aufruf über Klassenname: Klasse.methode() bzw. Klasse.attribut
Beispiel:public static void main (String[] args) {
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 45
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Objekte als Variablen
Jede Java-Klasse definiert einen Objekttyp, von dem Variablen angelegt werden können
Im Unterschied zu den elementaren Datentypen speichern diese Variablen nicht den Wert eines Objektes, sondern einen Verweis auf das Objekt
Beispiele:String eingabe;Buffer b;
Diese Deklarationen erzeugen noch kein Objekt der entsprechenden Klasse! Objekte müssen explizit vom Programmierer erzeugt werden
Wird einer Variablen – wie in den Beispielen – bei der Definition kein Objekt zu gewiesen, dann wird die Variable mit dem Wert null initalisiert
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 46
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Objekte erzeugen und vernichten
Objekte werden mit dem Befehl new erzeugt
Beispiele:String leer = new String();
Double pi = new Double(3.14159265);
Die Parameter richten sich nach den definierten Konstruktoren
Wie werden Objekte wieder gelöscht? vom Programmierer gar nicht nicht mehr benötigte (zugreifbare) Objekte werden von Java automatisch
gelöscht („Garbage Collection“)
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 47
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Konstruktoren (1)
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 Attribute sie legen dabei ggf. Unterobjekte oder Felder an
Beispiel:public class Point {
private double xCoord;private double yCoord;
public Point(double x, double y) {xCoord = x;yCoord = y;
}}
Point p = new Point(1, 3);
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 48
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Konstruktoren (2)
Eine Klasse kann über mehrere Konstruktoren verfügen, die sich in ihrer Signatur unterscheiden (überladene Konstruktoren)
Der Programmierer muss nicht für jede Klasse einen Konstruktor definieren
Für Klassen ohne Konstruktor gilt: Java erzeugt einen Default-Konstruktor Der Default-Konstruktor hat keine Parameter
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 50
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Wiederholung
Methodenaufrufe
Bildschirmausgabe
Zeichenketten
Objektorientierte Programmierung
Eigene Klassen, Methoden, Attribute
Objekterzeugung, Konstruktoren
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 51
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Pakete (1)
Pakete (Packages) sind Bibliotheken von (inhaltlich zusammen-gehörenden) Klassen.
Auch die mit dem Java 2 SE SDK ausgelieferten Klassen sind in Pakete aufgeteilt:
java.langenthält grundlegende Sprach- und Systemklassen. Wird automatisch geladen.
java.ioenthält eine Vielzahl an Klassen zur Ein- und Ausgabe.
java.netenthält Klassen für die Netzwerkfunktionalitäten.
java.utilenthält diverse Hilfsklassen.
Insgesamt umfasst das Java 2 SE SDK über 130 Pakete mit mehr als 3800 Klassen.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 52
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Pakete (2)
Eigene Klassen können ebenfalls in Pakete gruppiert werden.
Die Anweisung package paketname; am Anfang der Java-Datei legt fest, zu welchem Paket eine Klasse gehört.
Vor dieser Anweisung dürfen keine weiteren Anweisungen stehen. Die Dateien der Klassen des Pakets paketname werden im Unterverzeichnis
paketname gespeichert.
Pakete können auch Unterpakete enthalten: package paket.unterpaket;
Die Dateien der Klassen des Pakets paket.unterpaket werden im Unterverzeichnis paket\unterpaket gespeichert.
Beispiel:package tud.bwl5.eiprog;
public class MyClass { ...}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 53
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Pakete (3)
Direkter Zugriff (über den Klassennamen) nur auf Klassen aus dem eigenen Paket oder aus java.lang
Zugriff auf Klassen aus anderen Paketen: über den vollqualifizierten Namen (bestehend aus Paketname und
Klassennamen):java.io.File f = new java.io.File("C:\test.txt");
tud.bwl5.eiprog.MyClass c = new tud.bwl5.eiprog.MyClass();
durch Importieren der Klasse oder des Pakets import java.io.File; nur die Klasse File wird importiert import java.io.*; alle Klassen des Pakets java.io werden importiert
auf importierte Klassen kann ebenfalls direkt zugegriffen werden:File f = new File("C:\test.txt");
MyClass c = new MyClass();
Die Import-Anweisung steht hinter der Package-Anweisung und vor dem Klassenkopf.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 54
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Dateneingabe in Java
Ein- und Ausgaben erfolgen in Java über sog. Streams (Datenflüsse).
Das Paket java.io stellt eine Vielzahl von Stream-Klassen zur Datenein- und -ausgabe auf unterschiedlichen Geräten zur Verfügung.
Die Klasse Input aus dem Paket tud.bwl3.eiprog stellt Ihnen eine Methode zur Verfügung, mit der eine Zeichenkette eingelesen werden kann.
Signatur: public static String readln()
So verwenden Sie diese Methode:import tud.bwl5.eiprog.*;
public class Test {
public static void main(String[] args) {
String s = Input.readln();
System.out.println(s);
}
}
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 55
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Geltungsbereich von Variablen (1)
Attribute sind in der gesamten Klasse gültig, in der sie definiert werden.
Variablen, die innerhalb einer Methode oder einer Blockanweisung deklariert werden heißen lokale Variable.
Eine lokale 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 Attribut) eines äußeren Block.
Auf ein Attribut, das überschattet wird, kann mittels this.attributName zugegriffen werden.
Eine lokale Variable verliert ihre Gültigkeit sobald "ihr" Block beendet wird.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 56
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Geltungsbereich von Variablen (2)
Beispiel (Vgl. Folie 47):public class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
Beispiele:
Die Parameter x und y überschatten die gleichnamigen Attribute
falsch: public static int max(int a, int b){ if (a > b) { int result = a; } else { int result = b; } return result; }
richtig: public static int max(int a, int b){ int result; if (a > b) { result = a; } else { result = b; } return result; }
Die Variable result ist an dieser Stelle nicht mehr definiert.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 57
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Feldvariablen (1)
ein Feld (Array) ist eine Zusammenfassung mehrerer Variablen gleichen Datentyps unter einer Bezeichnung
der Zugriff auf ein Feldelement erfolgt über einen Index (ganzzahlig). Das erste Element hat immer den Index 0
Felder können von jedem Datentyp angelegt werden
Felder müssen als Variablen deklariert werden. Die eckigen Klammern legen fest, dass eine Feldvariable angelegt werden soll
Typ[] name
Felder können bei der Deklaration statisch mit Werten initialisiert werden
Typ[] name = {Wert1, Wert2, Wert3, ...};
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 58
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Feldvariable (2)
Felder können auch mit dem Befehl new zur Laufzeit dynamisch angelegt werden. Die einzelnen Elemente werden dann mit dem Standardwert des jeweiligen Datentyps (d.h. mit 0, false oder null) initialisiert.
name = new Typ[feldgroesse];
die Feldgröße (Anzahl der Elemente) kann über das Attribut length ermittelt werden:
name.length
Zugriff auf die Feldelemente: allgemein: name[index] n-tes Element: name[n-1] erstes Element: name[0] letztes Element: name[name.length – 1]
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 59
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Feldvariable (3)
Beispiele:public class FeldBeispiel1 { public static void main (String args[]) {
int[] primes = {2,3,5,7,11,13,17,19,23,29,31};for (int i=0; i<primes.length; i++) {
System.out.println( i + "-te Primzahl ist " + primes[i]);}
}}
public class FeldBeispiel2 { public static void main (String args[]) {
Integer zahl = new Integer[3];zahl[0] = new Integer(3);zahl[1] = new Integer(7);zahl[2] = new Integer(9);for (int i=0; i<3; i++) {
System.out.println(zahl[i]);}
}}
Das Feld wird initialisiert.
i-tes Element des Feldes
Das Feld wird angelegt.
Objekte werden angelegt und den Feldelementen zugewiesen.
© Thomas Miklitz (TU Darmstadt) FILS – Prof. Dr. Dorin Irimescu/Dr. Cristian Mustata – WS 2004/2005 - Folie 60
Ein
füh
run
g in
die
Pro
gra
mm
ieru
ng
Mehrdimensionale Felder
analog zu eindimensionalen Feldern bietet Java auch die Möglichkeit mehrdimensionaler Felder zu benutzen
mehrdimensionale Felder sind Felder von Feldern (von Feldern ...)
bei mehrdimensionalen Feldern werden bei der Deklaration, Instanziierung und Benutzung entsprechend viele Paare von eckigen Klammern angegeben
Deklaration: Typ[][] ... name;
Deklaration mit Initialisierung Typ[][].. name = { { Wert1, Wert2, .. } , { Wert2, Wert2, .. }, .. }
Beispiel:int [][] matrix = { {1,0,0}, {0,1,0}, {0,0,1} };for (int i=0; i<matrix.length; i++) {
for (int j=0; j<matrix[i].length; j++) {System.out.print(matrix[i][j] + "\t");
}System.out.println();
}