Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Kassenbon++

< Javakurs‎ | Übungsaufgaben
Version vom 26. Februar 2011, 11:51 Uhr von Mario (Diskussion | Beiträge) (Neue Aufgabe)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Diese Aufgabe wird dir zeigen, wie man die Aufgabe Javakurs/Übungsaufgaben/Kassenbon via Kapselung löst.

Vorgabe

Folgender Code könnte als Einstiegspunkt für einen Objektorientierten Kassebon dienen. Dabei sollen mehrere Klassen miteinander interagieren: Receipt (der eigentliche Kassenbon) und ReceiptItem(ein Eintrag in dem Kassenbon). Am Anfang der main-Methode wird der Kassebon erstellt. Dannach werden vier Einträge an den Bon angefügt und letzlich der Bon ausgegeben.

/**
 * Main class for Receipt++
 *
 * @author Mario
 */
public class Main {

	/**
	 * This method will start all sub tests defined.
	 */
	public static void main(String[] args) {
		// buy some items and create a receipt for it
		Receipt r = new Receipt();		
		r.add( new ReceiptItem("15 Fischstäbchen", 3, 1.79) );
		r.add( new ReceiptItem("Steaks", 5, 3.99) );
		r.add( new ReceiptItem("Naturelle (1l)", 6, 4.99) );
		r.add( new ReceiptItem("Magnum Eis Creme", 2, 2.99) );
		
		// output receipt in a linear fashion
		r.print();
	}
}


Folgendes könnte die Ausgabe sein:

╔════════════════════════╗
║ FreitagsrundenShop 042 ║
║   Franklinstr. 28/29   ║
║       10587 Berlin     ║
║     ☏ 030 314 213 86   ║
╚════════════════════════╝

15 Fischstäbchen         
  3x                  1.79
Steaks                   
  5x                  3.99
Naturelle (1l)           
  6x                  4.99
Magnum Eis Creme         
  2x                  2.99

                     =====
Summe EUR            61.24
                     =====


Aufgabe

Sobald du die Idee der Vorgabe verstanden hast, solltest du dir folgende Aufgaben ansehen, damit du lauffähigen Code erzeugst:

Das heißt:

  • Schreibe eine Klasse Receipt, die alle gekauften Gegenstände aufnimmt.
    • Füge einen default-Konstruktor hinzu
    • Als einzige Eigenschaft brauchst du hier einen dynamischen Speicher, der beliebig viele Objekte aufnehmen kann. Am besten die Vector-Klasse aus der JavaAPI.
      • Schau dir dazu die Dokumentation von Vector in der Java6 API an.
      • Als Typ brauchst du dann Vector<ReceiptItem>
        (Was genau dies bedeutet, ist erstmal egal, dass kannst du dir später selbst aneigenen oder jetzt einen Tutor fragen)
      • Wichtig ist die Methode Vector.add(..), welche ein Objekt anfügt.
    • Schreibe dir auch noch eine Methode print, die alle Elemente des Vectors ausgibt.
      for( ReceiptItem item : VECTOR ){ }
      gibt dir innerhalb der Schleife in der Variable item alle Elemente zurück, wenn du für VECTOR deinen Variable vom Typ Vector von oben angibst.
  • Schreibe des Weiteren eine Klasse ReceiptItem welche nacher zu der Receipt-Klasse hinzugefügt werden wird.
    • Diese braucht alle Eigenschaften eines Rechnungsgegenstandes, also Name, Preis(pro Einheit) und Anzahl(der Einheiten)
    • Stelle sicher, dass die Eigenschaften nur innerhalb der Klasse verändert werden können (public vs. private vs. protected, welches ist hier richtig, warum?)
    • Schreibe für jede Eigenschaft einen getter und einen setter
    • Denke dran, bei den setter-Methoden die Eingabewerte zu überprüfen, damit du bspw. keine negativen anzahlen für Gegenstände angeben kannst
    • Erstelle letzlich auch einen Konstruktor mit allen drei Eigenschaften


Abschluss

Teste nun, ob deine Implementierung den Vorgaben entspricht.

Auch ist zu empfehlen jetzt noch etwas mit dem Code zu spielen. Folgende Aufgaben sind nur als Anregung gedacht, und werden ohne Musterlösung gegeben:

  • füge weitere Objekte ein
  • versuche die Kapselung zu brechen (Negative Preise, Leere Namen, ...).
  • Brieftaschen Aufgabe lösen: Was müsstest du tun, um eine Rechnung zu erstellen, die möglichst genau einen gegebenen Betrag kostet.