Delegation. Aufgabe 7:



Ähnliche Dokumente
Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Was meinen die Leute eigentlich mit: Grexit?

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

Software Engineering Klassendiagramme Assoziationen

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

Grundlagen der Theoretischen Informatik, SoSe 2008

Einführung in die Java- Programmierung

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

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

Programmierkurs Java

Leichte-Sprache-Bilder

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Professionelle Seminare im Bereich MS-Office

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

1 Vom Problem zum Programm

Informationsblatt Induktionsbeweis

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

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

Programmieren in Java

EINFACHES HAUSHALT- KASSABUCH

Arbeiten mit UMLed und Delphi

Anwendungsbeispiele Buchhaltung

Übungen Programmieren 1 Felix Rohrer. Übungen

Was ist Sozial-Raum-Orientierung?

Berechnungen in Access Teil I

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Ändern eines Kontotyps

OutLook 2003 Konfiguration

Problemdefinition. Cash Flow Reminder. 1 Problembeschreibung: 2 Projektziel: 3 Aufgaben des Benutzers

Objektorientierte Programmierung. Kapitel 12: Interfaces

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

SWE5 Übungen zu Software-Engineering

Vorgehensweise bei Lastschriftverfahren

Einrichten eines HBCI- Zugangs mit Bank X 5.1

Download. Klassenarbeiten Mathematik 8. Zinsrechnung. Jens Conrad, Hardy Seifert. Downloadauszug aus dem Originaltitel:

Objektbasierte Entwicklung

Mediumwechsel - VR-NetWorld Software

Anwendungsbeispiele Buchhaltung

Andreas Rühl. Investmentfonds. verstehen und richtig nutzen. Strategien für die optimale Vermögensstruktur. FinanzBuch Verlag

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Bewertung des Blattes

Grundlagen der Informatik

Erstellen eines Formulars

Manager. von Peter Pfeifer, Waltraud Pfeifer, Burkhard Münchhagen. Spielanleitung

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

Die Rückgabe kann über folgende, von uns getestete Programme / Apps vorgenommen werden: Adobe Digital Editions Sony Reader for PC Bluefire Reader

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Erstellen der Barcode-Etiketten:

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Dokumentation für das Spiel Pong

Die neue Aufgabe von der Monitoring-Stelle. Das ist die Monitoring-Stelle:

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Download. Führerscheine Zinsrechnung. Schnell-Tests zur Lernstandserfassung. Jens Conrad, Hardy Seifert. Downloadauszug aus dem Originaltitel:

Bedienungsanleitung für den Online-Shop

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Geld Verdienen im Internet leicht gemacht

Erklärung zu den Internet-Seiten von

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

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Mediumwechsel - VR-NetWorld Software

How to do? Projekte - Zeiterfassung

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

1. Einführung. 2. Die Abschlagsdefinition

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Projekt Systementwicklung

Text Formatierung in Excel

Text-Zahlen-Formatieren

Binärdarstellung von Fliesskommazahlen

ICS-Addin. Benutzerhandbuch. Version: 1.0

So geht s Schritt-für-Schritt-Anleitung

Anleitung über den Umgang mit Schildern

Evident VDDS-Anbindung von MIZ

Java: Vererbung. Teil 3: super()

TYPO3 Tipps und Tricks

Nicht über uns ohne uns

Eigenen Farbverlauf erstellen

Skript Pilotphase für Arbeitsgelegenheiten

Finden Sie das Girokonto, das zu Ihnen passt.

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Die Post hat eine Umfrage gemacht

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Sage Start Version 2011

Installation der SAS Foundation Software auf Windows

Theoretische Informatik SS 04 Übung 1

Arcavis Backend - Invoice Baldegger+Sortec AG

Barcodedatei importieren

Mediator 9 - Lernprogramm

WordPress. Dokumentation

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Print2CAD 2017, 8th Generation. Netzwerkversionen

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Mensa-Bestellsystem der Grundschule Bienenbüttel

Erstellen einer PostScript-Datei unter Windows XP

Transkript:

Hochschule Niederrhein Objektorientierte Prof. Dr. Rethmann Fachbereich 03 Anwendungsentwicklung Prof. Dr. Stockmanns Bachelor Informatik SS 2014 Übung 3 Aufgabe 7: Delegation Betrachten Sie noch einmal die Klasse Rational aus der Vorlesung. Implementieren Sie eine Methode doublevalue(), die den repräsentierten Wert als double liefert. Zahlen werden in den einzelnen Ländern unterschiedlich dargestellt. So werden in England die Tausender durch Kommata getrennt, in Deutschland durch Punkte: 1,234,567 England 1.234.567 Deutschland Andererseits werden in Deutschland die Nachkommastellen durch ein Komma vom ganzzahligen Teil getrennt, in England durch einen Punkt: 742.13 England 742,13 Deutschland Damit wir Rational-Werte in verschiedenen Formaten ausgeben bzw. einlesen können, erstellen wir eine Klasse NumberFormat. Die Methode format der Klasse NumberFormat erstellt zum angegebenen Rational- Wert eine string-darstellung, die dann ausgegeben werden kann. Dahingegen wandelt die Methode parse den gegebenen string in einen Rational- Wert. Falls der string keine korrekte Rational-Repräsentation darstellt, soll eine Ausnahme geworfen werden. Leiten Sie von der Basisklasse NumberFormat zwei Klassen NumberFormatDE und Number- FormatEN ab, die eine Ausgabe im deutschen bzw. englischen Format ausgeben. Welche Methoden sollten abstrakt, welche als virtual oder static definiert sein? Ergänzen Sie das Klassendiagramm. Rational -nf NumberFormat -zaehler: int -nenner: int +add(num:rational): Rational +sub(num:rational): Rational +doublevalue(): double +tostring(): string string tostring() { return nf.format(this); } NumberFormatDE NumberFormatEN 1

Aufgabe 8: Unter Wrapping versteht man das Verpacken von Daten und Funktionalität eines im prozeduralen Programmierstils geschriebenen Systems in eine objektorientierte Schnittstelle. So kann bspw. eine prozedurale Bibliothek an ein objektorientiertes Softwaresystem angepasst werden. Wir stellen nach außen eine objektorientierte Schnittstelle bereit und verbergen alle internen Details, also die Verwendung der alten Prozeduren, Funktionen und Daten, innerhalb des Wrappers. (a) In der Vorlesung wurde eine Implementierung eines String-Tokenizers besprochen, die verschiedene Methoden der Klasse string nutzt. Implementieren Sie jetzt eine Klasse Tokenizer, die die Funktionalität der C-Funktion strtok kapselt und als Klasse zur Verfügung stellt. (b) In C-Programmen wird ein Datum mittels der Typen time t und struct tm dargestellt und mittels der Funktionen mktime, strftime oder difftime bearbeitet. Kapseln Sie diese Funktionen in einer objektorientierten Schnittstelle, indem Sie eine Klasse Datum implementieren. Aufgabe 9: Eine Bank verwaltet Konten, wobei jedes Konto einer Person zugeordnet ist. Leiten Sie von der Klasse Konto zwei Klassen Girokonto und Sparkonto ab. Folgende Funktionen haben alle Kontenarten gemeinsam: void hebeab(int betrag, Datum d); void zahleein(int betrag, Datum d); int kontostand(); string kontoauszug(); Bei einem Sparkonto darf nur dann Geld abgehoben werden, wenn der Kontostand dadurch nicht negativ wird. Bei einem Girokonto darf der Kontostand zwar negativ werden, aber nur bis zum angegebenen dispo-wert, dem Kreditlimit. Das Guthaben auf einem Sparkonto wird verzinst, beim Girokonto gibt es dagegen nur einen Sollzins, also einen Zinssatz für Überziehungen. Außerdem stellt das Girokonto eine ueberweise-methode bereit: void ueberweise(string kontonr, int betrag, Datum d); Implementieren Sie obige Klassen. Überlegen Sie sich, welche Attribute die Klassen haben und welche davon in der Basisklasse deklariert werden können. Welche der Methoden müssen als virtual deklariert und in einer Unterklasse überschrieben werden? Welche Methoden sind abstrakt? Müssen weitere Klassen oder Strukturen definiert werden? Wie werden Kontobewegungen vermerkt? Welche Methoden stellt die Bank bereit? Wie könnte eine Benutzeroberfläche aussehen? Aufgabe 10: Just for fun! Erstellen Sie ein Programm, gegen das wir Tic-Tac-Toe spielen können. Das Spielbrett kann mittels einfacher ASCII-Grafik dargestellt und Interaktion kann mittels der curses- Bibliothek implementiert werden. Ein möglicher Spielverlauf kann bspw. so aussehen: 2

1 2 3 4 5 6 7 8 9 1 2 3 7 8 9 1 2 3 7 8 o 2 3 7 8 o Gamer: 4 Computer: 9 Gamer: 1 Computer: 7 Als erste primitive Spielstrategie können Sie einen Zufallsspieler implementieren, der unter allen erlaubten Zügen einen zufällig auswählt. Diesen Gegner sollten Sie noch leicht schlagen können. Anschließend implementieren wir eine Klasse, die bessere Züge generiert. Es bietet sich an, eine Oberklasse IMoveGen zu definieren, die die Schnittstelle eines allgemeinen Zuggenerators definiert. Davon können zwei Klassen Simple und Advanced abgeleitet werden. TicTacToe -movegen IMoveGen -board: char ** +setmovegen(gen:imovegen) +toscreen() +compmove() +usermove(field:int) +isfinal(): bool +win(): bool +loss(): bool Simple Advanced void compmove() { movegen->move(this); } Bei kompleeren Spielen wie Dame, Schach oder Go sind pro Spielphase verschiedene Zuggeneratoren denkbar. Ein Zuggenerator für die Eröffnung, einer für das Mittelspiel und einer für das Endspiel. Bei der verbesserten Version unseres Zuggenerators erzeugen wir einen Zug nach folgender Liste, die unter http://en.wikipedia.org/wiki/tic-tac-toe beschrieben ist: Wenn es bereits eine eigene Reihe mit zwei besetzten Feldern gibt, besetze das dritte Feld der Reihe, um einen eigenen Sieg zu erzielen. Wenn der Gegner eine Reihe mit zwei besetzten Feldern hat, besetze das dritte Feld der Reihe, um den gegnerischen Sieg zu verhindern. Besetze ein Feld, sodass sich zwei Gewinnmöglichkeiten ergeben, ein sogenannter Fork. Der Gegner kann im nächsten Zug nur eine der Gewinnmöglichkeiten verhindern. X X O X O X O O X X X X X O O Besetze ein Feld, sodass ein gegnerischer Fork, also zwei gegnerische Gewinnreihen, verhindert wird. Besetze das mittlere Feld. Wenn der Gegner ein Eckfeld besetzt, besetze das gegenüberliegende Eckfeld. 3

Besetze ein Eckfeld. Besetze das mittlere Feld einer Seite. Die Liste wird von oben nach unten durchlaufen, die erste Möglichkeit wird ausgeführt. Gegen dieses Programm sollten Sie schon deutlich mehr Mühe haben, es zu schlagen. Aufgabe 11: Just for fun! Implementieren Sie Conway s Game of Life mittels der curses-bibliothek. Conway s Game of Life ist ein vom Mathematiker John Horton Conway 1970 entworfenes System, basierend auf einem unendlich großen, zweidimensionalen Gitter. Im Prinzip stellt es eine Computersimulation dar, bei der sich Lebewesen (Bakterien) auf den Feldern des Gitters verteilen. Je nach Nachbarschaft bleiben sie am Leben, sterben oder bringen neues Leben hervor. Zunächst wird eine Anfangsgeneration von lebenden Zellen auf dem Spielfeld platziert. Die jeweils nächste Generation ergibt sich durch die Befolgung einfacher Regeln, wobei die Folgegeneration immer für alle Zellen gleichzeitig berechnet wird und die aktuelle Generation ersetzt. Überlebensregel: Lebende Zellen überleben, wenn sie zwei oder drei lebende Nachbarn haben. Sterberegel: Lebende Zellen mit weniger als zwei oder mehr als drei lebenden Nachbarn sterben an Einsamkeit bzw. Überbevölkerung. Geburtsregel: Tote Zellen mit genau drei lebenden Nachbarn werden neu geboren. Die Anfangspopulation soll entweder zufällig erstellt oder aus einer Datei eingelesen werden. Da ein reales Spielfeld immer einen Rand hat, muss das Verhalten dort festgelegt werden. Im einfachsten Fall belegen wir den Rand durch tote Zellen. Wir wollen aber unterschiedliche Strategien der Randbehandlung implementieren und austauschbar machen. Wenn wir ein Torus-förmiges Spielfeld verwenden, kommt alles, was das Spielfeld nach unten verlässt, oben wieder heraus und umgekehrt. Das Gleiche gilt für die Seiten: Alles, was das Spielfeld nach links verlässt, tritt rechts wieder ein und umgekehrt. GameOfLife -field: char ** +setboard(board:iboard) +toscreen() +step() -board IBoard Grid Torus Stillleben sind stabile Populationen, die sich nicht ändern. Solche Populationen enthalten nur Lebewesen mit 2 oder 3 Nachbarn. 4

Oszillatoren sind Populationen, die sich nach gewissen Perioden wiederholen. Bei den P2- Oszillatoren wiederholen sich die Populationen nach zwei Perioden, bei P3-Oszillatoren nach drei Perioden. P2-Oszillator: P3-Oszillator Es gibt Populationen, die sich über das Feld bewegen. Dazu gehören die Gleiter und die Raumschiffe. 5