Programmierkurs Java



Ähnliche Dokumente
Programmierkurs Java

Programmierkurs Java

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

Objektorientierte Programmierung

Einführung in die Programmierung

2A Basistechniken: Weitere Aufgaben

Programmieren in Java

Java: Vererbung. Teil 3: super()

Studentische Lösung zum Übungsblatt Nr. 7

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

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

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Software Engineering Klassendiagramme Assoziationen

Große Übung Praktische Informatik 1

Lehrer: Einschreibemethoden

Fakultät Angewandte Informatik Lehrprofessur für Informatik

U08 Entwurfsmuster (II)

Übungen Programmieren 1 Felix Rohrer. Übungen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

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

Objektorientierte Programmierung

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

SEP 114. Design by Contract

Professionelle Seminare im Bereich MS-Office

Software Engineering Klassendiagramme Einführung

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

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Graphic Coding. Klausur. 9. Februar Kurs A

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

Software Entwicklung II (SS12)

Übung: Verwendung von Java-Threads

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

PIWIN 1 Übung Blatt 5

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

Anleitung zum neuen Überaumbuchungssystem der Hochschule für Musik und Tanz Köln

Computeranwendung und Programmierung (CuP)

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Zählen von Objekten einer bestimmten Klasse

Einführung in die Programmierung

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Applet Firewall und Freigabe der Objekte

Musterlösungen zur Klausur Informatik 3

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

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

LSF - Lehre Studium Forschung Einführung in LSF

Anzeige von eingescannten Rechnungen

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

1 Vom Problem zum Programm

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

104 WebUntis -Dokumentation

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Folge 18 - Vererbung

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

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

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

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

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Freischaltung eines neuen VR-NetKeys mit SecureGo

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Schritt 1 - Ein Spielfeld

Kurzanleitung der Gevopa Plattform

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Einführung in die Java- Programmierung

WPF Steuerelemente Listbox, ComboBox, ListView,

Arrays Fortgeschrittene Verwendung

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

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

Fachhochschule Fulda. Bedienungsanleitung für QISPOS (Prüfungsanmeldung, Notenspiegel und Bescheinigungen)

Vorkurs C++ Programmierung

Erstellen von x-y-diagrammen in OpenOffice.calc

1. Einführung. 2. Alternativen zu eigenen Auswertungen. 3. Erstellen eigener Tabellen-Auswertungen

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Prüfdatenverwaltung in HELIOS

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Stand: Adressnummern ändern Modulbeschreibung

Algorithmen und Datenstrukturen

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Einführung in Javadoc

Graphische Benutzungsoberflächen

Bei der Anlage von Pauschalen ist folgendes zu beachten!!!!!!!!

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Integrated Services Realtime Remote Network

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

So gehts Schritt-für-Schritt-Anleitung

Das Modul ARTIKEL-BARCODE ermöglicht den Druck von Barcode-Etiketten der EAN-Codes 8 und 13.

5.2 Neue Projekte erstellen

Der lokale und verteilte Fall

Jederzeit Ordnung halten

Transkript:

Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE24-KlassenUndObjekteFort (Stand 28.09.2012) Aufgabe 1: Implementieren Sie eine Klasse Student. Die Klasse soll eine Methode immatrikulieren haben, der das Alter eines Studenten als Parameter übergeben wird, sowie eine Methode exmatrikulieren, sowie eine dritte Methode, die bei ihrem Aufruf den Altersdurchschnitt aller gerade immatrikulierten Studenten liefert. Aufgabe 2: Schauen Sie sich folgendes Programm an. Die Klasse IO ist die aus der Vorlesung bekannte Klasse: class Addieren { public static void main(string[] args) { IO.println(new Int(8).add(IO.readInt()).add(-2).makeString()); Aufgabe: Entwickeln Sie eine Klasse Int, so dass sich das Programm kompilieren lässt. Die Klasse Int soll dabei folgende Semantik haben: Dem Konstruktor wird ein int-wert übergeben, der intern gespeichert werden soll. Bei Aufruf der Methode add für ein Int-Objekt soll der übergebene int-wert zum internen Wert addiert und anschließend eine Referenz auf das Objekt selbst geliefert werden. Die Methode makestring soll so implementiert werden, dass der interne int- Wert in seiner String-Repräsentation geliefert wird. Bei einer Benutzereingabe von 3 soll das Programm bspw. 9 auf den Bildschirm ausgeben, bei einer Eingabe von -7-1. Aufgabe 3: Definieren Sie eine Klasse zur Repräsentation eines UKW-Radios. Der Zustand des Radios ist gegeben durch eine Frequenz zwischen 87.5 und 108.0 MHz. Nach dem Erzeugen des Radio-Objektes beträgt die Frequenz 87.5 MHz. Die Frequenz kann in den angegebenen Frequenzen schrittweise um 0.5 MHz nach oben bzw. unten verändert werden. Weiterhin stehen n Stationstasten zur Verfügung, auf denen man Frequenzen speichern bzw. gespeicherte Frequenzen wieder abrufen kann.

Insgesamt soll Ihre Klasse also die folgenden Methoden definieren: Einen Konstruktor, dem die Anzahl n an Stationstasten als Parameter übergeben wird Eine Methode, die die aktuelle Frequenz liefert Eine Methode zum Verringern der Frequenz um 0.5 MHZ Eine Methode zum Erhöhen der Frequenz um 0.5 MHZ Eine Methode, um die aktuelle Frequenz auf einer Stationstaste zu speichern Eine Methode, um die aktuelle Frequenz auf die Frequenz einer angegebenen Stationstaste einzustellen Im StudIP steht ein Testprogramm mit einer GUI für Ihre Klasse zur Verfügung. Wenn Ihre Klasse korrekt implementiert ist und sich in das Testprogramm ohne Compilierfehler einbinden lässt, sollte beim Start des Testprogramms folgende interaktive GUI auf dem Bildschirm erscheinen. Aufgabe 4: Gegeben seien folgende Java-Klassen: class Person { // liefert den Namen der Person public String getname() class Buch { // liefert die ISBN-Nummer des Buches public String getisbn() // liefert den Titel des Buches public String gettitel() // liefert die Autoren des Buches public Person[] getautoren() // liefert den Verkaufspreis des Buches public double getpreis()

class Buchhandlung { // privater Konstruktor; Umsetzung des Singleton-Musters private Buchhandlung() // Klassenmethode, die zum Namen einer Buchhandlung das // entsprechende Buchhandlung-Objekt liefert; // bei ungültigem Namen wird null geliefert public static Buchhandlung getbuchhandlung(string name) // liefert die Anzahl an verkauften Exemplaren in dieser // Buchhandlung für das angegebene Buch public int getanzahlverkaufteexemplare(buch buch // liefert die Bücher, die die Buchhandlung im Sortiment hat public Buch[] getbuecherimsortiment() Schreiben Sie auf der Basis dieser Klassen ein Programm, das folgendes tut: Zunächst wird der Nutzer nach dem Namen einer Buchhandlung und dem Namen eines Autors gefragt. Anschließend berechnet das Programm, wie viele Tantiemen der angegebene Autor für seine Bücher bekommt, die in der angegebenen Buchhandlung verkauft worden sind, und gibt die Summe auf den Bildschirm aus. Als Tantiemen bekommen die Autoren eines Buches dabei 10 Prozent des Buchpreises jedes verkauften Exemplares, die Sie evtl. (gleichmäßig) miteinander teilen müssen. Aufgabe 5: Gegeben seien folgende Java-Klassen: public class Person { // liefert den Namen der Person public String getname() public class Student extends Person { // nicht von außen direkt instantiierbar private Student() // liefert den Studenten mit der angegebenen Matrikelnummer public static Student getstudent(string matrikelnummer) public class PruefungsErgebnis { // liefert den Namen des Moduls der Prüfung public String getmodulname() // liefert alle Professoren, die für die Prüfung zuständig waren public Person[] getprofessoren()

// liefert den Studenten mit diesem Prüfungsergebnis public Student getstudent() // liefert die Note der Prüfung public int getnote() public class PruefungsDB { // nicht von außen direkt instantiierbar private PruefungsDB() // liefert die Prüfungsdatenbank public static PruefungsDB getpruefungsdb() // liefert alle Prüfungsergebnisse des angegebenen Studenten public PruefungsErgebnis[] getnoten(student student) Schreiben Sie auf der Basis dieser Klassen ein Programm, das folgendes tut: Zunächst wird der Nutzer nach dem Namen eines Professors und der Matrikelnummer eines Studierenden gefragt. Anschließend berechnet das Programm den Notendurchschnitt des entsprechenden Studierenden bei Prüfungen mit dem entsprechenden Professor und gibt den Notendurchschnitt auf den Bildschirm aus. Aufgabe 6: Ein ASCII-Bildschirm im Sinne dieser Aufgabe ist ein rechteckiges Gebilde, das aus einer Menge an Kacheln besteht. In diese Kacheln können char-zeichen ausgegeben werden. Die folgende Klasse Kachel repräsentiert entsprechende Bildschirm-Kacheln. // Repaesentiert eine Zelle eines ASCII-Bildschirms public class Kachel { int reihe; int spalte; // initialisiert die angegebene Kachel mit einem Leerzeichen public Kachel(int reihe, int spalte) { this.reihe = reihe; this.spalte = spalte; // Implementierung hier unwichtig // Zeichnet das uebergebene Zeichen in die entsprechende Kachel public void zeichne(char zeichen) { // Implementierung hier unwichtig

Die folgende Klasse Bildschirm repräsentiert entsprechende Bildschirme. // Repraesentiert einen rechteckigen ASCII-Bildschirm, der aus einzelnen // Kacheln besteht public class Bildschirm { // erzeugt/initialisiert einen Bildschirm der angegebenen Groesse public Bildschirm(int anzahlreihen, int anzahlspalten) { // liefert die Kacheln der angegebenen Reihe // Hinweis: Sie muessen sich nicht um Index-Fehler kuemmern public Kachel[] getreihe(int reihenindex) { // liefert die Kacheln der angegebenen Spalte // Hinweis: Sie muessen sich nicht um Index-Fehler kuemmern public Kachel[] getspalte(int spaltenindex) { Teilaufgabe (a) Implementieren Sie die Klasse Bildschirm, d.h. definieren Sie geeignete interne Datenstrukturen sowie implementieren Sie die aufgeführten Konstruktoren und Methoden. Hinweis: Es dürfen keine zusätzlichen public-methoden definiert werden. Teilaufgabe (b) Entwickeln Sie auf der Grundlage der Klassen Kachel und Bildschirm ein Programm, das ein Rechteck der Größe n (n ist eine int-konstante mit Werten größer 0) auf einen Bildschirm mit 24 Zeilen und 80 Spalten zeichnet (beginnend in der linken oberen Ecke des Bildschirms). Dabei dürfen nur die public-konstruktoren und - Methoden der Klassen genutzt werden. Der Zugriff auf in den Klassen definierte Attribute ist ebenfalls nicht erlaubt. Beispiel (n = 2): -- -- Beispiel (n = 5): ----- -----

Aufgabe 7: Gegeben seien folgende Klassen: class FachNote { private String fach; // das Fach (Deutsch, Mathe,...) private int note; // die Note in dem Fach (1.. 6) public FachNote(String fach, int note) { this.fach = fach; this.note = note; public String getfach() { return this.fach; public int getnote() { return this.note; class Schueler { private String name; // Name des Schuelers private FachNote[] noten; // Noten in den einzelnen Faechern public Schueler(String name, FachNote[] noten) { this.name = name; this.noten = noten; public String getname() { return this.name; public FachNote[] getnoten() { return this.noten; class NichtBelegtesFachException extends Exception { private String fach; // Name des nicht belegten Faches public NichtBelegtesFachException(String fach) { this.fach = fach; public String getfach() { return this.fach; Implementieren Sie auf der Grundlage dieser Klassen die folgende Funktion: /**

* Berechnet die Durchschnittsnote der uebergebenen Schueler in dem * uebergebenen Fach. * Hinweis: nicht alle Schueler muessen dieselben Faecher * belegen. * * @param schueler Menge an Schuelern (!= null) * @param fach Name des Faches (!= null) * @return die Durchschnittsnote der uebergebenen Schueler in dem * uebergebenen Fach * @throws NichtBelegtesFachException * wird geworfen, wenn kein Schueler das uebergebene Fach belegt */ static double durchschnittsnote(schueler[] schueler, String fach) throws NichtBelegtesFachException Aufgabe 8: Beim Online-Banking muss sich der Bankkunde zunächst mit seiner Kontonummer und einer persönlichen Identifikationsnummer (PIN) am Bankrechner authentifizieren. Für das Auslösen sicherungspflichtiger Aufträge (z. B. einer Überweisung) muss außerdem eine Transaktionsnummer (TAN) übermittelt werden. Diese wird aus einer Liste von 100 TANs entnommen, die dem Kunden vorher zugeschickt und durch ihn freigegeben wurde. An die Transaktionsnummern werden folgende Bedingungen gestellt: Eine TAN ist eine zufällige 6-ziffrige Zahl zwischen 100000 und 999999. Jede TAN kommt nur einmal vor. Jede TAN darf nur einmal verwendet werden. Folgendes ist eine gültige TAN-Liste: 963002 701837 543423 239150 526763 924103 396054 411076 977108 857169 255549 921595 447899 626258 781718 527762 802132 157715 797227 781895 821065 172984 527924 801503 820360 993706 631421 520026 454031 869184 914790 647546 166143 805788 514630 531489 548688 699481 397882 154254 138872 724491 488188 712325 415943 665750 728851 511410 248348 253840 626526 370290 910463 951473 554520 500185 608195 761195 107366 297942 100456 958189 774141 589685 361569 620076 901807 299068 598361 838014 378822 368426 238388 835745 121001 578457 852160 497733 155579 560223 219681 835335 844747 808295 524834 683175 212941 301816 292159 620207 297252 120304 248315 410165 332899 947068 713189 278126 422161 983132 Aufgabe: Implementieren Sie eine Klasse TANListe zur Verwaltung entsprechender Transaktionsnummern. Überlegen Sie sich zunächst eine Datenstruktur zur Speicherung von 100 TANs. Dabei sollen sowohl der Wert jeder TAN als auch ihr Zustand (verbraucht/nicht verbraucht) erfasst werden. Implementieren Sie dann die folgenden Methoden: 1. Einen Konstruktor, in dem die 100 nicht-verbrauchten TANs der TAN-Liste erzeugt und gespeichert werden. 2. Eine boolesche Methode verbrauchen mit einem int-wert als Parameter. Die Methode soll prüfen, ob (im Parameter) eine gültige, nicht verbrauchte TAN der TAN-Liste übermittelt wurde. In diesem Fall soll die TAN in der Liste als

verbraucht markiert sowie der Rückgabewert true geliefert werden. In allen anderen Fällen soll false zurückgegeben werden. 3. Eine Methode print, durch die die noch nicht verbrauchten TANs der TAN- Liste auf den Bildschirm ausgegeben werden. Aufgabe 9: Langtons Ameise ist eine Turingmaschine mit einem zweidimensionalen Speicher und wurde 1986 von Christopher Langton entwickelt. Sie ist ein Beispiel dafür, dass ein deterministisches (das heißt nicht zufallsbedingtes) System aus einfachen Regeln sowohl für den Menschen visuell überraschend ungeordnet erscheinende als auch regelmäßig erscheinende Zustände annehmen kann. (Quelle: Wikipedia) Ausgangspunkt: Gegeben sei eine quadratische 2-dimensionale Welt mit SIZE * SIZE Zellen. SIZE (hier SIZE = 200) sei die Anzahl der Reihen und Spalten. Die Zellen können zwei Zustände einnehmen (weiß und schwarz). Anfangs sind alle Zellen weiß. In dieser Welt lebt genau eine Ameise. Anfangs befindet sich die Ameise auf der Zelle in der Mitte der Welt und schaut nach Norden. Nun wird STEPS (hier STEPS = 40000) mal folgender Ameisenalgorithmus ausgeführt: Befindet sich die Ameise auf einer weißen Zelle, so färbt sie sie schwarz, dreht sich um 90 Grad nach rechts und begibt sich auf die nächste Zelle in der neuen Blickrichtung. Befindet sich die Ameise auf einer schwarzen Zelle, so färbt sie sie weiß, dreht sich um 90 Grad nach links und begibt sich auf die nächste Zelle in der neuen Blickrichtung. Die Welt sei dabei ein Torus, d.h. wenn die Ameise die Welt nach oben verlässt, erscheint sie wieder unten und umgekehrt; wenn sie die Welt nach links verlässt, erscheint sie wieder rechts und umgekehrt. Vorgabe: Gegeben Sei folgendes Programm: import java.awt.borderlayout; import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.image.bufferedimage; import javax.swing.jframe; import javax.swing.jpanel; public class LangtonAnt { private static final int SIZE = 200; private static final int STEPS = 40000; public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { @Override public void run() { // erzeugt eine Welt der Groesse SIZE * SIZE

World world = new World(LangtonAnt.SIZE); ); AntWorldPanel worldpanel = new AntWorldPanel(world); AntFrame frame = new AntFrame(worldPanel); frame.setlocation(100, 100); frame.setresizable(false); frame.setvisible(true); AntSimulation simulation = new AntSimulation(world, LangtonAnt.STEPS, worldpanel); simulation.start(); class AntSimulation extends Thread { private World world; private int steps; private AntWorldPanel panel; AntSimulation(World world, int steps, AntWorldPanel panel) { this.world = world; this.steps = steps; this.panel = panel; @Override public void run() { try { for (int i = 0; i < this.steps; i++) { // holt sich die Ameise aus der Welt Ant ant = this.world.getant(); // fuehrt einmal den Ameisenalgorithmus aus ant.nextstep(); Runnable() { if (i % 30 == 0) { javax.swing.swingutilities.invokeandwait(new @Override public void run() { AntSimulation.this.panel.repaint(); ); catch (Exception exc) { exc.printstacktrace(); class AntFrame extends JFrame { AntFrame(AntWorldPanel world) { super("langtons Ant"); this.setdefaultcloseoperation(jframe.exit_on_close); this.setlayout(new BorderLayout()); this.add(world); this.pack(); class AntWorldPanel extends JPanel { private World world; private BufferedImage image;

AntWorldPanel(World world) { this.world = world; this.setpreferredsize(new Dimension(world.getSize(), world.getsize())); this.image = new BufferedImage(world.getSize(), world.getsize(), BufferedImage.TYPE_INT_ARGB); @Override protected void paintcomponent(graphics g) { super.paintcomponent(g); Graphics buffer = this.image.getgraphics(); buffer.setcolor(color.white); buffer.fillrect(0, 0, this.image.getwidth(), this.image.getheight()); for (int row = 0; row < this.world.getsize(); row++) { for (int column = 0; column < this.world.getsize(); column++) { // liefert true, wenn die Zelle in Zeile row und // Spalte column sich im Zustand schwarz befindet if (this.world.iscellblack(row, column)) { buffer.setcolor(color.black); else { buffer.setcolor(color.white); buffer.fillrect(column, row, 1, 1); g.drawimage(this.image, 0, 0, null); Aufgabe: Implementieren Sie die fehlenden Klassen World und Ant, die die Welt bzw. die Ameise repräsentieren. Wenn Sie alles korrekt gemacht haben, sollte innerhalb einiger Sekunden nach und nach das folgende Fenster auf dem Bildschirm erscheinen.

Hinweise: Sie brauchen den vorgegebenen Code nicht komplett zu verstehen; schauen Sie sich nur die Stellen an, an denen die Klassen World bzw. Ant genutzt werden. Hier stehen entsprechende Kommentare. Insbesondere brauchen Sie aus den Klassen World und Ant nicht auf die gegebenen Klassen zugreifen! Sie dürfen die vorgegebenen Klassen nicht ändern!