16.07.2014 Aufrufe

Schrittweise Verfeinerung

Schrittweise Verfeinerung

Schrittweise Verfeinerung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Mag. iur. Dr. techn. Michael Sonntag<br />

Softwareentwicklung<br />

<strong>Schrittweise</strong> <strong>Verfeinerung</strong>, Programmieren üben:<br />

Tic-Tac-Toe in Raten<br />

E-Mail: sonntag@fim.uni-linz.ac.at<br />

http://www.fim.uni-linz.ac.at/staff/sonntag.htm<br />

Institut für Informationsverarbeitung und<br />

Mikroprozessortechnik (FIM)<br />

Johannes Kepler Universität Linz, Österreich<br />

© Michael Sonntag 2004


?<br />

? ?<br />

Fragen?<br />

Bitte gleich stellen!<br />

?<br />

?<br />

?<br />

© Michael Sonntag 2004


<strong>Schrittweise</strong> <strong>Verfeinerung</strong><br />

• Größere Programme sind nicht auf einmal lösbar<br />

Die Komplexität ist einfach zu hoch!<br />

• Daher: Zerlegen in Teilaufgaben, diese dann wieder zerlegen, ....<br />

• Bis die Teilaufgaben so klein sind, daß sie einfach<br />

ausprogrammiert werden können<br />

Typischerweise: Bis zu einzelnen Methoden herab (siehe später)<br />

• Warum: Siehe Diagramm!<br />

c<br />

Komplexität<br />


<strong>Schrittweise</strong> <strong>Verfeinerung</strong><br />

(Top-down)<br />

1. Zerlegen der Gesamtaufgabe in Teilaufgaben<br />

Diese müssen einfacher sein<br />

Jeder Teil muß in sich abgeschlossen sein<br />

» Mehr "Beziehungen" innerhalb als außerhalb<br />

2. Implementieren der Gesamtaufgabe mittels der Teile<br />

"Zusammensetzen der Puzzleteile"<br />

Kontrolle, ob auch alles mittels der geplanten Teile realisiert<br />

werden wird können<br />

Eingeschränkter Test ev. bereits möglich (Prototyp)<br />

3. Implementieren der Teilaufgaben<br />

Entweder wieder verfeinern oder tatsächlich programmieren<br />

4. Zusammenbau, Abschlußtest, Fehlerbehebung<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 4


<strong>Schrittweise</strong> <strong>Verfeinerung</strong><br />

(Bottom-up)<br />

• Die Schritte zwei und drei werden vertauscht<br />

Also zuerst die Teilaufgaben implementieren<br />

Und anschließend mit den fertigen Teilen durch Zusammenbauen<br />

die Gesamtaufgabe lösen<br />

• Beides ist möglich, je nach Vorliebe bzw. Eignung oder<br />

Anforderungen auswählen!<br />

Innerhalb von kleineren Teilen: Eher Bottom-up<br />

Größere Gesamtprogramme und Aufteilung in Klassen oder<br />

Methoden: Eher Top-down<br />

• Bottom-up: Keine Vorkontrolle auf Vollständigkeit, daher muß die<br />

Zerlegung sehr sorgfältig erfolgen. Dafür kann das Grundgerüst<br />

einfacher erstellt werden, da z. B. die gesamten nötigen<br />

Variablen für Schleifen, etc. dann schon genau bekannt sind<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 5


Tic Tac Toe (in Raten):<br />

Das Spiel<br />

O<br />

O<br />

X<br />

O<br />

X<br />

O<br />

X<br />

X<br />

X<br />

X<br />

X<br />

X<br />

O<br />

O<br />

X<br />

O<br />

X<br />

X ... Spieler 1<br />

O X<br />

⇒ Spieler 2 gewinnt<br />

O ... Spieler 2<br />

O<br />

X<br />

Gewinnpositionen (Beispiele)<br />

* * * *<br />

*<br />

*<br />

*<br />

*<br />

*<br />

Unentschieden<br />

X X O<br />

O X X<br />

X O O<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 6


<strong>Schrittweise</strong> <strong>Verfeinerung</strong><br />

Beispiel Tic Tac Toe<br />

1) Tic Tac Toe 2) Start<br />

Spielen<br />

3)<br />

Begrüßung und<br />

Hinweise (z. B.<br />

Regeln) ausgeben<br />

3)<br />

Ende<br />

Eingabe des nächsten Zugs<br />

Prüfen der Eingabe<br />

Hauptspielschleife<br />

Zug bearbeiten<br />

Ausgabe des<br />

Gewinners und<br />

Verabschiedung<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 7<br />

3)<br />

TicTacToeUI<br />

Weiter verfeinern<br />

Direkt implementieren


<strong>Schrittweise</strong> <strong>Verfeinerung</strong><br />

Beispiel Tic Tac Toe<br />

4)<br />

Solange kein Abbruch, kein<br />

Gewinn und ein Zug möglich ist<br />

N<br />

Prüfen ob Zug erlaubt<br />

Fehlermeldung<br />

OK?<br />

Zug durchführen<br />

Spielfeld ausgeben<br />

J<br />

Gewonnen?<br />

Eingabe nächster Zug<br />

Prüfen der Eingabe<br />

J<br />

N<br />

TicTacToePrint<br />

TicTacToeWin<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 8


Tic Tac Toe in Raten: Teil 1<br />

Ausgabe des Spielfeldes<br />

• Schreiben Sie ein Programm, das das Spielfeld des Tic Tac Toe-<br />

Spiels (3x3 Felder) auf dem Bildschirm ausgibt. Hierbei sollen die<br />

"Spielsteine" als Konstanten definiert werden<br />

• In diesem Programm soll das Spielfeld statisch initialisiert werden<br />

• Achten Sie auf eine ansprechende Ausgabe!<br />

• Hinweis:<br />

final static byte PLAYER_1=1;<br />

final static byte PLAYER_2=PLAYER_1+1;<br />

static byte[][] field={ ? ? ? };<br />

final static ??? PLAYER_1_TOKEN= ???;<br />

final static ??? PLAYER_2_TOKEN= ???;<br />

TicTacToePrint.java<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 9


Tic Tac Toe in Raten: Teil 2<br />

Gewinner-Feststellung<br />

• Schreiben Sie ein Programm, das für das Tic Tac Toe-Spiel<br />

feststellt, ob einer der Spieler gewonnen hat oder nicht<br />

• Ein Gewinn ist durch drei gleiche Steine in einer Reihe, einer<br />

Spalte oder einer Diagonale erkennbar<br />

• Auch hier soll das Spielfeld statisch initialisiert werden<br />

• Das Ergebnis soll in der Variable "win" vom Typ "byte"<br />

gespeichert werden<br />

• Ist keine Aussage möglich, soll die Antwort "Unentschieden" sein<br />

• Verwenden Sie dieselben Definition wie im vorigen Programm<br />

und überlegen Sie, ob Sie zusätzliche für den Inhalt der<br />

Gewinnvariable benötigen!<br />

TicTacToeWin.java<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 10


Tic Tac Toe in Raten: Teil 3<br />

Benutzerschnittstelle<br />

• Schreiben Sie ein Programm, das die Benutzerführung für das<br />

Tic Tac Toe Spiel durchführt. Dies beinhaltet:<br />

Ausgabe einer Überschrift, welcher Spieler an der Reihe ist<br />

Einlesen des nächsten Zuges<br />

Mitzählen der Gesamtanzahl an Zügen<br />

Umrechnen des Zuges in Koordinaten des Spielfelds (0..2,0..2)<br />

Abbruch bei Eingabe einer falschen Koordinate oder von 0<br />

• Wenn die Gesamtanzahl der Züge 9 ist, soll das Programm<br />

beendet werden (Keine Ausgabe einer Meldung)<br />

In diesem Fall keine neuen Koordinaten mehr einlesen!<br />

• Verwenden Sie auch hier wieder dieselben Definitionen<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 11


Tic Tac Toe in Raten: Teil 3<br />

Benutzerschnittstelle<br />

• Das Spielfeld wird hier nicht benötigt: Keine Züge durchführen,<br />

ausgeben, auf Gewinn prüfen, etc.<br />

• Die Koordinatieneingabe soll wie auf dem Ziffernblock eines<br />

Telefones oder einer Tastatur erfolgen:<br />

0<br />

1<br />

2<br />

7 8 9<br />

4 5 6<br />

1 2 3<br />

0 1 2<br />

TicTacToeUI.java<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 12


Tic Tac Toe in Raten: Teil 4<br />

Zusammenbau<br />

• Bauen Sie ihre vorherigen Programme zusammen, sodaß man<br />

das Spiel Tic Tac Toe komplett spielen kann<br />

Ganz außen: Benutzerschnittstelle<br />

Innen einbauen:<br />

» Prüfen ob Feld leer (wenn nein: Fehlermeldung und Neueingabe der<br />

Koordinaten)<br />

» Spielstein setzen<br />

» Ausgeben des Spielfeldes (Programm!)<br />

» Prüfen ob jemand gewonnen hat (Programm!)<br />

Am Ende: Ergebnis ausgeben (Gewinn / Unentschieden)<br />

• Achtung: Jetzt 4 Zustände (Spieler 1 hat gewonnen, Spieler 2 hat<br />

gewonnen, unentschieden, Spiel läuft noch)!<br />

TicTacToe.java<br />

Michael Sonntag <strong>Schrittweise</strong> <strong>Verfeinerung</strong> 13

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!