Übung 2 (als pdf)

Werbung
SS 2001
Übungen zu Softwareentwicklung 2
Übung 2
Name: ___________________________________________Tutor: _______________
Matrikelnummer: __________________________________ Punkte: _______________
Übungsleiter / Gruppe: ______________________________ Abgabe:
1. Aufgabe: Mitarbeiter-Datenbank
22.3.2001, 8.15 Uhr
(13 Punkte)
Bei dieser Aufgabe soll eine dynamische Liste implementiert werden, die alle Mitarbeiter
einer kleinen Firma enthalten soll. Diese Firma besitzt jedoch drei verschiedene Klassen von
Mitarbeitern, wobei für jede Klasse das Gehalt unterschiedlich berechnet wird. Alle
verschiedenen Mitarbeiterklassen müssen jedoch von einer gemeinsamen Basisklasse
Employee abgeleitet werden, die wie folgt aufgebaut ist:
public abstract class Employee {
private String fName;
private String lName;
public Employee next;
// Constructor
public Employee( String first, String last ){
fName = new String ( first );
lName = new String( last );
}
// Return a copy of the first name
public String getFirstName(){
return new String( fName );
}
// Return a copy of the last name
public String getLastName(){
return new String( lName );
}
abstract double earnings();
// returns true if Employee e is the same as this
public boolean equals(Employee e){
return fName.equals(e.getFirstName())
&& lName.equals(e.getLastName());
}
}
Von dieser Basisklasse sollen nun die einzelnen Mitarbeiterklassen abgeleitet werden:
• Klasse ComissionWorker : Bei dieser Klasse von Mitarbeitern berechnet sich das
Gehalt aus einem monatlichen Grundgehalt und einem Kommissionswert pro
verkauften Stück.
• Klasse HourlyWorker: Bei dieser Klasse von Mitarbeitern berechnet sich das Gehalt
aus einem Stundenlohn multipliziert mit der Anzahl der gearbeiteten Monatsstunden.
• Klasse PieceWorker: Bei dieser Klasse berechnet sich das Gehalt aus der Summe der
erzeugten Stücke multipliziert mit einem Stückwert.
•
Klasse Boss: Bei dieser Klasse, der nur ein Mitarbeiter angehört, berechnet sich das
Gehalt einfach durch ein monatliches Fixgehalt.
Die für die Gehaltsberechnung benötigten Daten, zum Beispiel der Stückwert sollen als
Konstanten in den jeweiligen Klassen implementiert werden.
Die Verwaltung dieser dynamischen Liste erfolgt durch die Klasse Database, die mindestens
folgende Funktionalität unterstützen sollte:
• Beliebige Mitarbeiter in die Datenbank einfügen oder löschen (Achtung beim
mehrmaligem Einfügen der gleichen Person soll diese Person nur einmal in der
Datenbank enthalten sein!) .
• Ein Iterator, der mit Hilfe der Funktionen getFirst() und getNext() die Liste der
Mitarbeiter durchlaufen kann.
• Ausgeben einer Liste aller Mitarbeiter in der Datenbank mit ihren Gehältern pro
Monat.
• Nach einem bestimmten Mitarbeiter suchen.
Tip: Versuchen Sie die Vorteile der objektorientierten Programmierung so zu nützen, dass
Ihre Klassen eine möglichst elegante und einfache Struktur besitzen und deren Funktionen
ebenfalls von den objektorientierten Prinzipien profitieren.
Testen Sie Ihre Klasse Database ausführlich anhand einer eigenen Klasse Test, wobei sie
die einzelnen Stückwerte und Kommissionen selbst festlegen können.
2. Aufgabe: Dynamische Bindung
(4 Punkte)
Welche Ausgabe erzeugt folgendes Programm auf der Konsole, begründen Sie ihre Angaben
ausführlich.
class Base{
Base(){
System.out.println(„Base Constructor“);
print();
}
public void print(){ System.out.println(„Print Base“); }
}
class Derived extends B ase{
Derived(){ System.out.println(“Derived Constructor”); }
public void print(){ System.out.println(„Print Derived“); }
public static void main(String argv[]){
Derived d = new Derived();
}
}
3. Aufgabe: Theoriefragen
(1 + 2 + 2 +2 Punkte)
a. Was ist, bzw. was bewirkt ein Supercall?
b. Wie würden sie Vererbung beschreiben, was bedeutet es?
c. Erklären Sie die Unterschiede zwischen statischer und dynamischer Bindung.
d. Warum muss der dynamische Typ zur Laufzeit in jedem Objekt gespeichert werden?
Herunterladen