Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich."—  Präsentation transkript:

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

2 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

3 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

4 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 4 Hamster-Modell / Grundlagen

5 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

6 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:

7 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

8 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

9 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 9 Hamster-Modell / Anweisungen / Programm

10 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 10 Hamster-Modell / Anweisungen / Kommentare

11 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: void main() { // nehme erstes Korn vor(); vor(); nimm(); /* nehme zweites Korn */ linksUm(); vor(); vor(); nimm(); }

12 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 12 Hamster-Modell / Anweisungen / Beispiel Aufgabe: 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(); } vorhernachher

13 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(); } rechtsUm();

14 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 14 Hamster-Modell / Prozeduren / Definition Prozedurdefinition: Vereinbarung eines neuen Befehls

15 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 15 Hamster-Modell / Prozeduren / Aufruf Prozeduraufruf: Aufruf eines selbstdefinierten Befehls

16 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 16 Hamster-Modell / Prozeduren / Programme Programm (mit Prozeduren):

17 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(); } void rechtsUm() { kehrt(); linksUm(); } void kehrt() { linksUm(); linksUm(); }

18 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

19 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 19 Hamster-Modell / Prozeduren / Beispiel Aufgabe: 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(); }

20 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?

21 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 21 Hamster-Modell / Auswahl / Boolesche Ausdrücke

22 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 22 Hamster-Modell / Auswahl / Blockanweisung

23 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 23 Hamster-Modell / Auswahl / Leeranweisung

24 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 24 Hamster-Modell / Auswahl / bedingte Anweisung

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

26 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 26 Hamster-Modell / Auswahl / Alternativanweisung if (vornFrei()) { vor(); } else { linksUm(); } if (maulLeer()) ; else gib(); linksUm(); if (vornFrei()) vor(); else if (kornDa()) nimm(); else if (!maulLeer()) gib(); else linksUm();

27 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 27 Hamster-Modell / Auswahl / Beispiel Aufgabe: 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(); linksUm(); }

28 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(); } void main() { vor(); vor(); } Allgemeingültig: solange vornFrei(): vor();

29 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 29 Hamster-Modell / Wiederholung / while-Schleife

30 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(); } void laufeBisZurNaechstenWandUndSammle() { sammle(); while (vornFrei()) { vor(); sammle(); } void sammle() { while (kornDa()) nimm(); }

31 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 31 Hamster-Modell / Wiederholung / do-Schleife void main() { do { nimm(); } while (kornDa()); } void main() { do { vor(); if (!maulLeer()) gib(); } while (vornFrei()); }

32 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 32 Hamster-Modell / Wiederholung / Endlosschleife void main() { while (vornFrei()) { linksUm(); }

33 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 33 Hamster-Modell / Wiederholung / Beispiel Aufgabe: 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(); }

34 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()...

35 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 35 Hamster-Modell / Test-Funktionen / return return !kornDa() && vornFrei();

36 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 36 Hamster-Modell / Test-Funktionen / Definition Zusatzbedingung: In jedem möglichen Weg durch den Rumpf muss eine boolesche return-Anweisung stehen!

37 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 37 Hamster-Modell / Test-Funktionen / Aufruf

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

39 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 ; }

40 Programmierkurs Java Vorlesung 3 Dietrich Boles Seite 40 Hamster-Modell / Testfunktionen / Beispiel Aufgabe: 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(); }

41 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 DokumentationDokumentation Problem Programm Implementierung AnalyseEntwurf Test

42 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.

43 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 Blickrichtung West vor einem regelmäßigen Berg unbekannter Höhe (ohne Überhänge). Er muss nicht unbedingt direkt vor dem Berg stehen. Die Stufen des Berges sind jeweils eine Mauer hoch. Der Hamster habe mindestens so viele Körner im Maul, wie Stufen existieren. Auf dem Territorium befinden sich keine Körner. Außer den Mauern des Berges befinden sich keine Mauern im Territorium. Der Hamster soll den Berg erklimmen und auf dem Gipfel anhalten. Auf jeder Stufe - und nur dort! - soll er ein Korn ablegen. Auf dem Weg zum Gipfel muss er immer in Berührung zur Wand bleiben.

44 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

45 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 erklimmen void main() { laufeZumBerg(); erklimmeDenBerg(); } // der Hamster soll bis zum Berg laufen void laufeZumBerg() {} // der Hamster soll den Berg erklimmen void erklimmeDenBerg() {}

46 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 laufen void laufeZumBerg() { while (vornFrei()) { vor(); } gib(); } Teilproblem 2: Der Hamster soll den Berg erklimmen. // der Hamster soll den Berg erklimmen void erklimmeDenBerg() { do { erklimmeEineStufe(); } while (!gipfelErreicht()); } void erklimmeEineStufe() {} boolean gipfelErreicht() {} Teilproblem 2.1 Teilproblem 2.2

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

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

49 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

50 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


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

Ähnliche Präsentationen


Google-Anzeigen