Sie sind auf Seite 1von 4

Objektorientierte Programmierung

Übung 03 – Abstrakte Klassen und Polymorphie

Aufgabe 1
Schreiben Sie eine Java-Anwendung, in der elektrische Geräte modelliert werden. In der
Anwendung gibt es folgende Klassen, die im UML-Diagramm dargestellt werden:

Die Klassen werden im Folgenden näher beschrieben:

ElectricalDevice: Basisklasse für alle elektrischen Geräte.


• Die Klasse ist abstrakt, d.h. sie kann nicht instanziiert werden.
• Der Konstruktor initialisiert das Attribut energyConsumption mit dem Parameter des
Konstruktors. Das Attribut isOn wird mit false initialisiert.
• Die abstrakte Methode getStatusInfo(), soll in den ableitenden Klassen Geräteinfos
zurückliefern.
• Das Attribut isOn (true/false) speichert den Zustand, ob das Gerät ein- oder
ausgeschaltet ist. Das Attribut wird durch die Methode switchOn() auf true gesetzt und
durch die Methode switchOff() auf false gesetzt. Die Zugriffsmethode isOn() liefert
den Wert des Attributs isOn zurück.
• Das Attribut energyConsumption modelliert den Energieverbrauch des Geräts. Der Wert
des Attributs soll > 0.0 sein. Bei Werten <= 0 soll eine IllegalArgumentException bei
der Initialisierung zurückgeworfen werden.
• Die Methode getEnergyConsumption() gibt den Energieverbrauch des Geräts im
Allgemeinen zurück. Die Methode ist unabhängig vom Attribut isOn.
• Die Methode getCurrentEnergyConsumption() gibt den aktuellen Energieverbrauch
zurück. Ist das Gerät ausgeschaltet, ist der Rückgabewert 0.0, ansonsten wird der Wert
des Attributs energyConsumption zurückgegeben.
StandByDevice: Basisklasse für Geräte mit Standby-Funktion, erbt von ElectricalDevice.

• Die Klasse ist abstrakt


• Der Konstruktor initialisiert das Attribute standByEnergyConsumption mit dem
Parameter, während der Parameter energyConsumption an den Konstruktor der
Basisklasse weitergereicht wird.
• Das Attribut standByEnergyConsumption modelliert den Verbrauch im Standby-Modus.
Der Wert des Attributs soll immer > 0.0 sein. Bei Werten <= 0 soll eine
IllegalArgumentException bei der Initialisierung zurückgeworfen werden.
• Die Methode getCurrentEnergyConsumption() wird überschrieben: Wenn das Gerät
ausgeschaltet ist, wird der Wert des Attributs standByEnergyConsumption
zurückgeben, ansonsten der Wert des Attributs energyConsumption
Television: Die Klasse modelliert Fernsehgeräte, erbt von StandByDevice
• Im Konstruktor wird die Lautstärke (volume) mit 25 und der Sender (channel) mit 1
initialisiert. Die Parameter energyConsumption und standByEnergyConsumption
werden an den Konstruktor der Basisklasse weitergereicht.
• Das Attribut volume modelliert die Lautstärke. Die Methoden volumeUp() und
volumeDown() erhöhen bzw. verringern die Lautstärke um 1. Die Lautstärke darf nur
Werte zwischen einschließlich 0 und einschließlich 100 annehmen. Kleinere bzw. größere
Werte außerhalb des Wertebereichs werden ignoriert.
• Das Attribut channel modelliert den eingestellten Sender. Die Methode setChannel()
akzeptiert Werte zwischen 1 und 99. Werte außerhalb des Wertebereichs werden
ignoriert. setChannel() verändert nur den Zustand des Geräts, wenn das Gerät
eingeschaltet ist. volumeUp() und volumeDown() verändern nur den Zustand des
Geräts, wenn es eingeschaltet ist.
• Television implementiert die Methode getStatusInfo(), welche einen String im
folgenden Format zurückgibt:
[television, switched on, channel 1, volume 25]

[television, switched off, channel 1, volume 25]

DvdPlayer: Die Klasse modelliert DVD-Player, erbt von StandByDevice


• Der Konstruktor initialisiert das Attribut isPlaying mit false. Die Parameter
energyConsumption und standByEnergyConsumption werden an den Konstruktor der
Basisklasse weitergereicht.
• Das Attribut isPlaying (true/false) speichert den Zustand, ob das Gerät gerade eine
DVD wiedergibt. Das Attribut wird durch die Methode startPlaying() auf true gesetzt
und durch die Methode stopPlaying() auf false gesetzt. startPlaying() und
stopPlaying() verändern nur den Zustand des Geräts, wenn das Gerät eingeschaltet
ist.
• DvdPlayer überschreibt die Methode switchOff(). Wenn das Gerät ausgeschaltet wird,
wird das isPlaying auf false gesetzt.
• Methode isPlaying() gibt den Zustand (true/false) zurück, d.h. ob der DvdPlayer
gerade läuft.
• DvdPlayer implementiert die Methode getStatusInfo(), welche einen String im
folgenden Format zurückgibt:
[DVD player, switched on, playing]

[DVD player, switched on, stopped]


[DVD player, switched off, stopped]

TableLamp: Die Klasse modelliert Schreibtischlampen.

• Der Konstruktor reicht den Parameter energyConsumption an den Konstruktor der


Basisklasse weiter.
• Die Klasse implementiert die Methode getStatusInfo():
[table lamp, switched on]

[table lamp, switched off]

WaterBoiler: Die Klasse modelliert Wasserkocher.


• Der Konstruktor reicht den Parameter energyConsumption an den Konstruktor der
Basisklasse weiter.
• Die Klasse implementiert die Methode getStatusInfo():
[water boiler, switched on]

[water boiler, switched off]

Aufgabe 2
Schreiben Sie eine Klasse Application mit einer main-Methode. Probieren Sie Ihre
Implementierung mit folgendem Code aus:
public static void main(String args[]) {

ArrayList<ElectricalDevice> deviceList = new ArrayList<>();

Television tele = new Television(100.0, 5.0);

deviceList.add(tele);

DvdPlayer dvdPlayer = new DvdPlayer(20.0, 3.0);

deviceList.add(dvdPlayer);

WaterBoiler waterBoiler = new WaterBoiler(2000.0);

deviceList.add(waterBoiler);

TableLamp tableLamp = new TableLamp(30.0);

deviceList.add(tableLamp);

for(ElectricalDevice device : deviceList) {

System.out.println( device.getStatusInfo() );

System.out.println("--------------------");

[television, switched off, channel 1, volume 25]

[DVD player, switched off, stopped]

[water boilder, switched off]

[table lamp, switched off]


Aufgabe 3 – Aktuellen Stromverbrauch aller Geräte ermitteln
Schalten Sie in einer Schleife alle Geräte ein. Verändern Sie außerdem die Attribute des
Fernsehers tele und des DVD-Players dvdPlayer mit folgendem Code.
for(ElectricalDevice device : deviceList) {

device.switchOn();

tele.setChannel(30);

tele.volumeUp();

tele.volumeDown();

tele.volumeUp();

dvdPlayer.startPlaying();

Geben Sie erneut mit getStatusInfo() den Zustand aller Geräte aus. Ermitteln Sie danach
mit getCurrentEnergyConsumption() den Verbrauch jedes einzelnen Geräts und
summieren Sie die einzelnen Werte auf:
[television, switched on, channel 30, volume 26]

[DVD player, switched on, playing]

[water boiler, switched on]

[table lamp, switched on]

--------------------

Sum energy consumption: 2150.0

Aufgabe 4 – Alle Geräte ausschalten


Schalten Sie alle Geräte mit einer Schleife aus. Ermitteln Sie nun den Stromverbrauch aller
Geräte zusammen.
[television, switched off, channel 30, volume 26]

[DVD player, switched off, stopped]

[water boiler, switched off]

[table lamp, switched off]

--------------------

Sum energy consumption: 8.0

Der verbliebene Verbrauch ergibt sich aus den Geräten mit Standby-Funktion.

Abgabe der Lösungsaufgabe auf Moodle:


Bitte komprimieren Sie das gesamte Projektverzeichnis, welches Sie für die Übung angelegt
haben, als Zip-Datei. Bitte achten Sie darauf, dass alle Java-Quellcode-Dateien, die Sie erstellt
haben, enthalten sind. Das Zip-Archiv muss im Dateinamen beide Nachnamen der
Teammitglieder enthalten. Laden Sie die Zip-Datei bitte auf Moodle hoch. Eine Abgabe pro
Team (max. 2 Personen) ist ausreichend. Beide Teammitglieder müssen den hochgeladenen
Code in der nächsten Übung erklären und Fragen dazu beantworten können.

Das könnte Ihnen auch gefallen