Shop
Setze das abgebildete Klassendiagramm vollständig um. Erstelle zum Testen eine ausführbare Klasse und/oder eine Testklasse.
Klassendiagramm
Allgemeine Hinweise
- Aus Gründen der Übersicht werden im Klassendiagramm keine Getter und Object-Methoden dargestellt
 - So nicht anders angegeben, sollen Konstruktoren, Setter, Getter sowie die Object-Methoden wie gewohnt implementiert werden
 
Hinweis zur Klasse FastFood
Die Methode int compareTo(otherFastFood: FastFood) soll so implementiert
werden, dass damit Fast-Food absteigend nach den Kalorien sortiert werden kann.
Hinweise zur Klasse Shop
- Das Sortiment des Shops (Attribut 
assortment) setzt sich auch Produkten und ihren Bewertungen zusammen - Die Methode 
void addProduct(product: T)soll das eingehende Produkt zum Sortiment hinzufügen, allerdings nur für den Fall, dass das eingehende Produkt im Sortiment noch nicht vorhanden ist - Die Methode 
void rateProduct(product: T, rating: int)soll dem eingehenden Produkt die eingehende Bewertung hinzufügen. Für den Fall, dass das eingehende Produkt nicht im Sortiment vorhanden ist, soll die AusnahmeNoProductFoundExceptionausgelöst werden und für den Fall, dass die eingehende Bewertung nicht im Bereich 1 bis 5 liegt, soll die AusnahmeInvalidRatingExceptionausgelöst werden - Die Methode 
Optional<T> getBestRatedProduct()soll das Produkt mit der höchsten Durchschnittsbewertung als Optional zurückgeben - Die Methode 
List<T> getAllProductsSortedByNaturalOrdering()soll alle Produkte sortiert nach ihrer natürlichen Ordnung zurückgeben