Folien - FB3

Werbung
Vorkurs: Java-Einführung
Dr. Hui Shi
10. Oktober 2016
1
Überblick
1
Organisatoriches
2
Von Algorithmen zu Programmen
Intuitiver Algorithmusbegriff
3
Grundlegende Konzepte der Programmiersprache Java
Syntax und Semantik
Datentypen in Java und API
Steuerungs-Anweisungen in Java
4
Java Programme
Einfache Java-Programme
Attribute
Konstruktoren
Methoden
Verwendung von Klassen
2
Veranstalterin
Dr. Hui Shi: Cartesium 1.53, Tel. 218-64260
[email protected]
Literaturempfehlung (optional)
R. Sedgewick und K. Wayne: Einführung in die Programmierung mit
Java. Pearson Verlag 2011. ISBN 978-3-86894-067-3
3
Termine
Termin
T1
T2
T3
T4
T5
T6
Datum
10.10.
12.10.
12.10.
12.10.
13.10.
13.10.
Zeit
12-14
08-10
10-12
12-14
10-12
14-16
4
Raum
MZH 1380/1400
MZH P1 (Windows)
MZH P1 (Windows)
MZH P1 (Windows)
MZH P1 (Windows)
MZH P1 (Windows)
Von Algorithmen zu Programmen
5
Inhalt
Intuitiver Algorithmusbegriff
Beispiele für Algorithmen
Bausteine der Programmiersprache Java
Intuitiver Algorithmusbegriff
Algorithmen sind Vorschriften zur Ausführung einer Tätigkeit.
Beispiele sind Bedienungsanleitungen, Bauanleitungen, Kochrezepte
Definition
Ein Algorithmus ist eine präzise (d.h. in einer festgelegten Sprache
abgefasste) endliche Beschreibung eines allgemeinen Verfahrens unter
Verwendung ausführbarer elementarer Verarbeitungsschritte.
Primzahl-Test
Test, ob eine gegebene natürliche Zahl eine Primzahl ist
Definition: Eine Primzahl ist eine natürliche Zahl mit genau zwei
verschiedenen natürlichen Teilern, nämlich 1 und sich selbst.
Natürliche Zahlen (Bsp.)
1
2
31
1029
1031
Primzahl?
Ein Algorithmus
1
Sei x eine natürliche Zahl, b eine Variable vom Wert wahr oder falsch.
2
Initialisiere b mit wahr.
3
Falls x kleiner als 2, dann weise b false zu. Gehe zu 5.
Sonst
4
Sei i eine Variable von natürlicher Zahlen.
Initialisiere i mit 2.
Solange i kleiner als x ist, führe Schritte i und ii aus.
1
2
5
Falls x durch i teilbar ist, weise b false zu. Gehe zu 5.
Sonst erhöhe i um 1.
Falls b falsch ist, ist x keine Primzahl, sonst ist x eine Primzahl.
Ein Java-Programm: PrimeTest
p u b l i c c l a s s PrimeTest
{
public void isPrime ( int x)
{
boolean b = true ;
i f ( x <2)
{
b = false ;
} else {
int i = 2;
w h i l e ( i <x )
{
i f ( x%i ==0)
{
b = false ;
break ;
} e l s e { i = i + 1;}
}
}
i f (! b)
{
System . o u t . p r i n t l n ( x + ” i s n o t a p r i m e number . ” ) ;
} e l s e { System . o u t . p r i n t l n ( x + ” i s a p r i m e number . ” ) ; }
}
}
10
Bausteine der Programmiersprache Java
Typen, z.B.
int: natürliche Zahl
boolean: Wahrheitswert
Variablen, z.B., x, b und i
Konstanten, z.B., 1, 2, true und false
Operationen, z.B.
<: kleiner als, x < 2 und i < x
+: Plus, i + 1
%: Restberechnung, x%i
==: Vergleich, x%i == 0
Deklarationen, z.B., int : x, i und boolean : b
Anweisungen, z.B.
=: Zuweisung, b = true, b = false, i = 2 und i = i + 1
while: solang, while (i < x)
if-else: falls-sonst, if ((x%i) == 0) · · · else · · · , if (!b) · · · else · · ·
break: hier für gehe zu
System.out.println: hier für die Ausgabe des Ergebnisses
11
Binärsystem
Berechnung der binären Darstellung einer dezimalen Zahl
Dezimale Zahl
10
-10
123
-123
Binäre Darstellung (Bsp. 8-Bit)
Binärsystem
Berechnung der dezimalen Darstellung einer binären Zahl
Binäre Zahl (Bsp. 8-Bit)
00000000
00000001
00000010
01111111
11110000
Dezimale Darstellung
Übung
ueb1.pdf
14
Grundlegende Konzepte
der Programmiersprache Java
15
Inhalt
Syntax und Semantik
Programmiersprache Java
Primitive Typen in Java
Zeichenfolgen: String
Bibliotheken und API
Steuerungs-Anweisungen in Java
Syntax und Semantik
Syntax
Die Syntax gibt formale Regeln vor, welche Satzmuster gebildet werden
können.
Beispiel
Die Kinder spielen mit dem Ball. (syntaktisch korrekt)
Die Kinder spielen dem Ball mit. (syntaktisch falsch)
Semantik
Die Semantik legt die Bedeutung fest.
Beispiel
Die Kinder spielen mit dem Ball. (semantisch korrekt, sinnhaft)
Der Ball spielt mit den Kindern. (semantisch falsch, sinnlos)
Programmiersprache Java
Ausdrucksmittel zur Formulierung von Algorithmen
Kommunikation zwischen Menschen und Maschinen
verständlich für Menschen und verarbeitbar für Maschinen
Generationen
maschinenorientierte Sprachen (assembler)
prozedurale Sprachen (imperative Sprachen)
objektorientierte Sprachen
Java: eine objektorientierte Programmiersprache
18
Erstes Java-Programm
c l a s s HelloWorld {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
System . o u t . p r i n t l n ( ” H e l l o , World ” ) ;
}
}
Java-Programmierung mit BlueJ
Projekt
erstellen
Klasse
erzeugen
Programm
kompilieren
Editor
Compiler
HelloWorld.java
HelloWorld.class
programm
ausführen
JVM
"Hello, World"
Einige Java-Standardbegriffe
Klasse: HelloWorld
Hauptmethode: public static void main(String args[])
Anweisung: System.out.println(“Hello, World”)
Programme mit Parametern
class Hello {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
String t i t l e = args [ 0 ] ;
// d e r e r s t e P a r a m e t e r
S t r i n g nachname = a r g s [ 1 ] ;
// d e r z w e i t e P a r a m e t e r
S t r i n g vorname = a r g s [ 2 ] ;
// d e r d r i t t e P a r a m e t e r
System . o u t . p r i n t l n ( ” H e l l o , ” + t i t l e + ” ” +
vorname + ” ” + nachname ) ;
}
}
Ausführung: {“Mr.”, “Mustermann”, “Max”}
Übung: Ein BlueJ-Projekt für das Hello-Programm erstellen,
übersetzten und ausführen.
20
Datentypen in Java
Datentypen legen die zu bearbeitenden Informationseinheiten fest. Ein
Datentyp hat einen Wertebereich und einen dazugehörigen Satz an
Operationen.
Es gibt zwei Arten von Datentypen in Java: primitive Typen und
Referenztypen oder Klassen.
Java ist eine stark typisierte Programmiersprache.
Der Typ jeder Variable und jedes Ausdrucks ist
in der Übersetzungszeit bekannt.
Der Typ einer Variable beschränkt die Werte,
die die Variable speichern darf.
Der Typ eines Ausdrucks beschränkt den Wert,
den der Ausdruck produzieren darf.
Typen beschränken auch die Operationen und
deren Bedeutungen in Ausdrücken.
21
Primitive Datentypen
Die primitive Datentypen sind die in der Sprache “eingebauten”
Typen zur Speicherung von Werten
Numerische Typen für Ganzzahlen, z.B. int
Numerische Typen für Gleitkommazahlen, z.B. double
Zeichen-Datentyp: char
boolescher Datentyp: boolean
Beispiele primitiver Datentypen in Java
Datentyp
int
double
char
boolean
Werte (Bsp.)
3, 0, -24
345.7, 3.14
’a’, ’c’, ’1’
true, false
Operation (Bsp.)
+, -, *, /, <, >, ==
+, -, *, /, <, >, ==
<, >, ==
==, !=, &&, ||, !
Einige weitere Java-Standardbegriffe
Literale/Werte: 1234, 99.0f, “Hallo“
Variablen: a, b, c
Ausdruck: a + b
Deklaration: int a, b
Zuweisungen: a = 1234; b = 99
Deklaration mit Initialisierung: int c = a + b
23
Zweites Java-Programm
c l a s s BasicTypes {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
int a , b;
a = 1234;
b = 99;
int c = a + b;
System . o u t . p r i n t l n ( ” c = ” + c ) ;
}
}
24
Zeichenfolgen: String
String ist ein Beispiel-Referenztyp
Beispiel: “Hello, World”
Konkatenationsoperator “+” hängt Zeichenketten aneinander:
“Hello, “ + “Shi”, “c = “ + c
Gleichheit von Zeichenfolgen
“==” vergleicht die Referenzen zweier Zeichenfolgen
s1 = “1234”;
s2 = s1;
s1 == s2 ?
“equals(String s)” vergleicht die Inhalte zweier Zeichenfolgen
s1 = “1234”;
s3 = “”; s3 = s3 + “1234”;
s1 == s3 ?
s3.equals(s1) ?
Zeichenfolgen: String (Beispiel)
Der Operator == vergleicht nur Referenzen (Identität).
Die Methode equals vergleicht das Objekt (Gleichheit).
Beispiel:
c l a s s StringEq {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
S t r i n g a = ”So g e h t s ” ,
b = ” So ” ,
c = a;
b = b + ” gehts ” ;
System . o u t . p r i n t l n ( ”a , c == −> ” +
System . o u t . p r i n t l n ( ”a , b == −> ” +
System . o u t . p r i n t l n ( ”a , b e q u a l s −>
}
}
Welche Ausgaben liefert das Programm?
{
( a==c ) ) ;
( a==b ) ) ;
” + a . equals (b ));
API – Bibliotheken
API – Applications Programming Interface
Klassen, deren Attribute und Methoden primär dafür gedacht sind, in
anderen Programmen eingesetzt zu werden.
Web-Adresse: API Dokumentation unter
http://download.oracle.com/javase/
Java-APIs sind durch Pakete organisiert, z.B. “java.lang”, “java.io”
Beispiel-Klassen in java.lang und java.io
Klasse “PrintStream”
public void println(String x)
Klasse “Integer”
public static int parseInt(String s, int radix) throws NumberFormatException
Klasse “Math”
public static final double PI
Klasse “Object”
boolean equals(Object o)
Anwendungsbeispiele
System.out.println(“Hello, World”)
Integer.parseInt(args[0])
Double.parseDouble(args[0])
s3.equals(s1)
Math.PI
28
Steuerungs-Anweisungen in Java
Sequenzielle Ausführung
Die zeitliche Abfolge von Schritten
Beenden von Anweisungen durch “;”
Beispiel: Zubereitung einer Tasse grüner Tee
/∗ ∗
∗ A tea r e c ip e .
∗ @author Shi @ v e r s i o n 1.0
∗/
p u b l i c c l a s s GreenTea {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
S t r i n g step1 , step2 , step3 , step4 , r e c i p e ;
s t e p 1 = ” Koche Wasser ” ;
s t e p 2 = ” Gib e i n e n h a l b e n TL Tee i n e i n e T a s s e ” ;
s t e p 3 = ” Warte , b i s d a s Wasser a u f 80 Grad a b g e k u e h l t i s t ” ;
s t e p 4 = ” G i e s s e d a s Wasser i n d i e T a s s e ” ;
r e c i p e = s t e p 1+” ; \ n” + s t e p 2+” ; \ n” + s t e p 3+” ; \ n” + s t e p 4 ;
System . o u t . p r i n t l n ( r e c i p e ) ;
} }
29
Bedingte Ausführungen
Auswahl von Schritten aufgrund einer zu testenden Bedingung
Variante 1
Variante 2
if (condition) {
step(s)
}
if (condition) {
step1(s)
} else {
step2(s)
}
Flussdiagramme
ja
condition
nein
step1(s)
step(s)
Beispiele
y = x;
if (x<0) {
y = -x;
}
ja
if (x<0) {
y = -x;
} else {
y = x;
}
30
condition
nein
step2(s)
Schleifen: Wiederholung von Schritten aufgrund einer zu testenden
Bedingung
for-Schleifen
Syntax
for (init; condition; update) {
step(s)
}
Begriffe
Initialisierung von Schleifenvariablen
Boolscher Ausdruck als Bedingung, oder Schleifenabbruchbedingung
Inkrementierung von Schleifenvariablen
Schleifenrumpf
Beispiel
z = 0;
for (i=0; i<10; i++) {
z = z + i;
}
31
while-Schleifen
Syntax
while (condition) {
step(s)
}
Beispiel
z = 0; i = 0;
while (i<10) {
z = z + i; i = i + 1;
}
Flussdiagramm
condition
ja
step(s)
32
nein
do-while-Schleifen
Syntax
do {
step(s)
} while (condition);
Beispiel
z = 0; i = 0;
do {
z = z + i; i = i + 1;
} while (i<10);
Flussdiagramm
step(s)
ja
condition
nein
Diskussion
Verschachtelte if-Anweisungen
if (cond1) if (cond2) step1 else step2
if (cond1) {if (cond2) step1} else step2
Was ist der Unterschied zwischen ++i, i++ und i = i+1?
Gibt es Fälle, in denen eine for-Schleife statt einer while-Schleife
(beziehungsweise umgekehrt) verwendet werden muss?
Was ist der Unterschied zwischen while- und do-while-Schleife?
34
Übung
ueb2.pdf
35
Java Programme
36
Inhalt
Einfache Java-Programme
Attribute
Konstruktoren
Methoden
Ganzzahlige Wurzelberechnung
√
z = x ⇒ z · z ≤ x < (z + 1) · (z + 1),
wobei x ∈ N
Ein Lösungsansatz
Sei x eine positive Zahl vom Typ Integer und z eine Variable vom Typ
Integer.
Initialisiere z mit 0.
Solange (z + 1) · (z + 1) ≤ x ist, addiere eine 1 zu z.
z ist die Wurzel von x.
38
Ein Programm
/∗ ∗
∗ The c l a s s c o n t a i n s a method w h i c h computes
∗ t h e r o o t o f a p o s i t i v e i n t e g e r number .
∗ @author Shi
∗/
p u b l i c c l a s s Root {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
int x ;
x = Integer . parseInt ( args [ 0 ] ) ;
int z = 0;
i f ( x <0) System . o u t . p r i n t l n ( ” E r r o r ! ” ) ;
else {
w h i l e ( ( z +1)∗( z+1)<=x ) {
z=z +1;
}
System . o u t . p r i n t l n ( ” D i e Wurzel von ”
+ x + ” ist ” + z + ”.”);
}
}
}
Fragen
Was macht die while-Anweisung?
Was ist der Unterschied von “+” in x + y und x +00 +00 + y ?
Wie läuft die Berechnung ab?
Wie oft wird die Zuweisung z = z + 1 durchgeführt?
Ist das Programm für eine beliebige Zahl x korrekt?
40
Attribute
Eine Klasse mit zwei Attributen
class ArtikelPreis1 {
S t r i n g a r t i k e l ; // Name d e s A r t i k e l s
i n t cent ;
// P r e i s i n Euro−Cent
}
Diskussion
Die Klasse ArtikelPreis1 enthält Attribute artikel und cent
Mit new() kann Objekte der Klasse erzeugt werden.
41
Konstruktoren
Konstruktoren dienen der Erzeugung von Objekten
class ArtikelPreis2 {
A r t i k e l P r e i s 2 ( S t r i n g a , i n t c ) { // K o n s t r u k t o r
artikel = a;
cent = c ;
}
S t r i n g a r t i k e l ; // Name d e s A r t i k e l s
i n t cent ;
// P r e i s i n Euro−Cent
}
Diskussion
Konstruktor: “ArtikelPreis2(String a, int c)”
Erzeugung eines Objekts mit konkreten Werten für die Attribute, z.B.
ArtikelPreis2 apfel = new ArtikelPreis2(“Apfel”, 200)
Objekt-Zustände
42
Methoden
Methoden dienen der Verarbeitung von Attributen
class ArtikelPreis3 {
A r t i k e l P r e i s 3 ( S t r i n g a , i n t c ) { // K o n s t r u k t o r
artikel = a;
cent = c ; }
S t r i n g a r t i k e l ; // Name d e s A r t i k e l s
i n t cent ;
// P r e i s i n Euro−Cent
d o u b l e umrechnen ( d o u b l e k u r s ) {
return cent ∗ kurs ; }
b o o l e a n v e r g l e i c h e n ( A r t i k e l P r e i s 3 ap ) {
i f ( a r t i k e l . e q u a l s ( ap . a r t i k e l ) && c e n t==ap . c e n t )
{ return ( true );
} else { return ( false );} }
void ausgeben () {
System . o u t . p r i n t l n ( a r t i k e l + ” : ” + c e n t ) ; }
}
Diskussion
Methode hat direkten Zugriff auf Attribute
Objekt-Referenzen
Verwendung von Klassen
public c l a s s Einkaufen {
p r i v a t e A r t i k e l P r e i s 3 [ ] warenkorb ;
p r i v a t e i n t count ;
public Einkaufen () {
c o u n t = 0 ; w a r e n k o r b = new A r t i k e l P r e i s 3 [ 1 0 ] ;
}
public void einkaufen ( ArtikelPreis3 a) {
warenkorb [ count ] = a ; count = count + 1 ;
}
p ub l ic double preisBerechnen () {
d o u b l e summe = 0 . 0 ;
f o r ( i n t i =0; i <c o u n t ; i ++) {
summe += w a r e n k o r b [ i ] . umrechnen ( 0 . 0 1 ) ; }
r e t u r n summe ;
}
p u b l i c void printWarenkorb () {
f o r ( i n t i =0; i <c o u n t ; i ++) {
warenkorb [ i ] . ausgeben ( ) ; }
}
}
44
Übung
ueb3.pdf
45
Herunterladen