Sie sind auf Seite 1von 7

Programmierung I

Praktikum 7
Klassen, Objekte, Instanzvariablen und Methoden
Allgemeine Hinweise
Lösungen der Aufgaben dieses Aufgabenblatts müssen über die Lernplattform abgegeben
werden, um Punkte für die Klausurzulassung zu erhalten.

Da die Lösungen automatisch überprüft werden, müssen die Spezifikationen und die
Ausgaben der Lösungen genauso eingehalten werden wie sie auf diesem Aufgabenblatt
definiert sind. Hierfür lassen sich die auf der Lernplattform verfügbaren Programmier-
Templates (Projekte) als Vorlage nutzen. Für die Abgabe laden Sie nur die Dateien hoch, die
die einzelnen Klassen enthalten, bitte nicht das gesamte Programmier-Template hochladen.

Es werden nur die Lösungen der Aufgaben bewertet, zu denen eine Punktzahl angegeben ist.
Für Aufgaben oder Aufgabenteile, die als Zusatzaufgaben gekennzeichnet sind, werden keine
Punkte vergeben. Die Bearbeitung ist dennoch sinnvoll für eine Vertiefung der Inhalt. Falls
Sie diese Aufgaben abgeben möchten, nutzen Sie hierfür separate Klassen und Dateien.

Details zu der Klausurzulassung, dem Ablauf des Praktikums und den Abgaben können dem
Leitfaden entnommen werden, der sich auf der Lernplattform befindet. Dort befinden sich
auch der Stundensonderplan und der Semesterterminplan.

Aufgabe 1 – Datensätze verwalten (4 Punkte)


In dieser Aufgabe soll eine eigene Klasse zur Verwaltung eines einfachen Datensatzes erstellt
werden. Von dieser Klasse werden Objekte zur Speicherung von Personendaten erzeugt, um
damit einige einfache Verwaltungsoperationen durchführen zu können.

Hinweis: Dies ist die Basis für die Verwaltung von Listen von (komplexen) Objekten und
einfachen Datenbanken.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Objekte, das
sich in dem Zip-Archiv „Objekte.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-
Datei Datensaetze.java in dem Java-Paket aufgaben/_01datensaetze.

b) Legen Sie in dem Java-Paket aufgaben/_01datensaetze die neue Datei mit dem
Namen Person.java an. Definieren Sie in dieser Datei die Klasse Person. Definieren
Sie innerhalb dieser Klasse die folgenden privaten Instanzvariablen des angegebenen
Typs:
• name vom Typ String
• id vom Typ int
• wohnort vom Typ String

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

Um Zugriff auf diese privaten Instanzvariablen zu erhalten, definieren Sie für jede
Instanzvariable eine Getter- und eine Setter-Methode mit dem nach Java-Konventionen
üblichen Namen und der üblichen Funktion.

Hinweis: Die übliche Signatur für den Zugriff auf Instanzvariable wohnort sieht
folgendermaßen aus.

// Setzt die Instanzvariable wohnort auf einen neuen Wert.


public void setWohnort(String wohnort)

// Liefert den aktuellen Wert der Instanzvariable


// wohnort zurück.
public String getWohnort()

c) Definieren Sie in der main-Methode zwei lokale Variablen person1 und person2
vom Typ Person und initialisieren Sie diese Variablen jeweils mit einem Objekt vom Typ
Person.

Lesen Sie unter Nutzung der Scanner-Klasse in der Reihenfolge name, id,
wohnort die Daten für ein Objekt von der Kommandozeile ein. Speichern Sie diese
Daten in dem Objekt person1. Wiederholen Sie diesen Vorgang für person2.

Geben Sie die Inhalte der beiden Objekte auf der Kommandozeile aus.

Lesen Sie nun die Daten für einen neuen wohnort von der Kommandozeile ein.
Speichern Sie diesen neuen Wohnort in dem Objekt person1 (Änderung des Wohnorts
einer Person).

Geben Sie dann die Inhalte der beiden Objekte auf der Kommandozeile aus.
Insgesamt soll die Ausgabe für Beispieldaten wie folgt aussehen. Erzeugen Sie die
zusätzlichen Informationen für die Ein- und Ausgabe genauso wie in diesem Beispiel
angegeben ist.

Neue Person anlegen


name: Agathe
id: 42
wohnort: Norddeich

Neue Person anlegen


name: Henri
id: 86
wohnort: Bochum

Daten ausgeben
Person 1
name = Agathe
id = 42
wohnort = Norddeich
Person 2

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

name = Henri
id = 86
wohnort = Bochum

Daten ändern
name = Agathe
Neuer wohnort: Dortmund

Daten ausgeben
Person 1
name = Agathe
id = 42
wohnort = Dortmund
Person 2
name = Henri
id = 86
wohnort = Bochum

d) Zusatzaufgabe (0 Punkte): Schreiben Sie unter Nutzung einer Schleife ein interaktives
Programm, das die Auswahl eines der beiden Datensätze erlaubt. Im Anschluss soll
auswählbar sein, welcher Dateneintrag in dem ausgewählten Datensatz geändert werden
soll. Dieser wird eingelesen und in dem entsprechenden Objekt gespeichert. Die
interaktive Auswahl soll die Ausgabe aller Inhalte der beiden Objekte enthalten.

e) Zusatzaufgabe (0 Punkte): Erweitern Sie Ihr Programm so, dass eine vorgegebene
größere Anzahl von Objekten des Typs Person in einem Array gespeichert werden. Die
Daten werden interaktiv eingelesen und können entsprechen geändert, gelöscht oder
angezeigt werden.

Aufgabe 2 – Ampelsteuerung (6 Punkte)


In dieser Aufgabe soll eine eigene Klasse für die Simulation einer Verkehrsampel definiert
werden. In dieser Klasse wird der Zustand (das aktive Lichtzeichen/die aktive Farbe)
verwaltet. Weiterhin sollen die Zustandsübergänge (Übergang zu der nächsten aktiven
Farbe) mithilfe dieser Klasse ermöglicht werden. Mit den Objekten dieser Klasse lässt sich ein
System von Verkehrsampeln simulieren.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Objekte, das
sich in dem Zip-Archiv „Objekte.zip“ auf der Lernplattform befindet. Öffnen Sie die Java-
Datei AmpelSteuerung.java in dem Java-Paket
aufgaben/_02ampel_steuerung.

b) Legen Sie in diesem Paket die neue Datei mit dem Namen Ampel.java an. Definieren
Sie in dieser Datei die Klasse Ampel. Definieren Sie innerhalb dieser Klasse die folgenden
öffentlichen konstanten (final) Klassenvariablen (static) des angegebenen Typs wie
folgt:
public static final int ROT = 0;
public static final int ROTGELB = 1;
public static final int GRUEN = 2;

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

public static final int GELB = 3;

Diese dienen der besseren Zuordnung der Zustände (Farben) der Ampel zu ihrer
Bedeutung.

Definieren Sie innerhalb dieser Klasse die private Instanzvariable aktiveFarbe vom
Typ int und initialisieren Sie diese mit dem (konstanten) Wert ROT.

Um Zugriff auf diese private Instanzvariable zu erhalten, definieren Sie hierfür eine
Getter- und eine Setter-Methode mit dem nach Java-Konventionen üblichen Namen und
der üblichen Funktion (siehe Hinweis in der Aufgabe oben).

Implementieren Sie in dieser Klasse die öffentliche Methode


getAktiveFarbeAsString, die den aktuellen Zustand des Objekts (die Farbe der
Ampel) als Zeichenkette (String) zurückliefert. Dabei sollen dieselben Zeichenketten
verwendet werden, wie die unter Aufgabenteil b) definierten Konstanten-Namen, also
„ROT“, „GELBGRUEN“, „GRUEN“ und „GELB“. Diese Methode lässt sich für
die (benutzerfreundliche) Ausgabe des aktuellen Zustands der Ampel auf der
Kommandozeile nutzen.

Implementieren Sie in dieser Klasse die öffentliche Methode


schalteAufNaechsteFarbe, die die Ampel abhängig von dem aktuellen Zustand
(von der aktuellen Farbe) in den nächsten Zustand (in die nächste Farbe) umschaltet.
Dabei soll die übliche Folge deutscher Verkehrsampeln zur Anwendung kommen: ROT,
ROTGELB, GRUEN, GELB, ROT, usw.

c) Definieren Sie in der main-Methode eine lokale Variable ampel vom Typ Ampel und
initialisieren Sie diese Variable mit einem Objekt vom Typ Ampel.

Implementieren Sie eine Schleife, die genau neun (9) Mal durchläuft und bei jedem
Durchlauf den Zustand (die Farbe) der Ampel auf der Kommandozeile ausgibt und im
Anschluss den Zustand (die Farbe) der Ampel weiterschaltet. Die Ausgabe soll
folgendermaßen aussehen.

ROT
ROTGELB
GRUEN
GELB
ROT
ROTGELB
GRUEN
GELB
ROT

d) Zusatzaufgabe (0 Punkte): Erweitern Sie Ihr Programm um eine weitere Ampel. Der
Zustand der Ampeln soll innerhalb einer Schleife jeweils weitergeschaltet werden, so
dass eine Ampel grün ist wenn die andere Ampel rot ist. Die Ausgabe soll
folgendermaßen aussehen.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

ampel1: ROT, ampel2: GRUEN


ampel1: ROTGELB, ampel2: GELB
ampel1: GRUEN, ampel2: ROT
ampel1: GELB, ampel2: ROTGELB
ampel1: ROT, ampel2: GRUEN
ampel1: ROTGELB, ampel2: GELB
ampel1: GRUEN, ampel2: ROT
ampel1: GELB, ampel2: ROTGELB
ampel1: ROT, ampel2: GRUEN
ampel1: ROTGELB, ampel2: GELB

e) Zusatzaufgabe (0 Punkte): Da die Lösung der vorherigen Teilaufgabe nicht verkehrssicher


ist, erweitern Sie Ihr Programm so, dass eine Ampel nur dann auf gelb und grün
geschaltet wird, wenn die anderer rot ist. Die Ausgabe soll folgendermaßen aussehen.

ampel1: ROT, ampel2: GRUEN


ampel1: ROT, ampel2: GELB
ampel1: ROT, ampel2: ROT
ampel1: ROTGELB, ampel2: ROT
ampel1: GRUEN, ampel2: ROT
ampel1: GELB, ampel2: ROT
ampel1: ROT, ampel2: ROT
ampel1: ROT, ampel2: ROTGELB
ampel1: ROT, ampel2: GRUEN
ampel1: ROT, ampel2: GELB
ampel1: ROT, ampel2: ROT
ampel1: ROTGELB, ampel2: ROT
ampel1: GRUEN, ampel2: ROT
ampel1: GELB, ampel2: ROT
ampel1: ROT, ampel2: ROT
ampel1: ROT, ampel2: ROTGELB
ampel1: ROT, ampel2: GRUEN
ampel1: ROT, ampel2: GELB

f) Zusatzaufgabe (0 Punkte): Erweitern Sie Ihr Programm, so dass anstatt einer festen
Anzahl von Schleifendurchläufen der Benutzer bei jedem Zustandswechsel (Farbwechsel
einer Ampel) entscheiden kann, ob weitergeschaltet oder das Programm abgebrochen
wird.

Aufgabe 3 – ASCII-Art-Weihnachtsbaum (10 Punkte)


In dieser Aufgabe soll eine Java-Methode entwickelt werden, die eine Zeichenkette
zurückgibt, die bei der Ausgabe auf der Kommandozeile einen Weihnachtsbaum darstellt.
Für die Erzeugung dieser zusammengesetzten Zeichenkette sollen Objekte der Java-Klasse
StringBuilder zum Einsatz kommen.

a) Öffnen Sie mit Visual Studio Code (VSC) mit Java Extensions das Projekt Objekte, das
sich in dem Zip-Archiv „Methoden.zip“ auf der Lernplattform befindet. Öffnen Sie die
Java-Datei Weihnachtsbaum.java in dem Java-Paket
aufgaben/_03weihnachtsbaum.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

b) Implementieren Sie in der Klasse Weihnachtsbaum die öffentliche Methode


erzeugeWeihnachtsbaum, mit der folgenden Signatur.

public StringBuilder erzeugeWeihnachtsbaum(int hoehe)

Hierbei definiert der Parameter hohe die Anzahl der Zeilen, aus dem ein
Weihnachtsbaum besteht. Als Ergebnis liefert die Methode ein StringBuilder-
Objekt zurück, das die Zeichenkette des Weihnachtsbaums enthält.

Alternativ kann auch eine Methode mit der folgenden Signatur entwickelt werden, die
ein String-Objekt zurückliefert, das die Zeichenkette des Weihnachtsbaums enthält.

public String erzeugeWeihnachtsbaum(int hoehe)

Der Weihnachtsbaum muss im Sinne dieser Aufgabe die folgenden Anforderungen


erfüllen:
• Der Weihnachtbaum muss eine Höhe von 𝑛𝑛 > 3 Zeilen haben, wobei 𝑛𝑛 als der
Parameter hoehe übergeben wird.
• Der Weihnachtsbaum besteht aus (𝑛𝑛 – 3) Zeilen, welche die Baumkrone
repräsentieren, einer Zeile, die den unteren Rand der Baumkrone darstellt und 2
Zeilen, die den Baumstamm repräsentieren.
• Der Weihnachtsbaum soll die Form eines Dreieckes mit folgenden
Eigenschaften haben:
o Die oberste Zeile (Zeile 0) soll aus zwei Zeichen zur Darstellung des
Baumes bestehen. Auf der linken Seite steht das Zeichen / und auf der
rechten Seite steht das Zeichen \.
o Die Zeilen 𝑖𝑖 ∈ [1, … , 𝑛𝑛 − 4] sollen aus jeweils 2 ∙ 𝑖𝑖 Zeichen zur Darstellung
des Baumes bestehen, wobei auf der linken Seite wieder das Zeichen /
und auf der rechten Seite das Zeichen \ zur Darstellung des Randes
ausgegeben wird.
o Zwischen den Rändern soll der Baum abwechselnd Kerzen (jede Kerze
dargestellt durch das Zeichen ^) und Kugeln (dargestellt durch das
Zeichen *) enthalten.
o Der untere Rand (Zeile (𝑛𝑛 − 3)) soll mittels einer Folge der Zeichen -
dargestellt werden.
o Der Baumstamm (Zeile (𝑛𝑛 – 2) und (𝑛𝑛 − 1)) soll aus 2 Zeilen bestehen,
welche jeweils 2 Zeichen breit sind und den Baumstamm mittels des
Zeichens | darstellen.
• Es ist darauf zu achten, dass der Baum nicht schief ist, d.h. der Rand der
breitesten Zeile des Baumes soll sich ganz links auf der Kommandozeile befinden,
Baumspitze und Stamm sollen sich in der Mitte des Baumes befinden und der
linke und rechte Rand sollen in jeweils einer diagonalen Linie auf die Baumspitze
zulaufen. Dazu müssen die Leerräume (die sogenannten Whitespaces) neben der
linken Seite des Baumes) mit Leerzeichen aufgefüllt werden.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle
Programmierung I

Nach dieser Spezifikation sieht ein Weihnachtsbaum der Höhe (höhe) n = 6


folgendermaßen aus:

Weihnachtsbaum der Höhe 6:


/\
/^*\
/^*^*\
------
||
||

Hinweise:
• Bauen Sie den String (in dem StringBuilder-Objekt) zur Darstellung des
Baumes Zeile für Zeile auf. Nutzen Sie geeignete Schleifenkonstrukte. Da die
Anzahl der Zeilen bekannt ist und sich daraus ableiten lässt, wieviele Zeichen in
jeder Zeile ausgegeben werden müssen, können am einfachsten zwei ineinander
geschachtelte for-Schleifen genutzt werden.
• Informationen über die Klasse StringBuilder finden sich in der Java-
Dokumentation und den einschlägigen Foren.
• Um Ihre Implementierung zu testen, kann das StringBuilder-Objekt (mit
dem Ergebnis) durch die Methode System.out.println auf der
Kommandozeile ausgeben werden.
• Der Weihnachtsbaum soll sich für (fast) beliebige Höhen hoehe generieren
lassen.
• Wie oben angegeben, kann anstelle der Klasse StringBuilder die Klasse
String verwendet werden.

Prof. Dr. Lehn, Prof. Dr. Igel, Prof. Dr. Menküc, Prof. Dr. Wöhrle

Das könnte Ihnen auch gefallen