Aufgabenblatt Nr. 5 Generizität und TicTacToe



Ähnliche Dokumente
Programmierkurs Java

Übung: Verwendung von Java-Threads

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung. Kapitel 12: Interfaces

Praktische Übung 'JUnit-Test'

Programmieren in Java

Java Projekt: Tic Tac Toe + GUI

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Objektorientierte Programmierung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Java Einführung Collections

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Prinzipien Objektorientierter Programmierung

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Klausur zur Einführung in die objektorientierte Programmierung mit Java

SEP 114. Design by Contract

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Anleitung Typo3-Extension - Raumbuchungssystem

Auktionen erstellen und verwalten mit dem GV Büro System und der Justiz Auktion

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Bedienungsanleitung zum Import und Bearbeiten von Sauenkarten

Objektorientierte Programmierung

Überblick. Lineares Suchen

Sage Start Einrichten des Kontenplans Anleitung. Ab Version

Einführung in die Programmierung

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Seriendruck mit der Codex-Software

Einführung in die Java- Programmierung

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Programmierkurs Java

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Graphic Coding. Klausur. 9. Februar Kurs A

Datenexport aus JS - Software

TELIS FINANZ Login App

Installationsanleitungen

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Dokumentation des Projektes Tic Tac Toe

Sicherheitseinstellungen... 2 Pop-up-Fenster erlauben... 3

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Programmierung für Mathematik (HS13)

Referat Informationstechnologie in der Landeskirche und im Oberkirchenrat. Sicherung der Datenbank auf einen USB-Stick. CuZea N.

DOKUMENTATION. ClubWebMan Photoalbum. mit dem Photobook Plugin erstellen.

Studentische Lösung zum Übungsblatt Nr. 7

Anleitung zur Registrierung und Nutzung des Veranstalter- Zugangs für den Veranstaltungskalender der Expertenliste

5. Tutorium zu Programmieren

teischl.com Software Design & Services e.u. office@teischl.com

Tagesprogramm

MANUELLE DATENSICHERUNG

Wollen Sie einen mühelosen Direkteinstieg zum Online Shop der ÖAG? Sie sind nur einen Klick davon entfernt!

Was man mit dem Computer alles machen kann

SICHERN DER FAVORITEN

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Handbuch Offline-Abgleich

Um sich zu registrieren, öffnen Sie die Internetseite und wählen Sie dort rechts oben

Die Dateiablage Der Weg zur Dateiablage

einrichtung in den kaufmännischen Programmen der WISO Reihe

Professionelle Seminare im Bereich MS-Office

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Typumwandlungen bei Referenztypen

5.2 Neue Projekte erstellen

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Sowohl die Malstreifen als auch die Neperschen Streifen können auch in anderen Stellenwertsystemen verwendet werden.

Anwendungsbeispiele Buchhaltung

Probeklausur Softwareengineering SS 15

EH2000 Ablauf am Morgen

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Einfügen von Bildern innerhalb eines Beitrages

Etikettendruck mit Works 7.0

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

1. Einführung. 2. Die Abschlagsdefinition

OS Anwendungsbeschreibung

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

Erklärung zum Internet-Bestellschein

1. Einführung. 2. Weitere Konten anlegen

Schnittstelle DIGI-Zeiterfassung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

U08 Entwurfsmuster (II)

1. Einführung Erstellung einer Teillieferung Erstellung einer Teilrechnung 6

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Datenübernahme bei Umstieg von T-Online Banking 6 auf Quicken 2010 so wird s gemacht!

Tutorial. Wie kann ich meinen Kontostand von meinen Tauschpartnern in. übernehmen? Zoe.works - Ihre neue Ladungsträgerverwaltung

HorstBox (DVA-G3342SD) Anleitung zur Einrichtung der Telefonie

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Anleitung für CleverReach

Gimp Kurzanleitung. Offizielle Gimp Seite:

Online-Fanclub-Verwaltung

Transkript:

Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung GOOP der Sortieralgorithmus Bubble-Sort bekannt. Zur Erinnerung, hier die Variante zum Sortieren eines Arrays über int. 1 public static void bubblesort(int[] xs) { 2 boolean unsorted=true; 3 while (unsorted) { 4 unsorted = false; 5 for (int i=0; i < xs.length-1; i++) { 6 if (!(xs[i] < xs[i+1])) { 7 int dummy = xs[i]; 8 xs[i] = xs[i+1]; 9 xs[i+1] = dummy; 10 unsorted = true; 11 } 12 } 13 } 14 } Ihre Aufgabe ist es nun, den oben stehenden Bubble-Sort als generische Methode zu implementieren. Der generische BubbleSort soll alle Objekte sortieren können, die die Schnittstelle Comparable implementiert haben. Schlagen Sie bitte hierzu die genaue Funktionsweise der Schnittstelle Comparable in der JAVA-API nach: http://download.oracle.com/javase/6/docs/api/java/lang/comparable.html Es ist eine Klasse SortableElement gegeben, welches die Comparable Schnittstelle wie folgt implementiert. 1 class SortableElement implements Comparable<SortableElement> { 2 int data1 = 0; 3 int data2 = 0; 4 5 public SortableElement(int i, int j) { 6 data1 = i; 7 data2 = j; 8 } 9 10 public int compareto(sortableelement o) { 11 return data1 - o.data1; 1

1 Generische Sortier-Methode 2 12 } 13 14 public String tostring() { 15 return "(" + data1 + ", " + data2 + ")"; 16 } 17 } Bestimmen Sie nun die zu generalisierenden Anteile in der Methode bubblesort und schreiben Sie bubblesort so in eine generische Methode um, dass Sie alle Arrays über Klassen mit dem Interface Comparable sortieren kann. Testen Sie Ihre Methode mit folgenden Codezeilen: 1 SortableElement[] ys = { 2 new SortableElement(1, 2), 3 new SortableElement(4, 2), 4 new SortableElement(3, 5), 5 new SortableElement(1, 6) 6 }; 7 bubblesort(ys); 8 for (SortableElement y : ys) 9 System.out.println(y); Diese Zeilen sollten folgende Ausgabe produzieren (da TestElemente nach dem data1 Datenfeld sortiert werden): (1,2) (1,6) (3,5) (4,2) Schreiben Sie anschließend die Klasse TestElement so um, dass folgende Reihung durch bubblesort entsteht (also nach data2 sortiert wird): (1,2) (4,2) (3,5) (1,6) 1.2 Aufgabe: Sortieren von Figuren nach Fläche Erweitern Sie nun die Lösung des Aufgabenblatts 4 so, dass die abstrakte Klasse FigMZLA die Schnittstelle Comparable derart implementiert, dass Figuren nach Flächengrößen sortiert werden können. Nutzen Sie Ihre Implementierung von bubblesort aus Aufgabe 1.1. Wenn Sie diese richtig implementiert haben, müssen Sie nun endlich nicht mehr, für jeden neuen Datentyp eine neue Sortierroutine schreiben. Endlich können Sie wiederverwenden! Testen Sie Ihre Methode mit den folgenden Codezeilen: 1 FigMZLA[] figuren = { 2 new Rechteck(5, 5, -10, 10, 20), 3 new RWDreieck(30, 2, 80, 3, 4), 4 new Ellipse(4, 10, 31, 10, 20), 5 new Kreis(10, 10, 31, 5), 6 new Quadrat(100, 200, 13, 35), 7 new Quadrat(100, 200, 5, 35) 8 };

2 Aufgabe: Entwicklen einer eigenen generischen Klasse (Bsp. Stack) 3 9 10 bubblesort(figuren); 11 12 for (FigMZLA f : figuren) System.out.println(f); Diese sollten die folgenden Ergebniszeilen produzieren: Rechteck an Position (?,?,?) mit einer Fläche von? Flächeneinheiten Ellipse an Position (?,?,?) mit einer Fläche von? Flächeneinheiten Die? bezeichnen, die durch Sie hoffentlich korrekt berechneten bzw. ausgegebenen Werte. 2 Aufgabe: Entwicklen einer eigenen generischen Klasse (Bsp. Stack) Ihnen ist die Klasse Stack aus der Vorlesung GOOP bekannt. Ihre Aufgabe ist es nun, unter Nutzung der Klasse Stack eine generische Klasse GenStack zu entwickeln (nutzen Sie hierzu nicht, die generische Variante der Stack- Klasse der JAVA-5/6 Umgebung sondern implementieren Sie eine generischen Stack selber, um das Prinzip generischer Klassen zu verstehen). Die Klasse GenStack soll die Methoden push(), pop(), peek() und isempty() implementieren und generisch für alle Typ-Parameter T gelten. GenStack soll nicht von Stack abgeleitet (keine Subklasse) sein, sondern einen Stack kapseln (sogenannte Wrapper-Klasse). Schlagen Sie bitte hierzu die genaue Funktionalität oben genannter Methoden in der JAVA-API nach und implementieren Sie diese analog. http://download.oracle.com/javase/6/docs/api/java/util/stack.html Prüfen Sie ihre Implementierung mit folgenden Codezeilen: 1 // Instanziieren eines aktuell parametrisierten Stacks mit konkreten Typ-Parameter 2 GenStack<Figur> mystack = new GenStack<Figur>(); 3 4 // Ein wenig Testcode, um die Logik zu testen 5 System.out.prinltn(mystack.push(new Kreis(10, 10, 2, 25)); 6 System.out.println(mystack.push(new Quadrat(5, 5, 4, 37)); 7 System.out.println(mystack.push(new RWDreick(5, 7, 4, 10, 13)); 8 System.out.println(mystack.peek()); 9 System.out.println(mystack.pop()); 10 System.out.println(mystack.pop()); 11 System.out.println(mystack.pop()); 12 13 } 14 } Diese Zeilen sollten die folgenden Ergebniszeilen produzieren:

3 TicTacToe 4 3 TicTacToe Im Rahmen der Vorlesung werden Ihnen objektorientierte Entwurfsprinzipien am Beispiel des Spiels Tic Tac Toe veranschaulicht. Bitte bearbeiten Sie diese Aufgabe unbedingt vor dem Aufgabenblatt Nr. 6. Nutzen Sie hierzu auch die Zeit, die Ihnen im Rahmen des Tutoriums ergänzend ermöglicht wird. Befolgen Sie bitte die folgenden Schritte: 1. Laden Sie sich die Tic Tac Toe Engine von folgender Seite herunter (a) http://praktische-informatik.fh-luebeck.de/sites/default/files/oop-tictactoe.zip 2. Importieren Sie dieses Projektarchiv wie gewohnt in Ihre Eclipse Programmierumgebung 3. Fügen Sie in ihrem Projekt, welches Sie für dieses Aufgabenblatt angelegt haben, nun die Tic Tac Toe Engine zu Ihrem Buildpath hinzu. (a) Selektieren Sie Ihr Projekt im Package Explorer anschließend Rechte Maustaste -> Properties (b) Selektieren Sie JAVA Build Path -> Projects (c) Klicken Sie anschließend auf Add und fügen Sie ihr Tic Tac Toe Project hinzu In der T3 Engine gibt es eine sogenannte T3Starter Klasse im Paket de.fhl.oop.tictactoe.engine. Diese dient dazu ein Spiel zwischen zwei Tic Tac Toe Spielern zu starten. Die T3 Engine bietet im Paket de.fhl.oop.tictactoe.player weiterhin die folgenden Spieler an: CrazySpieler -dieserspielersuchtzeilenweiseeinleeresfeldundsetztaufdaserstedaserfindet Katastrophenspieler - dieser teilt bei jedem Spielzeug durch null und verliert daher immer (wurde nur für Testzwecke benötigt) Zufallsspieler -diesersetztzufälligauffreiefelder und der abstrakte Spieler T3VersierterSpieler erweitert den T3Spieler, umzweizusätzlichemethoden leere_felder und gewinnfelder, dieesihmermöglichen,leerefelderundsolchefelderzubestimmen,die im nächsten Zug für einen der Spieler den Gewinn bringen würden. Diese beide Methoden machen es Ihnen einfacher intelligentere Strategien zu entwickeln. In dieser Übung sollen Sie vorerst nur herausfinden, welche von den beiden Strategien des CrazySpieler und des ZufallsSpieler die bessere ist. Lassen Sie hierzu beide Spieler eine Partie mit jeweils 1000 Spielen durchspielen und schauen Sie, welche Spieler mehr Spiele gewonnen hat.

3 TicTacToe 5 1 import de.fhl.oop.tictactoe.engine.t3starter; 2 import de.fhl.oop.tictactoe.player.*; 3 4 public class Testspiel { 5 6 public static void main(string[] args) { 7 T3Starter.starte_partie(1000, new CrazySpieler("Crazy"), new ZufallsSpieler("Zufall")); 8 } 9 } Welches ist die bessere Strategie? Auf das erste leere Feld zu setzen? Oder zufällig zu setzen? Entwickeln Sie nun zu Hause und im Tutorium Ihre eigene Strategie. Entwickeln Sie Ihre eigene Spielklasse, in dem Sie diese von T3VersierterSpieler ableiten. Bringen Sie diese Klasse zur nächsten Übung mit. Dort sollen Sie gemeinsam eine Logik implementieren, die es ermöglicht, alle Ihre Spieler gegeneinander spielen zu lassen, um in Ihrer Übungsgruppe den Tic Tac Toe Meister zu ermitteln.