Rückblick
Objektorientierung ist kein neues Werkzeug, sondern eine neue Sichtweise: Daten und die Handlungen darauf gehören zusammen. Wer das verinnerlicht hat, schreibt von selbst besseren Code – auch außerhalb von Java.
Das kann ich jetzt
- Ich kann eine Klasse mit Attributen, Konstruktor und Methoden schreiben. (6.1)
- Ich kann Klasse und Objekt sicher auseinanderhalten. (6.1)
- Ich kann erklären, warum Attribute
privatesind, und den Zugriff über Methoden regeln. (6.2) - Ich kann eine Assoziation umsetzen: ein Objekt, das ein anderes kennt. (6.3)
- Ich kann mit
extendseine Unterklasse bilden und eine Methode überschreiben. (6.4) - Ich kann eine eigene Sprite-Klasse schreiben und damit Vererbung sichtbar machen. (6.5)
Gemischte Aufgaben
Aufgabe 1: Klasse oder Objekt?
a) Erkläre den Unterschied zwischen Klasse und Objekt an einem Beispiel aus dem Alltag, das nicht aus dem Unterricht stammt.
b) Wie viele Objekte entstehen in diesem Ausschnitt, und wie viele Klassen sind beteiligt?
Auto ersterWagen = new Auto("VW", 84000, 7500.0);
Auto zweiterWagen = new Auto("Fiat", 12000, 14900.0);
Auto[] flotte = new Auto[3];
flotte[0] = ersterWagen;
c) Was steht nach der letzten Zeile in flotte[0] – eine Kopie des Autos oder etwas anderes? Was folgt daraus, wenn jemand flotte[0].aenderePreisUm(-500.0) aufruft?
d) Wie viele der drei Plätze in flotte enthalten danach ein Auto?
Tipp zu c)
Auto ist ein Objekttyp. Erinnere dich an Kapitel 2: Was steht bei einem Objekttyp in der Variablen?
Aufgabe 2: Eine Klasse aufbauen
Schreib die Klasse Schueler mit:
- den Attributen
name(String),punkte(int) undfehltage(int), alleprivate, - einem Konstruktor, der Name und Punkte setzt und die Fehltage auf 0,
- einer Methode
double gibNote(), die nach der Formel aus Kapitel 4 rechnet, - einer Methode
void fehlt(), die die Fehltage um eins erhöht, - einer Methode
void schreibeInfos(), die alles ausgibt.
Leg im Hauptprogramm zwei Objekte an, lass eines zweimal fehlen und gib beide aus.
Tipp 1: Der Aufbau einer Klasse
Immer dieselbe Reihenfolge:
public class Schueler {
// 1. Attribute
private String name;
// 2. Konstruktor - heißt wie die Klasse, hat keinen Rückgabetyp
public Schueler(String pName, int pPunkte) {
name = pName;
}
// 3. Methoden
}
Tipp 2: Wo bleiben die Parameter?
Der Konstruktor bekommt die Werte von außen und schreibt sie in die Attribute. Deshalb die p-Vorsilbe bei Parametern: name = pName; ist eindeutig, name = name; wäre es nicht.
Aufgabe 3: Geheimnisprinzip und Vererbung
a) punkte ist private. Was passiert bei amira.punkte = 200; im Hauptprogramm – und warum ist es gut, dass es passiert?
b) Ergänze eine Methode, mit der sich die Punktzahl kontrolliert ändern lässt und die Werte über 100 oder unter 0 zurückweist. Welchen Vorteil hat das gegenüber einem öffentlichen Attribut?
c) Schreib eine Unterklasse Austauschschueler, die zusätzlich das Attribut herkunftsland hat und schreibeInfos so überschreibt, dass das Land mit ausgegeben wird.
d) Nenne den Fachbegriff für die Beziehung zwischen Schueler und Austauschschueler und formuliere sie als Satz mit „ist ein".
Tipp zu c)
Zwei Dinge sind nötig, die es bisher nicht gab:
public class Austauschschueler extends Schueler {
private String herkunftsland;
public Austauschschueler(String pName, int pPunkte, String pLand) {
super(pName, pPunkte);
herkunftsland = pLand;
}
}
super(...) ruft den Konstruktor der Oberklasse auf – sie muss ihre eigenen Attribute ja selbst füllen können. In der überschriebenen Methode kommt man mit super.schreibeInfos() an die ursprüngliche Fassung.