***** Übungen: Java - Vererbung ***** Java_Vererbung-1: Vererbung - Vererbungsdiagramm analysieren (Chipkarte) Betrachten Sie das Klassendiagramm *LINK 16java/java21_bild_chipkarte.png LINK* 1) Welches sind "Elternklasse(n)", welches "Kindklasse(n)"? 2) Schreiben Sie eine Liste: Welche Attribute und Methoden hat die Klasse "Mensakarte"? 3) Sowohl "Chipkarte" als auch "Bibliothekskarte" haben eine Methode "statusAnzeigen()". Wie verhält sich diese Methode, wenn ein Objekt der Klasse Bibliothekskarte instanziiert wird? [ 4) Halten Sie es für sinnvoll, die Klasse Chipkarte abstrakt zu gestalten? Begründen Sie Ihre Antwort. ] @@@ Java_Vererbung-2: Vererbung - Klassendiagramm "Menschen" Erstellen Sie ein Klassendiagramm, in dem folgende Klassen vertreten sind (Vererbung!): Mensch Sportler Fußballer Torwart Stürmer Büroangestellter Finden Sie jeweils zwei sinnvolle Attribute und eine sinnvolle Methode! Verwenden Sie sinnvolle Zugriffsmodifikatoren. @@@ Java_Vererbung-3: SEHR einfache Vererbungsaufgabe: Hund Benutzen Sie das Klassendiagramm *LINK 16java/java21_bild_2hunde.png LINK* Programmieren Sie eine Klasse Hund (Attribute: groesse, Methoden: bellen(), diese Methode gibt aus: "Wuff Wuff") mit den Gettern und Settern und eine Unterklasse Jagdhund (mit der Methode fass()). Die Methode fass() gibt aus "Ich habe das Kaninchen geschnappt." --- Brauchen Sie für die Klasse "Jagdhund" auch Getter und Setter? --- Instanziieren Sie jeweils ein Objekt der beiden Klassen --- Lassen Sie sich für das jeweilige Objekt die Attributwerte ausgeben und verwenden Sie die Methoden. --- Erweitern Sie die Klasse Jagdhund so, dass für die Methode "fass()" ein Ziel als Parameter übergeben werden kann (z.B. "fass('Kaninchen')"); die Methode gibt dann "Ich habe das Kaninchen geschnappt" aus. @@@ Java_Vererbung-3GREENFOOT: SEHR einfache Vererbungsaufgabe: Hund Benutzen Sie das Klassendiagramm *LINK 16java/java21_bild_2hunde.png LINK* Setzen Sie es im Szenario *LINK 16java/java21_vererbung_GF/1_hund_einfach.zip LINK* um - Korrigieren Sie die beiden Klassen Hund und Jagdhund in der korrekten Vererbungsstruktur. - Die Methode fass() gibt aus "Ich habe das Kaninchen geschnappt." Verwenden Sie die Methoden --- Brauchen Sie für die Klasse "Jagdhund" auch Getter und Setter? @@@ Java_Vererbung-4: Einfache Vererbungsaufgabe: Hund Programmieren Sie die in Bild *LINK 16java/java21_bild_3hunde.png LINK* dargestellten Klassen. Ergänzen Sie die Getter und Setter. --- Die Methoden erzeugen lediglich Ausgaben in der Konsole. Lassen Sie sich etwas Originelles einfallen. Die Methode fass(nameDesTiers:String) ist bei EntfesselterJagdhund natürlich etwas offensiver. --- Erzeugen Sie von jeder Klasse ein Objekt. Verwenden Sie für jedes Objekt alle (!) verfügbaren Methoden, um die Funktionsfähigkeit zu gewährleisten. --- Notieren Sie: Wie viele Attribute und Methoden haben die Objekte jeweils (inkl. Getter und Setter)? (Ergebnis bitte in Form Hund: 13 Attribute, 5 Methoden; Jagdhund: 100 Attribute, 1 Methode; EntfesselterJagdhund: 3 Attribute, 50 Methoden) --- Notieren Sie: Wie viele Attribute sind jeweils privat/geschützt/öffentlich; wie viele Methoden sind privat/geschützt/öffentlich? (Ergebnis bitte in Form Attribute: 3 öffentlich, 5 geschützt, 0 privat; Methoden: 12 öffentlich, 0 geschützt, 1 privat) @@@ Java_Vererbung-5: Einfache Vererbungsaufgabe: Warenwirtschaftssystem Sie programmieren die Produktverwaltung eines Warenwirtschaftssystems. Jedes Produkt hat eine Artikelnummer, einen Namen und einen Nettopreis, außerdem die entsprechenden Getter und Setter. Besondere Produkte sind die Musik-CD, die noch die Laufzeit in Minuten und den Interpreten enthält, und das Kinderfahrrad, wo über die Methode "klingelAuswaehlen(klingelFarbe:String)" beim Bestellen eine Klingel in einer besonderen Farbe gewählt werden kann. - Erstellen Sie ein Klassendiagramm zu dieser Situation. - Programmieren Sie die Klassen. Weisen Sie allen Attributen Initialwerte zu. - Testen Sie, ob alles funktioniert, indem Sie ---- ein Objekt jeder Klasse instanziieren ---- für die Objekte die einzelnen Attributswerte ausgeben lassen ---- für die Objekte die einzelnen Methoden aufrufen @@@ Java_Vererbung-6: Vererbung programmieren - Pizzabringdienst Sie programmieren entsprechend *LINK 16java/java21_bild-pizza.png LINK* ein Bestellsystem für einen Pizzabringdienst. Name (setName), Preis (setPreis) und Rabatt (setRabatt) werden vom System gesetzt; der Einfachheit halber machen Sie das von Hand (indem Sie an der korrekten Stelle die entsprechenden Setter mit beispielhaften Werten verwenden). Saucentyp und Schärfegrad werden vom User gesetzt. Auch das machen Sie von Hand im Programm. Probieren Sie aus, ob die Klassen so arbeiten wie erwartet. Versuchen Sie auch auf ein Objekt der Unterklassen die in der Oberklasse definierten Methoden anzuwenden. Zusatzaufgabe 1: Erstellen Sie eine grafische Oberfläche, über die die entsprechenden Eingaben und Ausgaben vorgenommen werden. @@@ Java_Vererbung-7: Mitarbeiter: Vererbung im UML-Diagramm darstellen und programmieren Vorbemerkung: Welche Attribute benötigt werden und von welchem Typ die sind, müssen Sie selbst entscheiden. Bei allen Methoden, hinter denen (SOUT) steht, wird lediglich eine Konsolenausgabe erzeugt. Sie verwalten in einem Programm die Mitarbeiter einer Firma. Alle Mitarbeiter haben einen Vornamen und einen Nachnamen und eine Personalnummer. Allen Mitarbeiter wird ein Gehalt ausgezahlt (setGehalt(gehalt:double)), über einen Getter kann man das Gehalt herausfinden. Die Mitarbeiter im Außendienst können außerdem einen Dienstwagen benutzen (fahreMitDienstwagen(marke:String) SOUT "Sie fahren mit einem Dienstwagen der Marke ."). Man kann weiterhin abfragen, wie viele Außenkontakte sie hatten (getAussenkontakte():int). Die Mitarbeiter in der Managementetage bekommen einmal jährlich einen Bonus ausgezahlt (zahleBonus(bonus:double) SOUT "Sie bekommen 1299 Euro und kaufen sich ein neues Haus."). Außerdem können Sie die Personalnummer aller anderen Mitarbeiter herausfinden (durch Eingabe des Nachnamens (holePersonalnummer(nachname:String)). Die EDV ist noch nicht so ausgereift, deshalb wird als Antwort auf diese Aktion immer "Mitarbeiter nicht verfügbar" ausgegeben. Die Mitarbeiter in der Lagerverwaltung haben keine besonderen Merkmale, die sie von anderen Mitarbeitern unterscheiden. a) Erstellen Sie ein UML-Diagramm zu dieser Situation. b) Programmieren Sie die Klassen. Testen Sie die Lauffähigkeit, indem Sie einige Mitarbeiter als Objekte instanziieren und die Methoden ausprobieren. @@@ Java_Vererbung-8: Bundespräsident (einfacher super()-Aufruf) Programmieren Sie die in *LINK 16java/java21_bild_bundespraesident.png LINK* dargestellten Klassen so, dass ein Objekt der Klasse Bundespraesident erzeugt werden kann. Um zu testen, ob alles funktioniert, gibt der Bundespraesident am Ende des Konstruktors aus "Ich heiße und erhalte überall Prozent Rabatt." @@@ Java_Vererbung-9: Rechnung Programmieren Sie die Klassen aus *LINK 16java/java21_bild_rechnung.png LINK* Instanziieren Sie von beiden Klassen ein Objekt und testen Sie die Funktionalität. Wie Sie mit den Prozentzahlen umgehen, bleibt Ihnen überlassen. @@@ Java_Vererbung-10: Hunde (super()-Aufrufe) Programmieren Sie die Hunde-Klassen aus *LINK 16java/java21_bild_hunde_hoellenhunde.png LINK* Die Aufgabe ist eigentlich ziemlich einfach. Sie müssen nur sehr strukturiert vorgehen. Tipps: 1) Halten Sie sich GENAU ans Klassendiagramm. 2) Vergessen Sie nicht, alle an die Konstruktoren übergebenen Parameter entweder per super() nach oben durchzureichen oder den entsprechenden Attributen zuzuweisen! @@@ Java_Vererbung-11: Schulverwaltungssoftware In der Schulverwaltungssoftware werden Menschen verwaltet, die haben einen Namen (String) und eine Alter (int). Außerdem gibt es Lehrer, die zusätzlich ein Unterrichtsfach (String) haben. Dann gibt es Schüler. Jeder hat eine Klassenstufe (5 bis 12) (int). Sie bezahlen einen jährlichen Beitrag in die Schulkasse. Zur Berechnung dieses Beitrags wird das Alter, die Klassenstufe und der Jahresbeitragsfaktor herangezogen. Der Jahresbeitragsfaktor liegt derzeit für alle Schüler bei 5. Die Formel zur Berechnung des jährlichen Beitrags lautet: jährlicher Beitrag = Alter/Klassenstufe * Jahresbeitragsfaktor. ( WEGLASSEN: Besondere Schüler sind die Klassensprecher, die aufgrund ihrer großartigen Verdienste einen niedrigeren, individuellen Jahresbeitragsfaktor haben (manchmal 3, manchmal 4)). a) Erstellen Sie ein Klassendiagramm. b) Programmieren Sie die Klassen und instanziieren Sie von allen Klassen ein Objekt und testen Sie die Funktionsfähigkeit. Selbstverständlich werden alle Werte (je nach Objekt: Name, Alter, Unterrichtsfach, Klassenstufe, Beitragsfaktor) via Scanner ein. Am besten legen Sie eine entsprechende Klasse an (z.B. Einlesen), die zwei Methoden zum Werteeinlesen hat (eine für int, eine für String). Sie können aber auch ganz anders vorgehen.