# Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen



## Nighthawk2k7 (9. Feb 2007)

Hallo ich hab hier eine aufgabe aus dem Studium einer Probeklausur.
Ich hab da mal eine Frage wie ihr das realisieren würdet, denn igrnedwie komm ich damit noch nicht so ganz klar. ich versteh die theorie der Objektorientierten Programmierung, allerdings hapert es noch an der Umsetzung in java, da ich in der Ausbildung nur Delphi gelernt hab.
in der Aufgabe geht es um folgendes:

*Für einen Onlineshop sei folgendes Pflichtenheft gegeben:*
1 Jeder Warenkorb hat eine fortlaufende Nummer.
2 Der erste Warenkorb erhält die nummer 1
3 Die Nummer eines Warenkorbs kann abgefragt, aber nicht geändert werden.
4 Eine Ware hat eine Bezeichnung und einen Preis
5 Beim neuanlegen einer Ware wird der preis und die bezeichnung gespeichert.
6 Die Bezeichnung einer Ware kann abgefragt, aber nicht geändert werden.
7 Der preis einer Ware kann abgefragt und geändert werden.
8 Ein Warenkorb kann eine Ware hinzugefügt werden.
9 Ein warenkorb kann bis zu 25 Waren hinzugefügt werden.
10Für einen Warenkorb kann der gesamtwert der enthalten Waren berechnet werden

man soll auch aufs Geheimnisprinzip achten, das es eingehlten wird.

Ich hab mir jetzt folgende Überlegungen gemacht:
*Für die ersten beiden Punkte:*
mein methode:

```
int anzahl;
	anzahl=Integer.parseInt(args[0]);
	Warenkorb[] warenkoerbe = new Warenkorb[anzahl];
	for (int i=0;i<warenkoerbe.length;i++)
	    warenkoerbe[i] = new Warenkorb(i);
```

*zu Punkt 3*: wird doch eine getmethode verwendet, wegen geheimnisprinzip oder?
*zu Punkt 4*: Geh ich richtig der annahme das für jede Ware ebenfalls ein Objekt erzeugt werden sollte, das dann in dem Warenkorb liegt oder wäre es besser z.b.: in dem Warenkorb als ein Attribut ein Array zu benutzen, das einer ware entspricht, bei jedem Element bis 25(Punkt 9)?

Eine ware sollte aber schon ein Objekt sein, da die Bezeichnung abgefrgat aber nicht geändert werden soll, während beim preis beides möglich sein soll.
Nur wie kann ich denn dann Ein Objekt Ware in das Objekt Warenkorb packen? Muss dann das objekt Warenkorb ein objekt Ware erstellen, das heißt das der Kontruktor des Warenkorbs den der Waren aufruft?

Bin für anregungen offen und danke schonmal für eure Zeit und hilfe.


----------



## SlaterB (9. Feb 2007)

> Für die ersten beiden Punkte: 
was soll denn anzahl sein, wo ist von einem Array von Warenkorb die Rede?

die Nummer ist eine Exemplarvariable im Warenkorb,
die Nummer ist fortlaufend, also muss man den aktuellen Stand speichern, z.B. in einer statischen Variablen in der Klasse,

falls du bei jedem Programmstart diese forlaufende Nummer neu setzen möchtest, dann ist das Einlesen der Zahl gar nicht dumm,
aber sowas muss man doch kommenieren (und steht nicht in der Aufgabe)

damit die Nummer eindeutig ist sollte sie auf keinen Fall im Konstruktor mit übergeben werden,
stattdessen wählt der Konstruktor selber eine neue Nummer
(statische Variable +1)

3.) jo
4.) auf jeden Fall gibts Waren-Objekte, 25-er Array ist ne gute Idee,
aber wieder intern in Warenkorb drinnen, von außen weiß man davon nix

> Nur wie kann ich denn dann Ein Objekt Ware in das Objekt Warenkorb packen? 

ganz einfach:
Ware x = ..;
Warenkorb y = ..;
y.addWare(x);

> Muss dann das objekt Warenkorb ein objekt Ware erstellen, 
> das heißt das der Kontruktor des Warenkorbs den der Waren aufruft? 

erstens: Warenkorb soll ein vorhandene Ware aufnehmen, keine neue erstellen?
und wenn überhaupt, dann würde das doch nicht im Konstruktor von Warenkorb passieren,
der wird doch nur bei der Erstellung des Warenkorbs verwendet,
nicht später wenn du Waren einfügst


----------



## Nighthawk2k7 (9. Feb 2007)

Danke schonmal für deine Hilfe. Das waren nur so ein paar ideen meinerseits mit dem Array etc. Mir ist die theorie schon klar, allerdings hapert es noch an der umsetzung, damit das grobe auch ein Bild darstellt und alles sinn macht. Mal in Metaphern gesprochen. ;-)
Das mit dem add.ware werde ich mal ausprobieren, ich denke damit komm ich schonmal weiter. Wenn ich noch mal eine frage hab meld ich mich, aber erstmal weiter probieren, will ja auch was lernen.


----------



## TgSchueler (13. Mrz 2007)

Generell würde ich erst einmal ein Klassendiagramm von der Aufgabe machen.

Übrigens:
  Geheimnisprinzip, heißt, dass die Attribute und die nur Objektintern benutzten Methoden nicht public sein dürfen.
Deswegen brauchst du, wie du es schon gesagt hast, die set() und get() Methoden.(Dort wo halt steht kann abgefragt aber nicht geändert werden muss die set() Methode natürlich fehlen).



> Geh ich richtig der annahme das für jede Ware ebenfalls ein Objekt erzeugt werden sollte, das dann in dem Warenkorb liegt oder wäre es besser z.b.: in dem Warenkorb als ein Attribut ein Array zu benutzen, das einer ware entspricht, bei jedem Element bis 25



Also das eine schließt das andere nicht aus, was bedeutet, es soll sich nicht ausschließen.
D.h du hast ein Attribut vom typ Ware[] in der Klasse Warenkorb.

Aber wie gesagt, mit einem Klassendiagramm wird so etwas offensichtlich.

Mal so nebenbei:

Wir auf dem normalen TG müssen,  OOA nie auf dem Blatt programmieren, höchstens Algorithmen.
Müsst ihr das Zeug wirklich runtercoden???
Hat doch eigentlich wenig mit dem Ingineurswesen zu tun.


Denn wenn ihr auch nur Entwickeln müsst, dann brauchst du dir über Methoden Interne abläufe nicht viele Gedanken machen, und kannst die Sache erst mal logisch betrachten d.h.

Eine Ware hat:
 -eine Bezeichnung:Zeichenkette
 -einen Preis:KommaZahl

Ein Warenkorb
 -hat eine nummer(fortlaufend als Name bietet sich ID oder index an)
 -hat Waren also Ware[] (wie man dann intern bei einer hinzugefügten ware ein Arrayfeld hinzufügt, ist dann ne andere Sache aber: tmp[]=new Ware[ware.length+1];fülle alle ware felder in die Temp felder; füge ins letzte tmp feld den neuen Array wert. Oder du fügst gleich ein Attribut Array mit 25 Feldern hinzu:natürlich eleganter wenns schon so verlangt ist)
 +hat eine Methode die gesamt Preis ausrechnet(natürlich nur neben den set und get Methoden

Ein Onlineshop hat:
 -mehrere Warenkörbe[](muss unbedingt als Attribut stehen,damit das Schoppingsystem überhaupt ne Referenz zu den Warenkorben hat.)

Also das reicht erst mal für das Klassendiagramm, und das dann umzusetzen ist dann nur noch Algorithmusarbeit und Routine.


Freundliche grüße von einem zukünftigen IT-Student


----------



## SlaterB (14. Mrz 2007)

ganz schön viel Mühe,
aber nach einem Monat auf die Frage eines quasi-anonymen Einmal-Besuchers?


----------

