Treść zadania:
Napisać aplikację, która symuluje zakupy w kwiaciarni "samoobsługowej".
W kwiaciarni są kwiaty, kwiaty mają swoje nazwy oraz kolory. Ceny kwiatów znajdują się w cenniku.
Do kwiaciarni przychodzą klienci. Klienci mają imiona oraz dysponują jakimś zasobem pieniędzy. Wybierają kwiaty i umieszczają je na wózku sklepowym. Następnie płacą za zawartość wózka i przepakowują ją do pudełka.
Aplikacja wymaga zdefiniowania kilku klas i umiejętnego ich użycia, w taki sposób by następujący program działał poprawnie.
Klasy Florist i FloristTest:
http://wklej.org/id/1314892/
Taki ma być wynik programu:
http://wklej.org/id/1314894/
Uwaga: w pokazanym tekście programu występują odwołania do klas: **PriceList, Customer, ShoppingCart, Box, Rose, Lilac, Freesia, Peony **. Trzeba je odpowiednio zdefiniować, ale oprócz tego nalezy zdefiniować jeszcze co najmniej kilka ważnych klasy (których w programie nie widać) potrzebne do spełnienia wymagań postawionych przed programem.
Trzeba też zdefiniować w klasie FloristsTest metodę valueOf(Box pudelko, String kolor) zwracającą wartość kwiatów o podanym kolorze, znajdujących się w pudełku.
Wymaganie podstawowe:
dodanie do powyższego programu zakupów innych kwiatów (np. orchidei) ma byc bardzo łatwe.
Potrzeba tylko :
-zdefiniowac nową klasę np. Orchid, przy czym ma to być jak najbardziej oszczędna definicja (kilka wierszy kodu)
- dodać odpowiedni kod do powyższego programu (np. pl.set("orchidea", 20); janek.add(new Orchid(1)); )
Przy dodaniu nowego rodzaju kwiatów nie wolno modyfikować żadnych innych klas programu.
Wymagania dodatkowe:
-należy wykorzystać klasy abstrakcyjne i polimorfizm
-należy zminimalizować kod klas ShoppingCart i Box
-należy zdefiniować klasę PriceList jako singleton (możemy mieć zawsze tylko jeden cennik)
Dodatkowe uwagi.
-W kwiaciarni mogą być kwiaty, których zapomniano dodać do cennika. Wtedy przy płaceniu są one usuwane z naszego wózka.
-Może się okazać, że klient nie dysponuje odpowiednią kwotą pieniędzy aby zapłacić za całą zawartość wózka. Wtedy z wózka usuwane są kwiaty, za które klient nie może zapłacić (ale nie pojedynczo, tylko w kompletach np. po stefan.get(new Lilac(3)) usuwane są te trzy bzy na które Stefan nie ma pieniędzy).
-Warto zwrócić uwagę na odpowiednio zdefiniowanie metody toString() w niektórych klasach.
Moja klasa PriceList:
public class PriceList {
private static PriceList instance = null;
private PriceList() {}
public static PriceList getInstance(){
if (instance == null){
instance = new PriceList();
}
return instance;
}
}
Klasy z kwiatami:
abstract class Flower {
private String nazwa = "bez nazwy";
private double cena;
public Flower(String n, double c) { nazwa = n; cena = c; }
abstract String rodzaj();
abstract String kolor();
abstract double cena();
}
class Rose extends Flower {
private String rodzaj;
private double cena;
public Rose(String róża, double cena) {
super(nazwa);
rodzaj = nazwa;
super(cena);
cena = cena;
}
public String rodzaj() { return rodzaj; }
public String kolor() { return "czerwony"; }
public double cena() { return cena; }
}
class Lilac extends Flower {
private String rodzaj;
private double cena;
public Lilac(String bez, double cena) {
super(nazwa);
rodzaj = nazwa;
super(cena);
cena = cena;
}
public String rodzaj() { return rodzaj; }
public String kolor() { return "bialy"; }
public double cena() { return cena; }
}
class Peony extends Flower {
private String rodzaj;
private double cena;
public Peony(String piwonia, double cena) {
super(nazwa);
rodzaj = nazwa;
super(cena);
cena = cena;
}
public String rodzaj() { return rodzaj; }
public String kolor() { return "czerwony"; }
public double cena() { return cena; }
}
class Freesia extends Flower {
private String rodzaj;
private double cena;
public Freesia(String frezja, double cena) {
super(nazwa);
rodzaj = nazwa;
super(cena);
cena = cena;
}
public String rodzaj() { return rodzaj; }
public String kolor() { return "zolty"; }
public double cena() { return cena; }
}
Proszę o sprawdzenie, czy dobrze wprowadziłam polimorfizm i singleton (stosuje go pierwszy raz).
W uwadze do zadania podano, że dwóch klas, których trzeba użyć nie widać w zadaniu, jedną wniosku jest powyższa klasa abstrakcyjna, którą nazwałam Flower. Jaka jest druga?
I jeśli to co wyżej podałam jest poprawne, to czym powinnam zająć się następnie?
Z góry dziękuję za pomoc i wskazówki.
(to moja drugie zadanie, gdzie stosuję polimorfizm, więc nie jestem pewna czy dobrze zrozumiałam jego zastosowanie. I czy takie jego użycie w tym zadaniu pasuje)