Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

der Universität Oldenburg

Ähnliche Präsentationen


Präsentation zum Thema: "der Universität Oldenburg"—  Präsentation transkript:

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

2 Gliederung von Vorlesung 3
Das Hamster-Modell Motivation Grundlagen Anweisungen und Programme Prozeduren Auswahlanweisungen Wiederholungsanweisungen Boolesche Funktionen Programmentwurf

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 Hamster-Modell / Grundlagen

5 Hamster-Modell / Grundlagen
Hamsteraufgaben: Gegeben sei die folgende Landschaft. Der Hamster soll zwei beliebige Körner fressen. Landschaft: Lösung: ein Hamsterprogramm

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 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 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 Hamster-Modell / Anweisungen / Programm

10 Hamster-Modell / Anweisungen / Kommentare

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 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: vorher nachher 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 // begib dich in die Ausgangsposition zurück vor(); linksUm(); vor(); linksUm(); linksUm(); }

13 Hamster-Modell / Prozeduren / Motivation
Der Hamster soll zwei Körner einsammeln. void main() { vor(); vor(); nimm(); linksUm(); linksUm(); linksUm(); } rechtsUm(); rechtsUm();

14 Hamster-Modell / Prozeduren / Definition
Prozedurdefinition: Vereinbarung eines neuen Befehls

15 Hamster-Modell / Prozeduren / Aufruf
Prozeduraufruf: Aufruf eines selbstdefinierten Befehls

16 Hamster-Modell / Prozeduren / Programme
Programm (mit Prozeduren):

17 Hamster-Modell / Prozeduren / Beispiel
Lösung des Motivationsproblems: Der Hamster soll zwei Körner einsammeln. void main() { vor(); vor(); nimm(); rechtsUm(); } void rechtsUm() { kehrt(); linksUm(); } void kehrt() { linksUm(); linksUm();

18 Hamster-Modell / Prozeduren / Vorteile
Vorteile von Prozeduren: bessere Übersichtlichkeit von Programmen separate Lösung von Teilproblemen Platzeinsparung einfachere Fehlerbeseitigung Flexibilität Wiederverwendbarkeit

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() { void erklimmeGipfel() { void erklimmeStufe() { linksUm(); vor(); linksUm();linksUm();linksUm(); vor();

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 Hamster-Modell / Auswahl / Boolesche Ausdrücke

22 Hamster-Modell / Auswahl / Blockanweisung

23 Hamster-Modell / Auswahl / Leeranweisung

24 Hamster-Modell / Auswahl / bedingte Anweisung

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

26 Hamster-Modell / Auswahl / Alternativanweisung
if (vornFrei()) { vor(); } else { linksUm(); } if (maulLeer()) ; else gib(); if (vornFrei()) vor(); else if (kornDa()) nimm(); else if (!maulLeer()) gib(); else linksUm();

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(); laufeInNaechsteEcke(); } } } } } void laufeInNaechsteEcke() { vor(); vor(); linksUm(); }

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 Hamster-Modell / Wiederholung / while-Schleife

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

31 Hamster-Modell / Wiederholung / do-Schleife
void main() { do { nimm(); } while (kornDa()); } void main() { do { vor(); if (!maulLeer()) gib(); } while (vornFrei()); }

32 Hamster-Modell / Wiederholung / Endlosschleife
void main() { while (vornFrei()) { linksUm(); }

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

34 Hamster-Modell / Test-Funktionen / Motivation
Prozeduren: Definition neuer Befehle Test-Funktionen: Definition neuer Test-Befehle mauerDa() linksFrei() rechtsFrei() fuenfKoernerDa() ...

35 Hamster-Modell / Test-Funktionen / return
return !kornDa() && vornFrei();

36 Hamster-Modell / Test-Funktionen / Definition
Zusatzbedingung: In jedem möglichen Weg durch den Rumpf muss eine boolesche return-Anweisung stehen!

37 Hamster-Modell / Test-Funktionen / Aufruf

38 Hamster-Modell / Test-Funktionen / Beispiele
boolean mauerDa() { return !vornFrei(); } boolean linksFrei() { linksUm(); if (vornFrei()) { rechtsUm(); return true; } else { return false; void main() { while (!mauerDa() && !linksFrei()) { vor(); } if (linksFrei()) linksUm(); void rechtsUm() {

39 Hamster-Modell / Test-Funktionen / Seiteneffekte
boolean linksFrei() { linksUm(); return vornFrei(); } void main() { if (linksFrei()) ; if (!linksFrei()) else

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()) { } if (!kornDa()) { if (rechtsFrei()) { rechtsUm(); } else { linksUm() } } } } boolean rechtsFrei() { rechtsUm(); if (vornFrei()) { linksUm(); return true; } else { return false; } void rechtsUm() { linksUm(); linksUm();

41 Hamster-Modell / Programmentwurf
Problem 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 Analyse D o k u m e n t a i Entwurf Implementierung Test Programm

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 Hamster-Modell / Programm-Entwurf / Analyse
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. 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 Constraints bzgl. des Lösungsweges

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 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 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 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 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 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 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 "der Universität Oldenburg"

Ähnliche Präsentationen


Google-Anzeigen