Update of exercises

master
Thomas Smits 2023-03-20 17:02:59 +01:00
parent acddfd7d07
commit 62b2c05450
5 changed files with 140 additions and 20 deletions

View File

@ -1,22 +1,22 @@
# Vorhandene Bibliotheken als JAR einbinden
# Information-Hiding einer Klasse verbessern
## Lernziel
Eine vorhandene Bibliothek in einem Projekt verwenden und hierzu ein JAR einbinden.
Bei einer vorhandenen Klasse Information Hiding verbessern und Seiteneffekte reduzieren.
## Aufgabe
Im Paket [pr2.strukturierung.jars_einbinden](../sources/src/main/java/pr2/strukturierung/jars_einbinden/) finden Sie eine Klasse `PieChart`, deren Rumpf auskommentiert ist.
Im Paket [pr2.strukturierung.information_hiding](../sources/src/main/java/pr2/strukturierung/information_hiding/) finden Sie eine Klasse namens `Rechner`, die eine sehr einfachen Taschenrechner repräsentiert. Außerdem finden Sie einen passenden JUnit-Test `RechnerTest`, der die Funktionsweise des Taschenrechners demonstriert.
In dieser Aufgabe werden Sie die Bibliothek [JFreeChart](http://www.jfree.org/jfreechart/) für die Darstellung von Grafiken verwenden. Hierzu müssen die JARs der Bibliothek in das Projekt eingebunden werden.
Führen Sie den JUnit-Test aus und vergewissern Sie sich, dass der Taschenrechner korrekt funktioniert.
Die beiden JAR-Dateien `jcommon-1.0.23.jar` und `jfreechart-1.0.19.jar` liegen bereits im `lib`-Ordner des Projektes, sind aber noch nicht in das Projekt eingebunden.
Schauen Sie sich die Klasse `Rechner` genau an und überlegen Sie, welche Probleme hier vorliegen. Denken Sie an die in der Vorlesung diskutierten Prinzipien des _Information Hiding_ und der _Minimierung von Seiteneffekten_.
Binden Sie die Bibliotheken über den entsprechenden Dialog in Eclipse ein: `Properties` -> `Java Build Path` -> `Libraries` -> `Add JARs`...
Schreiben Sie die Klasse und die Tests so um, dass die genannten Prinzipien besser erfüllt werden.
Kommentieren Sie die auskommentierten Passagen in der Klasse `PieChart` wieder ein und starten Sie das Programm. Experimentieren Sie ein wenig mit Werten, die dargestellt werden.
Führen Sie die Tests erneut aus und stellen Sie sicher, dass die Berechnungen noch korrekt erfolgen.
## Abgabe (optional)

View File

@ -0,0 +1,30 @@
# Vorhandene Bibliotheken als JAR einbinden
## Lernziel
Eine vorhandene Bibliothek in einem Projekt verwenden und hierzu ein JAR einbinden.
## Aufgabe
Im Paket [pr2.strukturierung.jars_einbinden](../sources/src/main/java/pr2/strukturierung/jars_einbinden/) finden Sie eine Klasse `PieChart`, deren Rumpf auskommentiert ist.
In dieser Aufgabe werden Sie die Bibliothek [JFreeChart](http://www.jfree.org/jfreechart/) für die Darstellung von Grafiken verwenden. Hierzu müssen die JARs der Bibliothek in das Projekt eingebunden werden.
Die beiden JAR-Dateien `jcommon-1.0.23.jar` und `jfreechart-1.0.19.jar` liegen bereits im `lib`-Ordner des Projektes, sind aber noch nicht in das Projekt eingebunden.
Binden Sie die Bibliotheken über den entsprechenden Dialog in Eclipse ein: `Properties` -> `Java Build Path` -> `Libraries` -> `Add JARs`...
Kommentieren Sie die auskommentierten Passagen in der Klasse `PieChart` wieder ein und starten Sie das Programm. Experimentieren Sie ein wenig mit Werten, die dargestellt werden.
## Abgabe (optional)
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
1. Öffnen Sie eine Kommandozeile (Terminal).
2. Gehen Sie in Ihr Working Directory.
3. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -7,7 +7,7 @@ Hier finden Sie die freiwilligen Übungen zur Vorlesung Programmieren 2 (PR2). D
Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md).
| # | Ausgabe | Thema |
|----|------------------------------------------------------------------------|----------------|
|----|-------------------------------------------------------------------------|----------------|
| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) |
| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) |
| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) |
@ -18,4 +18,5 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstat
| 8. | 01.01.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) |
| 9. | 01.01.2023 | [JavaDoc schreiben](Assignment_009/readme.md) |
| 10. | 01.01.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) |
| 11. | 01.01.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_011/readme.md) |
| 11. | 01.01.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) |
| 12. | 01.01.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) |

View File

@ -0,0 +1,51 @@
package pr2.strukturierung.information_hiding;
/**
* Ein einfacher Taschenrechner.
*/
public class Rechner {
/** Ergebnis des Taschenrechners. */
public double wert;
/** Speicher des Taschenrechners. */
public double speicher;
/**
* Addiert zwei Werte und gibt das Ergebnis zurück.
*
* @param a erster Operand.
* @param b zweiter Operand.
* @return das Ergebnis.
*/
public void addiere(double a, double b) {
wert = a + b;
}
/**
* Subtrahiert zwei Werte und gibt das Ergebnis zurück.
*
* @param a erster Operand.
* @param b zweiter Operand.
* @return das Ergebnis.
*/
public void subtrahiere(double a, double b) {
wert = a - b;
}
/**
* Multipliziert zwei Werte und gibt das Ergebnis zurück.
*
* @param a erster Operand.
* @param b zweiter Operand.
* @return das Ergebnis.
*/
public void multipliziere(double a, double b) {
wert = a * b;
}
/**
* Speichert den aktuellen Wert in der Variable {@speicher}.
*/
public void speichern() {
speicher = wert;
}
}

View File

@ -0,0 +1,38 @@
package pr2.strukturierung.information_hiding.test;
import org.junit.jupiter.api.Test;
import pr2.strukturierung.information_hiding.Rechner;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Unit-Test für den Rechner.
*/
public class RechnerTest {
/**
* Testet alle Grundoperationen des Rechners.
*/
@Test
void testRechner() {
Rechner r = new Rechner();
// 2 + 2 = 4
r.addiere(2.0, 2.0);
assertEquals(4.0, r.wert, 0.0001);
// 3 - 1 = 2
r.subtrahiere(3, 1);
assertEquals(2.0, r.wert, 0.0001);
// 3 * 3 = 9
r.multipliziere(3, 3);
assertEquals(9.0, r.wert, 0.0001);
// 2 + 2 * 2 = 6
r.multipliziere(2, 2);
r.speichern();
r.addiere(2, r.speicher);
assertEquals(6.0, r.wert, 0.0001);
}
}