Peter Griffin
Commander
- Registriert
- Jan. 2010
- Beiträge
- 2.828
Ich sitze hier gerade an einer Programmier-Aufgabe und weiß beim besten Willen nicht weiter.
Die Aufgabe:
Darunter folgten dann jeweils die Quellcodes.
Wir arbeiten mit Eclipse. Das Problem ist jetzt, dass ich nicht mal weiß, wie ich überhaupt anfangen soll. Ich habe zunächst im neuen Eclipse-Workspace natürlich erst mal ein neues Projekt erstellt. Hier habe ich dann mit New -> Class eine neue Quellcode-Datei erzeugt. Den Text, der ja standardmäßig erst mal drin ist, habe ich rausgenommen und dafür den Quellcode aus der Aufgabe wie erfordert reinkopiert. Soweit ist noch alles gut, es werden also keine Fehler usw. angezeigt.
Jetzt soll ich ja aber die Klasse mit JUnit testen. Problematisch wird es jetzt schon mit dem Punkt "Stack Klasse auswählen". Ich gehe also auf "Browse" und es öffnet sich ein leeres Dialogfenster. Nachdem ich "Stack" oben eingegeben habe, erscheint eine Liste aus mehreren Einträgen (siehe Anhang). Hier soll ich nun die Stack-Klasse auswählen. Aber welchen Eintrag soll ich denn jetzt hier auswählen? Ich hatte einfach den obersten genommen, da dieser mir "richtig" erschien.
Es wurde also diese Testdatei erstellt, sodass ich in meinem Package Explorer nun zwei Quellcode-Dateien habe: die mit dem interface Stackable und dann eben die StackTest. In der StackTest-Datei steht dann bereits was drin, und ich wusste nun nicht, ob das nur um den Quellcode 2 aus der Aufgabe ergänzt oder aber ersetzt werden sollte. Also habe ich erstmal nur hinzugefügt. Da wurde dann aber vieles rot unterstrichen (vom Quellcode aus der Aufgabe auffälligerweise immer "Stack" und "myStack" sowie der komplette Teil, der sowieso schon in der Testdatei drin war). Dann habe ich den Teil, der schon drin war, rausgelöscht, sodass nur noch der Quellcode, denn wir vom Aufgabenblatt reinkopieren sollen, stehen bleibt. "myStack" und "Stack" blieben weiterhin stets rot unterstrichen. Beim Raufzeigen mit dem Mauszeiger wurde mir dann angezeigt "cannot be resolved to a type".
Ziel von diesem Test soll ja sein, dass keine Test-Methoden (pop, peek, push, size usw.) fehlschlagen, indem man den Stack geeignet implementiert. Aber ich kann den Test ja gar nicht erst ausführen.
Am unsichersten bin ich mir letztendlich bei folgenden Punkten:
Ich habe mich jetzt stundenlang zu dem Thema belesen, aber trotzdem nichts Aufschlussreiches zu dieser Aufgabe finden können. Und das ist ja gerade mal die Vorbereitung/Einrichtung der Aufgabe, wie soll ich erst die eigentliche Aufgabe bewältigen können?
Wäre echt nett, wenn mir jemand hier eine Starthilfe geben kann.
Danke im Voraus!
Die Aufgabe:
Ihre Aufgabe besteht darin, selbst eine Klasse Stack zu implementieren. Ihre Klasse soll das Interface Stackable (siehe unten) implementieren. (Kopieren Sie den Quelltext in eine neue Quellcode-Datei.) Ihre Klasse soll keine weiteren öffentlichen Methoden anbieten. Verwenden sie intern in Ihrer Klasse eine geeignete Datenstruktur.
Code:package aufgabenblatt05.stack; public interface Stackable { /** * Tests if this stack is empty. * * @return true if and only if this stack * contains no items; false otherwise. */ boolean empty(); /** * Looks at the object at the top of this stack * without removing it from the stack. * * @return the object at the top of this stack. * null if the stack at hand is empty. */ Object peek(); /** * Removes the object at the top of this stack * and returns that object as the value of this function. * * @return The object at the top of this stack. * null if the stack at hand is empty. */ Object pop(); /** * Pushes an item onto the top of this stack. * * @param item * - the item to be pushed onto this stack. */ Object push(Object item); /** * Number of items on the stack. * * @return Number of items contained by the stack. */ int size(); }
Um Ihre Klasse zu testen, erzeugen Sie einen neuen JUnit-Test-Case. Rechtsklick auf Ihr Projekt
→ New → (ggf. Other) → JUnit Test Case → Option „New JUnit 4 test“ →
Name: StackTest → „Class under test: → Browse → Stack Klasse auswählen Kopieren Sie folgenden Quelltext in Ihre Testdatei:
Code:package aufgabenblatt05.stack; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; public class StackTest { Object[] thingsToPush = {1,"Hello","World", 5}; Stack myStack; @Before // findet vor jedem @Test statt public void setUp() throws Exception { myStack = new Stack(); } @Test public void Stack() { assertNotNull(myStack); } @Test public void empty() { assertTrue(myStack.empty()); myStack.push(1); assertFalse(myStack.empty()); } @Test public void size() { assertEquals(0, myStack.size()); int expectedSize = 0; for (Object item : thingsToPush) { myStack.push(item); assertEquals(++expectedSize, myStack.size()); } } @Test public void push() { for (Object item : thingsToPush) { myStack.push(item); assertEquals(item, myStack.peek()); } } @Test public void peek() { for (Object item : thingsToPush) { myStack.push(item); assertEquals(item, myStack.peek()); } } @Test public void peekAtEmptyStack() { assertEquals(null, myStack.peek()); } @Test public void popAtEmptyStack() { assertEquals(null, myStack.pop()); } @Test public void pop() { for (Object item : thingsToPush) { myStack.push(item); } List<Object> thingsPushedReversed = Arrays.asList(thingsToPush); Collections.reverse(thingsPushedReversed); for (Object object : thingsPushedReversed) { assertEquals(object, myStack.pop()); } assertTrue(myStack.empty()); } }
Darunter folgten dann jeweils die Quellcodes.
Wir arbeiten mit Eclipse. Das Problem ist jetzt, dass ich nicht mal weiß, wie ich überhaupt anfangen soll. Ich habe zunächst im neuen Eclipse-Workspace natürlich erst mal ein neues Projekt erstellt. Hier habe ich dann mit New -> Class eine neue Quellcode-Datei erzeugt. Den Text, der ja standardmäßig erst mal drin ist, habe ich rausgenommen und dafür den Quellcode aus der Aufgabe wie erfordert reinkopiert. Soweit ist noch alles gut, es werden also keine Fehler usw. angezeigt.
Jetzt soll ich ja aber die Klasse mit JUnit testen. Problematisch wird es jetzt schon mit dem Punkt "Stack Klasse auswählen". Ich gehe also auf "Browse" und es öffnet sich ein leeres Dialogfenster. Nachdem ich "Stack" oben eingegeben habe, erscheint eine Liste aus mehreren Einträgen (siehe Anhang). Hier soll ich nun die Stack-Klasse auswählen. Aber welchen Eintrag soll ich denn jetzt hier auswählen? Ich hatte einfach den obersten genommen, da dieser mir "richtig" erschien.
Es wurde also diese Testdatei erstellt, sodass ich in meinem Package Explorer nun zwei Quellcode-Dateien habe: die mit dem interface Stackable und dann eben die StackTest. In der StackTest-Datei steht dann bereits was drin, und ich wusste nun nicht, ob das nur um den Quellcode 2 aus der Aufgabe ergänzt oder aber ersetzt werden sollte. Also habe ich erstmal nur hinzugefügt. Da wurde dann aber vieles rot unterstrichen (vom Quellcode aus der Aufgabe auffälligerweise immer "Stack" und "myStack" sowie der komplette Teil, der sowieso schon in der Testdatei drin war). Dann habe ich den Teil, der schon drin war, rausgelöscht, sodass nur noch der Quellcode, denn wir vom Aufgabenblatt reinkopieren sollen, stehen bleibt. "myStack" und "Stack" blieben weiterhin stets rot unterstrichen. Beim Raufzeigen mit dem Mauszeiger wurde mir dann angezeigt "cannot be resolved to a type".
Ziel von diesem Test soll ja sein, dass keine Test-Methoden (pop, peek, push, size usw.) fehlschlagen, indem man den Stack geeignet implementiert. Aber ich kann den Test ja gar nicht erst ausführen.
Am unsichersten bin ich mir letztendlich bei folgenden Punkten:
- Beim Erstellen der ersten Quellcode-Datei mit dem Interface der Package-Name (aufgabenblatt05, aufgabenblatt05.stack oder einfach frei lassen? Habe mich dort jedenfalls für aufgabenblatt05.stack entschieden, da das ja eigentlich auch in den Aufgaben-Quellcodes so hinter "package" steht)
- Auswahl der Stack-Klasse beim JUnit-Test-Case
- Brauche ich vielleicht auch erst noch eine dritte Quellcode-Datei? Oder muss ich die Stackable-Datei erst noch um etwas (außer dem vorgegebenen Quellcode aus der Aufgabe) ergänzen?
Ich habe mich jetzt stundenlang zu dem Thema belesen, aber trotzdem nichts Aufschlussreiches zu dieser Aufgabe finden können. Und das ist ja gerade mal die Vorbereitung/Einrichtung der Aufgabe, wie soll ich erst die eigentliche Aufgabe bewältigen können?
Wäre echt nett, wenn mir jemand hier eine Starthilfe geben kann.
Danke im Voraus!
Anhänge
Zuletzt bearbeitet: