IT 2 – WS 2008/2009 – Übungsblatt 8 Abzugeben bis 5.12.2008 Beispiel 8.1 Definieren Sie eine Klasse Artikel mit folgenden Eigenschaften: • Es gibt einen Konstruktor Artikel(String bezeichnung), der einen Artikel anlegt. • Es gibt eine Methode String getBezeichnung(), die die Bezeichnung des Artikels zurückliefert. • Es gibt eine Methode void setReferenznummer(String refnummer), die die Referenznummer des Artikels neu setzt. Eine gültige Referenznummer ist zumindest 3-stellig. Wenn die übergebene refnummer weniger als 3 Zeichen lang ist, soll die bestehende Referenznummer nicht verändert werden. • Es gibt eine Methode String getReferenznummer(), die die aktuelle Referenznummer zurückliefert. Wenn noch keine gültige Referenznummer gesetzt wurde, soll der Leer-String "" zurückgeliefert werden. Beispiel 8.2 [Lieferant.java] Eine Firma wird von zwei Lieferanten pro Woche mit insgesamt 100 Stück einer Ware beliefert, wobei ein Lieferant höchstens 75 Stück liefern kann. Implementieren Sie eine Klasse Lieferant mit folgendem Konstruktor und folgenden Methoden: • Lieferant(int lieferantennummer) erzeugt einen Lieferanten mit der entsprechenden Nummer. Die Lieferantennummer soll 1 oder 2 sein. • int getAktuellerPreis() liefert den aktuellen Preis des Lieferanten zurück. Der Preis soll zwischen 1 und 100 liegen. Der Preis von Lieferant 1 soll jeweils zufällig gewählt werden. Der Preis von Lieferant 2 soll ein fester Wert sein, der mit der Methode • void setPreis(int preis) gesetzt werden kann. • Mit void liefere(int anzahl) kann die Firma beim Lieferanten anzahl Stück bestellen. Die Anzahl muss zwischen 1 und 75 liegen. • int getUmsatz() liefert den bisherigen Gesamtumsatz des Lieferanten. Der Gesamtumsatz ist die Summe der Preise aller bestellten Stücke. Beispiel 8.3 [Firma.java] Implementieren Sie nun die Klasse Firma. Sie enthält eine Methode int simuliere(int anzWochen), die für anzWochen den Bestellvorgang simuliert. Bei einem Bestellvorgang frägt die Firma zuerst nach den Preisen der Lieferanten und bestellt dann beim billigeren Lieferanten 75 Stück und beim teureren 25 Stück. Falls die Preise beider Lieferanten gleich sind, werden bei beiden 50 Stück bestellt. Als Ergebnis liefert die Methode den Gesamtpreis für alle Bestellungen. -1- IT 2 – WS 2008/2009 – Übungsblatt 8 Beispiel 8.4 [Lieferant.java] (freiwillig) Probieren Sie andere Strategien der Lieferanten zum Festsetzen der Preise aus. Die Lieferanten sind Konkurrenten und sprechen sich nicht ab. Insbesondere kennen Sie die Preise des anderen Lieferanten nicht. Jeder Lieferant möchte seinen Umsatz maximieren. Hinweis: Wenn Sie Ihre Klasse abgeben, werden wir sie gegen andere Strategien testen um die beste abgegebene Klasse zu ermitteln. Dazu sollten in der Klasse, die Sie abgeben, Lieferant 1 und 2 dieselbe Strategie verwenden. (Ihr Lieferant wird in manchen Test Lieferant 1 sein, in anderen Lieferant 2.) Wir werden immer 360 Wochen simulieren. Strategischer Hinweis: Als Informationsgrundlage für das Festsetzen des Preises können die Bestellungen der Firma in den bisherigen Wochen dienen. Beispiel 8.5 Schreiben Sie eine Klasse CountedClass, die einen parameterlosen Konstruktor und eine Klassenmethode static int getNumberOfInstances() enthält, die die Anzahl der bisher erzeugten Objekte diese Klasse zurückliefert. Beispiel 8.6 [LabClass.java, Student.java, Lecturer.java, Person.java] Fügen Sie dem Projekt lab-classes (chapter01) eine Klasse Lecturer hinzu. Diese Klasse hat einem Konstruktor Lecturer(String name), der einen Konstruktor mit entsprechendem Namen anlegt. Definieren Sie eine gemeinsame Oberklasse Person für Lecturer und Student. Verwenden Sie Vererbung zur Vermeidung von Code-Duplizierung zwischen Student und Lecturer (beide haben einen Namen). Dazu sind in der Klasse Student einige Änderungen nötig. Die Methode changeName() in Student muss entfernt werden. Ändern Sie die Klasse LabClass so, dass der Instruktor ein Lecturer ist. Ersetzen Sie insbesondere die Methode setInstructor(String instructorName) durch eine Methode setInstructor(Lecturer theLecturer). Fügen Sie auch eine entsprechende Methode Lecturer getInstructor() hinzu. Definieren Sie in der Klasse Person die Methode public String toString() so, dass die Methode printList() in LabClass nicht geändert werden muss. Die Methode toString() soll in Lecturer nicht überschrieben werden. -2-