59
Einführung in die Programmierung (JAVA) In Kooperation zwischen TU 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

Einfu00FChrung Java Sw Ro

Embed Size (px)

DESCRIPTION

informatik

Citation preview

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();

}