50
Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich Boles

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Embed Size (px)

Citation preview

Page 1: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1

Programmierkurs Java

Vorlesung

am FB Informatik

der Universität Oldenburg

Vorlesung 3

Dietrich Boles

Page 2: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 2

Gliederung von Vorlesung 3

Das Hamster-Modell

– Motivation

– Grundlagen

– Anweisungen und Programme

– Prozeduren

– Auswahlanweisungen

– Wiederholungsanweisungen

– Boolesche Funktionen

– Programmentwurf

Page 3: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 3

Hamster-Modell / Motivation

• Spielerisches Erlernen wichtiger Programmierkonzepte

• Steuerung eines virtuellen Hamsters durch eine virtuelle Landschaft

• Erlernen imperativer Sprachkonstrukte

• inkrementelle Erweiterung des „Sprachschatzes“

• Syntax: an Java angelehnt

• Vorbilder: LOGO, Karel the Robot

• „Learning-by-Doing“

• Viele Übungsaufgaben

Page 4: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 4

Hamster-Modell / Grundlagen

############

# # # # # # # # # # # ############# # # # # # # # # # #

#

# # # #

##

###

###

##

#o

o

o

o o o

oo oo o

oo o

o o oo o o

oo

>Symbol Bedeutung

> Hamster (Blickrichtung Ost)

v Hamster (Blickrichtung Süd)

< Hamster (Blickrichtung West)

^ Hamster (Blickrichtung Nord)

# blockierte Kachel

o Kachel mit Körnern

Page 5: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 5

Hamster-Modell / Grundlagen

Hamsteraufgaben:Gegeben sei die folgende Landschaft. Der Hamster soll zwei beliebige Körner fressen.

Landschaft:

Lösung:ein Hamsterprogramm

#

#

# # # # # # # # # # #

# # # # # # # # # # #

# # # # # # # #

# # # # # # # #

######

######

v#

o

oo o

#

##

# # # # ##

## # # # #

####

Page 6: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 6

Hamster-Modell / Grundlagen

• Lexikalik: 16-Bit-Zeichensatz Unicode

• Trennung von Token durch Trennzeichen (Leerzeichen, Tabulatoren, Zeilenvorschubzeichen, Seitenvorschubzeichen)

• Bezeichner:– Beginn mit Unterstrich („_“) oder Dollar („$“) oder Buchstaben

– weitere Buchstaben, Unterstriche oder Ziffern

– beliebig lang

– Unterscheidung von Groß- und Kleinbuchstaben

• Schlüsselwörter:abstractbooleanbreakbytecasecatchcharclassconstcontinuedefaultdo

doubleelseextendsfinalfinallyfloatforgotoifimplementsimportinstanceof

intinterfacelongnativenewnullpackageprivateprotectedpublicreturnshort

staticsuperswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile

Page 7: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 7

Hamster-Modell / Anweisungen / Befehle

vier Grundbefehle:

vor(); ein Feld nach vorne springen

linksUm(); 90 Grad nach links schauen

nimm(); ein Korn von der aktuellen Kachel aufnehmen

gib(); ein Korn aus dem Maul auf der aktuellen Kachel ablegen

)vor

linksUm

nimm

gib

Grundbefehl( ;

Page 8: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 8

Hamster-Modell / Anweisungen / Befehle

Laufzeitfehler:

vor(); ... und Feld vor dem Hamster ist blockiert

nimm(); ... und kein Korn auf der aktuellen Kachel vorhanden

gib(); ... und kein Korn im Maul des Hamsters

######

# # # # # # # # # # # ####### # # # # # # # # # #

<#

#

##ooo

ooo

ooo

#

######

# # # # # # # # # # # ####### # # # # # # # # # #

<#

#

##ooo

ooooo

#

>

######

# # # # # # # # # # # ####### # # # # # # # # # #

##

##ooo

ooo

ooo

#>

######

# # # # # # # # # # # ####### # # # # # # # # # #

##

##ooo

ooo

ooo

#

vor Befehl vor(); nach Befehl vor();

vor Befehl vor(); nach Befehl vor(); Laufzeitfehler!

Page 9: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 9

Hamster-Modell / Anweisungen / Programm

Anweisung (1)

Anweisung

Grundbefehl

Anweisungssequenz

Programm (1)

)void main (Anweisungs-

sequenz{ }

Page 10: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 10

Hamster-Modell / Anweisungen / Kommentare

Kommentar

BereichskommentarZeichen/* */

Zeilenkommentar

Zeilenkommentar

Bereichskommentar

ZeilenendezeichenZeichen//

Page 11: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 11

Hamster-Modell / Anweisungen / Beispiel

Aufgabe: Landschaft:Gegeben sei das folgende

Hamster-Territorium.

Der Hamster soll zwei Körner

einsammeln.

Programm:

#

#

# # # # # # # # # # #

# # # # # # # # # # #

# # # # # # # #

# # # # # # # #

######

######

v #o

ooo

#

##

# # # # ##

## # # # #

####

# # # # ## # # o o o o o

o o

##

void main(){ // nehme erstes Korn vor(); vor(); nimm();

/* nehme zweites Korn */ linksUm(); vor(); vor(); nimm();}

Page 12: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 12

Hamster-Modell / Anweisungen / BeispielAufgabe: Landschaft:

Gegeben sei das folgende Territorium.

Der Hamster habe vier Körner im Maul.

Er soll in jeder Ecke eins ablegen und

in seine Ausgangssituation zurückkehren.

Programm:

void main() { // begib dich an den Rand vor(); linksUm(); // laufe in die rechte untere Ecke vor(); vor(); vor(); vor(); gib(); linksUm(); // laufe in die rechte obere Ecke vor(); vor(); vor(); gib(); linksUm(); // laufe in die linke obere Ecke vor(); vor(); vor(); vor(); vor(); gib(); linksUm(); // laufe in die linke untere Ecke vor(); vor(); vor(); gib(); linksUm(); // begib dich in die Ausgangsposition zurück vor(); linksUm(); vor(); linksUm(); linksUm();}

#

#

# # # # # # #

# # # # # # #

####

####

vo o

###

#

#

# # # # # # #

# # # # # # #

####

####

o o###

o

o o

o

v

vorher nachher

Page 13: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 13

Hamster-Modell / Prozeduren / Motivation

Motivation:

Der Hamster soll zwei Körner

einsammeln.

void main() { vor(); vor(); nimm(); linksUm(); linksUm(); linksUm(); vor(); vor(); linksUm(); linksUm(); linksUm(); vor(); vor(); nimm();}

#

# # # # # # # # # # #

# # # # # # # # # # #

# # # # # # #

# # # # # # # #

########

########

#o

o

o o#

##

##

## # #

#####

>

# # # # #

o o o

oo

oo

oo

oo

oo

oooo

###

###

rechtsUm();

rechtsUm();

Page 14: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 14

Hamster-Modell / Prozeduren / Definition

Prozedurdefinition

ProzedurnameBezeichner

ProzedurkopfProzedurname (

Prozedurkopf

Prozedurrumpf Anweisungs-sequenz

{ }

Prozedurrumpf

)void

Prozedurdefinition: Vereinbarung eines neuen Befehls

Page 15: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 15

Hamster-Modell / Prozeduren / Aufruf

Grundbefehl

Prozeduraufruf( ) ;

Anweisung (2)

Prozeduraufruf

Prozedurname

Prozeduraufruf: Aufruf eines selbstdefinierten Befehls

Page 16: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 16

Hamster-Modell / Prozeduren / Programme

Programm (mit Prozeduren):

DefinitionenMainfunktionDefinitionen

Prozedur-definition

Programm (2)

Definitionen (1)

)void main Prozedurrumpf(Mainfunktion

Page 17: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 17

Hamster-Modell / Prozeduren / Beispiel

Lösung des Motivationsproblems:

Der Hamster soll zwei Körner

einsammeln.

void main() { vor(); vor(); nimm(); rechtsUm(); vor(); vor(); rechtsUm(); vor(); vor(); nimm();}

#

# # # # # # # # # # #

# # # # # # # # # # #

# # # # # # #

# # # # # # # #

########

########

#o

o

o o#

##

##

## # #

#####

>

# # # # #

o o o

oo

oo

oo

oo

oo

oooo

###

###

void rechtsUm() { kehrt(); linksUm();}

void kehrt() { linksUm(); linksUm();}

Page 18: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 18

Hamster-Modell / Prozeduren / Vorteile

Vorteile von Prozeduren:

– bessere Übersichtlichkeit von Programmen

– separate Lösung von Teilproblemen

– Platzeinsparung

– einfachere Fehlerbeseitigung

– Flexibilität

– Wiederverwendbarkeit

Page 19: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 19

Hamster-Modell / Prozeduren / BeispielAufgabe: Landschaft:

Gegeben sei das folgende Territorium.

Der Hamster soll den Berg erklimmen.

Programm:

void main() { laufeZumBerg(); erklimmeErsteStufe(); erklimmeZweiteStufe(); erklimmeDritteStufe(); erklimmeGipfel();}

void laufeZumBerg() { vor();}

void erklimmeErsteStufe() { erklimmeStufe();}

void erklimmeZweiteStufe() { erklimmeStufe();}void erklimmeDritteStufe() { erklimmeStufe();}void erklimmeGipfel() { erklimmeStufe();}void erklimmeStufe() { linksUm(); vor(); linksUm();linksUm();linksUm(); vor();}

########

# # # # # # # # # # # ######### # # # # # # # # # #

> # # # # # # ## # # # ## # ##

Page 20: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 20

Hamster-Modell / Auswahl / Test-Befehle

drei Test-Befehle:

vornFrei() ist das Feld vor dem Hamster blockiert?

maulLeer() ist das Maul des Hamsters leer?

kornDa() liegt ein Korn auf der aktuellen Kachel?

)Testbefehl

(vornFrei

maulLeer

kornDa

Page 21: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 21

Hamster-Modell / Auswahl / Boolesche Ausdrücke

( )

booleschesLiteral

boolescher Ausdruck

!

&&

||

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck

Testbefehl

false

true

boolesches Literal

boolescher Ausdruck

Page 22: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 22

Hamster-Modell / Auswahl / Blockanweisung

Anweisung (3)

Anweisungs-sequenz

{ }Blockanweisung

Grundbefehl

Prozeduraufruf

Blockanweisung

Page 23: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 23

Hamster-Modell / Auswahl / Leeranweisung

;Leer anweisung

Anweisung (4)Grundbefehl

Prozeduraufruf

Blockanweisung

Leeranweisung

Page 24: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 24

Hamster-Modell / Auswahl / bedingte Anweisung

( )

bedingte Anweisung

Auswahlanweisung (1)

boolescher Ausdruck

Anweisungbedingte Anweisung

Anweisung (5)Grundbefehl

Prozeduraufruf

Blockanweisung

Leeranweisung

Auswahl-anweisung

if

Page 25: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 25

Hamster-Modell / Auswahl / bedingte Anweisung

Beispiele:

void sicheresVor() { if (vornFrei()) { vor(); }}

void sicheresGib() { if (!maulLeer()) { gib(); }}

void sicheresNimm() { if (kornDa()) nimm();}

if (kornDa() && vornFrei()){ nimm(); vor();}

if (kornDa()) if (vornFrei()) { nimm(); vor(); }

if (kornDa()) nimm(); vor();

Page 26: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 26

Hamster-Modell / Auswahl / Alternativanweisung

Alternativanweisung

bedingte AweisungAuswahlanweisung (2)

else Anweisungbedingte AweisungAlternativanweisung

if (vornFrei()) { vor();} else { linksUm();}

if (maulLeer()) ;else gib();linksUm();

if (vornFrei()) vor();else if (kornDa()) nimm();else if (!maulLeer()) gib();else linksUm();

Page 27: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 27

Hamster-Modell / Auswahl / BeispielAufgabe: Landschaft:

Gegeben sei das folgende Territorium.

Solange möglich soll der Hamster

in jeder Ecke ein Korn ablegen.

Programm:

void main() { if (!maulLeer()) { gib(); if (!maulLeer()) { laufeInNaechsteEcke(); gib(); if (!maulLeer()) { laufeInNaechsteEcke(); gib(); if (!maulLeer()) { laufeInNaechsteEcke(); gib();} } } } }

# # # # # # #

# # # # # #

#####

######>

void laufeInNaechsteEcke() { vor(); vor(); vor(); vor(); linksUm();}

Page 28: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 28

Hamster-Modell / Wiederholung / Motivation

Motivation: Der Hamster soll bis zur nächsten Wand laufen.

void main() { vor(); vor();}

# # # # # # #

# # # # # #

#####

######

>

oo

o

### o#

# # # # # # #

# # # # # #

#####

######

oo

o

##

#o #

###

^#

void main() { vor(); vor(); vor(); vor();}

Allgemeingültig: solange vornFrei(): vor();

Page 29: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 29

Hamster-Modell / Wiederholung / while-Schleife

Grundbefehl

Prozeduraufruf

Blockanweisung

Leeranweisung

Auswahl-anweisung

Anweisung (6)

Wiederholungs-anweisung

while-Anweisung( )

boolescher Ausdruck

Anweisungwhile ( )boolescher Ausdruck

Anweisungwhile

while- Anweisung

Wiederholungsanweisung

Page 30: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 30

Hamster-Modell / Wiederholung / Beispiele

Aufgabe: Landschaft beliebig! Der Hamster soll bis zur nächsten Wand laufen.

void main() { while (vornFrei()) { vor(); }}

# # # # # # #

# # # # # #

#####

######

>

oo

o

### o#

# # # # # # #

# # # # # #

#####

######

oo

o

##

#o #

###

^#

void laufeBisZurNaechstenWandUndSammle() { sammle(); while (vornFrei()) { vor(); sammle(); }}void sammle() { while (kornDa()) nimm();}

Page 31: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 31

Hamster-Modell / Wiederholung / do-Schleife

( )

Wiederholungsanweisung (2)

boolescher Ausdruck

do - Anweisung

whiledo ;

while-Anweisung

do-Anweisung

Block-anweisung

void main() { do { nimm(); } while (kornDa());}

void main() { do { vor(); if (!maulLeer()) gib(); } while (vornFrei());}

Page 32: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 32

Hamster-Modell / Wiederholung / Endlosschleife

void main() { while (vornFrei()) { linksUm(); }}

# # # # # #

# # # # #

#####

######

>

o

oo

oo

#

#

##

#

Page 33: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 33

Hamster-Modell / Wiederholung / BeispielAufgabe: Typische Landschaften:Der Hamster steht vor einem

regelmäßigen Berg unbekannter

Höhe. Er soll den Gipfel erklimmen.

Programm:

void main() { laufeZumBerg(); erklimmeGipfel();}void laufeZumBerg() { while (vornFrei()) vor();}void erklimmeGipfel() { do { erklimmeEineStufe(); } while (!vornFrei());}

#

#

# # # # # # # # # # #

# # # # # # # # # # #

# #

# #

######

###### > #

####### # # # #

# # ##

#

#

# # # # # # # # # # #

# # # # # # # # # # #

# #

# #

######

###### > #

## #

void erklimmeEineStufe() { linksUm(); vor(); rechtsUm(); vor();}void rechtsUm() { linksUm(); linksUm(); linksUm();}

Page 34: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 34

Hamster-Modell / Test-Funktionen / Motivation

Prozeduren: Definition neuer Befehle

Test-Funktionen: Definition neuer Test-Befehle

mauerDa()

linksFrei()

rechtsFrei()

fuenfKoernerDa()

...

Page 35: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 35

Hamster-Modell / Test-Funktionen / return

;boolescher Ausdruck

Boolesche return-Anweisung return

Grundbefehl

Prozeduraufruf

Blockanweisung

Leeranweisung

Auswahl-anweisung

Anweisung (7)

Wiederholungs-anweisung

booleschereturn Anweisung

return !kornDa() && vornFrei();

Page 36: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 36

Hamster-Modell / Test-Funktionen / Definition

boolescherFunktionskopf

boolescherFunktionsrumpf

boolesche Funktionsdefinition

( )booleanboolescher

FunktionsnameboolescherFunktionskopf

Bezeichnerboolescher Funktionsname

Anweisung{ }boolescherFunktionsrumpf

Prozedur-definition

Definitionen (2)

boolescheFunktions-definition

Zusatzbedingung: In jedem möglichen Weg durch den Rumpfmuss eine boolesche return-Anweisung stehen!

Page 37: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 37

Hamster-Modell / Test-Funktionen / Aufruf

( )boolescher

FunktionsnameboolescherFunktionsaufruf

( )

booleschesLiteral

boolescher Ausdruck

!

&&

||

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck

boolescher Ausdruck (2)

boolescherFunktionsaufruf

Testbefehl

boolescher Ausdruck

Page 38: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 38

Hamster-Modell / Test-Funktionen / Beispiele

boolean mauerDa() { return !vornFrei();}

boolean linksFrei() { linksUm(); if (vornFrei()) { rechtsUm(); return true; } else { rechtsUm(); return false; }}

void main() { while (!mauerDa() && !linksFrei()) { vor(); } if (linksFrei()) { linksUm(); vor(); }}

void rechtsUm() { linksUm(); linksUm(); linksUm();}

Page 39: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 39

Hamster-Modell / Test-Funktionen / Seiteneffekte

boolean linksFrei() { linksUm(); return vornFrei();}

void main() { if (linksFrei()) ; if (!linksFrei()) ;}

void main() { if (linksFrei()) ; else ;}

# # # # #### # # # #

##

#>o

o

^

# # # # #### # # # #

##

#oo

<

# # # # #### # # # #

##

#oo

Page 40: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 40

Hamster-Modell / Testfunktionen / BeispielAufgabe: Typische Landschaft:Der Hamster (mit mindestens einem Korn im Maul)

soll entlang der Wand laufen, bis er zur Ausgangsposition

zurückgekehrt ist.

Programm:void main() { gib(); // Markierung vor(); while (!kornDa()) { while (vornFrei() && !rechtsFrei() && !kornDa()) { vor(); } if (!kornDa()) { if (rechtsFrei()) { rechtsUm(); vor(); } else { linksUm()} } } }

boolean rechtsFrei() { rechtsUm(); if (vornFrei()) { linksUm(); return true; } else { linksUm(); return false; }}void rechtsUm() { linksUm(); linksUm(); linksUm();}

#

#

# # # # # # # # # # #

# # # # # # # # # # #

# #

# #

######

###### >

##

# #

###

##

###

##

#

#

#

##

#

Page 41: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 41

Hamster-Modell / Programmentwurf

Analyse:

exakte Formulierung der

Aufgabe

Entwurf:

Entwicklung eines

Algorithmus

Implementierung:

Codierung;

Eingabe in den Rechner;

Compilation

Test:

Verifikation der Korrektheit

Dokumentation:

Nachlass für andere Personen

Dokumentation

Problem

Programm

Implementierung

Analyse

Entwurf

Test

Page 42: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 42

Hamster-Modell / Programm-Entwurf / Problem

Der Hamster steht vor einem Berg unbekannter Höhe. Er soll den Gipfel erklimmen und auf dem Gipfel anhalten. Auf dem Weg zum Gipfel soll er auf jeder Stufe genau ein Korn ablegen.

# # # # # # # #> # # # # #

# # ##

# # # # # # # ## # # # ## # ##

# # # # # # # #

>

# # # # ## # ##

(a) zu Anfang (a) zwischendurch (a) am Ende

^o o

oo

# # # # # # # #> #

# # # # # # # ##

# # # # # # # #

>#o o

(b) zu Anfang (b) zwischendurch (b) am Ende

# # # # # # # ##

# # # # # # # ##

# # # # # # # #

>

#^o o

(c) zu Anfang (d) zwischendurch (e) am Ende

^ ######

## # # #

# o

Page 43: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 43

Hamster-Modell / Programm-Entwurf / Analyse

• Anfangsgrößen / Eingabewerte– Position des Hamsters

– Blickrichtung des Hamsters

– Anzahl Körner im Maul des Hamsters

– Körner im Territorium

– Mauern im Territorium

• Endgrößen / Ausgabewerte– Position des Hamsters

– Blickrichtung des Hamsters

– Anzahl Körner im Maul des Hamsters

– Körner im Territorium

• Constraints bzgl. des Lösungsweges

Präzisierung der Aufgabe:

Der Hamster steht mit BlickrichtungWest vor einem regelmäßigen Bergunbekannter Höhe (ohne Überhänge).Er muss nicht unbedingt direkt vor demBerg stehen. Die Stufen des Bergessind jeweils eine Mauer hoch. Der Hamster habe mindestens so viele Körnerim Maul, wie Stufen existieren. Auf demTerritorium befinden sich keine Körner.Außer den Mauern des Berges befindensich keine Mauern im Territorium.Der Hamster soll den Berg erklimmenund auf dem Gipfel anhalten. Auf jederStufe - und nur dort! - soll er ein Kornablegen. Auf dem Weg zum Gipfel musser immer in Berührung zur Wand bleiben.

Page 44: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 44

Hamster-Modell / Programm-Entwurf / Entwurf

• Verfahren: Schrittweise Verfeinerung / Top-Down-Entwurf

• Ziel: Komplexitätsreduktion

• Prinzip:

– Gesamtproblem zu komplex => Aufteilung in einfachere Teilprobleme

– Lösen der Teilprobleme:

• Teilproblem zu komplex => Aufteilung in (noch) einfachere Teilprobleme

• ...

• Zusammensetzung der Lösungen der Teilprobleme zur Lösung des (übergeordneten) Teilproblems

– Zusammensetzung der Lösungen der Teilprobleme zur Lösung des Gesamtproblems

• Vergleich: Puzzlen

Page 45: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 45

Hamster-Modell / Programm-Entwurf / Entwurf

Gesamtproblem:Der Hamster soll bis zum Berg laufen und dann den Berg erklimmen.

Teilprobleme:• Der Hamster soll bis zum Berg laufen.• Der Hamster soll den Berg erklimmen.

// der Hamster soll bis zum Berg laufen und dann den// Berg erklimmenvoid main() { laufeZumBerg(); erklimmeDenBerg();}

// der Hamster soll bis zum Berg laufenvoid laufeZumBerg() {}

// der Hamster soll den Berg erklimmenvoid erklimmeDenBerg() {}

Page 46: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 46

Hamster-Modell / Programm-Entwurf / Entwurf

Teilproblem 1: Der Hamster soll bis zum Berg laufen.

// der Hamster soll bis zum Berg laufenvoid laufeZumBerg() { while (vornFrei()) { vor(); } gib();}

Teilproblem 2: Der Hamster soll den Berg erklimmen.

// der Hamster soll den Berg erklimmenvoid erklimmeDenBerg() { do { erklimmeEineStufe(); } while (!gipfelErreicht());}

void erklimmeEineStufe() {}boolean gipfelErreicht() {}

Teilproblem 2.1Teilproblem 2.2

Page 47: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 47

Hamster-Modell / Programm-Entwurf / Entwurf

Teilproblem 2.1: Der Hamster soll eine Stufe erklimmen.

void erklimmeEineStufe() { linksUm(); vor(); rechtsUm(); vor(); gib();}

void rechtsUm() { linksUm(); linksUm(); linksUm();}

Teilproblem 2.2: Ist der Gipfel erreicht?

boolean gipfelErreicht() { return vornFrei();}

Page 48: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 48

Hamster-Modell / Programm-Entwurf / Implement.

• Codierung in die Entwurfsphase integriert

• Restaufgaben:– Eingabe des Programms in den Rechner

– Compilation

• Anmerkungen / Hinweise:– kein Spaghetti-Code!

– Entwurf mit Bleistift und Papier!

– Auf übersichtliche Strukturierung achten!

– Kommentare verwenden!

– Prozeduren / Funktionen definieren!

– Aussagekräftige Bezeichner wählen!

void main() { while (vornFrei()) vor(); gib(); while (!vornFrei()) { linksUm(); vor(); r(); vor(); gib(); }} void r() { linksUm();linksUm();linksUm();}

Page 49: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 49

Hamster-Modell / Programm-Entwurf / Test

• Verifikation der Korrektheit und Vollständigkeit

• Konstruktion einer Testmenge:– disjunkte Zerlegung der Menge der zulässigen Anfangsgrößen in typische Klassen

– Vertreter jeder Klasse wählen

– Grenzwerte beachten

– erwartetes Ergebnis notieren

– Erfahrung und Intuition notwendig!

• Ausführung des Programms mit allen Elementen der Testmenge:– Ergebnisse (Lösungsweg/Endgrößen) überprüfen

– Testläufe/Ergebnisse protokollieren

# # # # # # # #> # # # # #

# # ##

(a) zu Anfang

# # # # # # # #

>

# # # # ## # ##

(a) am Ende

ooo

# # # # # # # #> #

(b) zu Anfang

# # # # # # # #

>

#o

(b) am Ende

# # # # # # # #> #

(c) zu Anfang

# # # # # # # #

>#o

(c) am Ende

### # #

#o

Page 50: Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich

Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 50

Hamster-Modell / Programm-Entwurf / Dokument.

Zur Dokumentation gehören:

– eine exakte Problemstellung

– eine verständliche Beschreibung des entwickelten Algorithmus

– der Programmcode

– die gewählte Testmenge mit Protokollen der durchgeführten Testläufe

– eine Beschreibung von aufgetretenen Problemen

– alternative Lösungsansätze