diff --git a/Assignment_011/readme.md b/Assignment_011/readme.md index 216bfae..c4d3d7f 100644 --- a/Assignment_011/readme.md +++ b/Assignment_011/readme.md @@ -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) diff --git a/Assignment_012/readme.md b/Assignment_012/readme.md new file mode 100644 index 0000000..216bfae --- /dev/null +++ b/Assignment_012/readme.md @@ -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. \ No newline at end of file diff --git a/readme.md b/readme.md index e812a04..54a659c 100644 --- a/readme.md +++ b/readme.md @@ -6,16 +6,17 @@ 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) | -| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | -| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | -| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | -| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | -| 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) | +| # | 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) | +| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | +| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | +| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | +| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | +| 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 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | +| 12. | 01.01.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | diff --git a/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java b/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java new file mode 100644 index 0000000..2ed0289 --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java @@ -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; + } +} diff --git a/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java b/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java new file mode 100644 index 0000000..852894f --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java @@ -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); + } +}