13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting / Universität Karlsruhe (TH)
Was machen wir heute? 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung Was bisher geschah... Heute: Fortsetzung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 2 / 27
Übersicht Rückblick 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 3 / 27
Rückblick Was haben wir letzte Woche gemacht? Vererbung Fragen dazu? Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 4 / 27
Übersicht Allgemeines 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 5 / 27
Allgemeines Anmeldung Übungsschein Meldet euch für den Übungsschein an! Anmeldung bis 13.02. über das KIT Studierendenportal (ehem. Selbstbedienungsfunktion) Wer sich nicht sicher ist, ob er den Schein schafft: Trotzdem anmelden, Schein kann beliebig oft wiederholt werden! Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 6 / 27
Übersicht Abschlußaufgabe 2 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 7 / 27
Abschlußaufgabe 2 Es ist soweit! Die 2. Abschlußaufgabe ist verfügbar! Testfälle in Tests.txt abgeben Umfassende Tests machen, die möglichst viele Fälle abdecken! Abgabe bis zum 31. März, 10 Uhr! Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 8 / 27
Übersicht Fortsetzung Vererbung 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung Was bisher geschah... Heute: Fortsetzung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 9 / 27
Code Fortsetzung Vererbung Was bisher geschah... class Hund { int anzahlbeine = 4; void bellen() { Terminal.println("wau"); class Dackel extends Hund { @override void bellen() { Terminal.println("wiff"); class Bullterrier extends Hund { @override void bellen() { Terminal.println("kläff"); void angreifen() {... Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 10 / 27
Fortsetzung Vererbung Was bisher geschah... Vererbung Dackel und Bullterrier erben nun von Hund. Das bedeutet, sie übernehmen (erben) von der Klasse Hund die Methoden Attribute und ergänzen diese. Ein Dackel ist zeitgleich auch vom Typ Hund. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 11 / 27
Umgang - Code Fortsetzung Vererbung Was bisher geschah... Beispiel Hund h = new Bullterrier(); Bullterrier b = new Bullterrier(); Terminal.println(b.anzahlBeine); Terminal.println(h.anzahlBeine); b.angreifen(); Ein Dackel ist ein Hund, aber kein Bullterrier. Die Anweisung: Bullterrier b = new Dackel(); ist also nicht möglich. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 12 / 27
Ober- und Unterklasse Fortsetzung Vererbung Was bisher geschah... Hund ist Oberklasse von Dackel und Bullterrier. Dackel und Bullterrier sind Unterklassen von Hund. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 13 / 27
Fortsetzung Vererbung Überschreiben von Methoden Was bisher geschah... Methoden der Oberklasse können überschrieben werden. Dazu annotiert man die überschriebene Methode mit @override. Beispiel class Dackel extends Hund { @override void bellen() { Terminal.println("wiff"); Attribute können nicht überschrieben werden. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 14 / 27
Dynamische Bindung Fortsetzung Vererbung Was bisher geschah... Es wird immer die Methode des Laufzeittyps ausgeführt. Wird die Methode dort nicht gefunden, wird in der Klassenhierarchie nach oben weitergesucht. Beispiel Hund h = new Hund(); h.bellen(); Hund h = new Dackel(); h.bellen(); Hund h = new Bullterrier(); h.bellen(); Was wird hier ausgegeben? Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 15 / 27
super Fortsetzung Vererbung Heute: Fortsetzung Mit super kann innerhalb einer Klasse, die von einer anderen erbt, auf ihre Oberklasse zugegriffen werden. Syntaktisch wird super dabei ähnlich wie this verwendet. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 16 / 27
Beispiel zu super Fortsetzung Vererbung Heute: Fortsetzung class Hund { Hund() { Terminal.println("Ein Hund ist geboren!"); void bellen() { Terminal.println("wau"); class Dackel extends Hund { Dackel() { super(); Terminal.println("...und siehe da: Es ist ein Dackel!"); void bellen() { super.bellen(); Terminal.println("wiff"); Was wird bei Ausführung der folgenden Codezeilen ausgegeben? Hund h = new Hund(); Hund hd = new Dackel(); Dackel d = new Dackel(); d.bellen(); Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 17 / 27
instanceof Fortsetzung Vererbung Heute: Fortsetzung Mit instanceof kann man überprüfen, ob ein Objekt eine Instanz einer bestimmten Klasse ist, ob dieses Objekt also (auch) von diesem Typ ist. void testehund(hund h) { if (h instanceof Dackel) { Terminal.println("Ich bin ein Dackel"); else { Terminal.println("Ich bin irgendein Hund"); Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 18 / 27
Fortsetzung Vererbung Heute: Fortsetzung Beispiel zu instanceof Sei folgendes Code-Fragment gegeben: Hund h = new Hund(); Hund hd = new Dackel(); Dackel d = new Dackel(); Bullterrier b = new Bullterrier(); Was wird jeweils bei Aufruf von testehund(...) mit einem der Objekte als Parameter ausgeben? Kommt es zu einem Fehler? Was liefern folgende Vergleiche zurück? h instanceof Hund h instanceof Dackel d instanceof Hund d instanceof Bullterrier hd instanceof Dackel Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 19 / 27
Type-Casting Fortsetzung Vererbung Heute: Fortsetzung Typ1 objekt1 = new Typ1(); Typ2 objekt2 = (Typ2) objekt1; Ein Objekt eines Typs kann so in ein Objekt eines anderen Typs verwandelt verwandelt werden. Achtung: Keine Überprüfung, ob Umwandlung möglich ist! Vorher mit instanceof überprüfen, ob Objekt vom jeweiligen Typ ist Es wird nur der statische Typ der Variablen geändert. Up-Cast: (Oberklassentyp) objektunterklasse ist immer möglich Down-Cast: (Unterklassentyp) objektoberklasse Gefährlich, wenn nicht geprüft, kann zu Laufzeitfehlern führen. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 20 / 27
Das Schlüsselwort final Fortsetzung Vererbung Heute: Fortsetzung Schreibt man final vor eine Klasse, kann man von dieser nicht weiter erben. Würde man also die Klasse Hund final deklarieren: final class Hund... könnten keine andere Klasse mehr von Hund erben, class Dackel extends Hund... würde also zu einem Fehler führen. Vergleiche Utility-Klasse, hier ist genau dieses Verhalten gewünscht (warum?). Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 21 / 27
Fortsetzung Vererbung Vererbung und Generics Heute: Fortsetzung In Zusammenhang mit Generics kann man Vererbung dazu nutzen, einen variablen Datentyp auf alle Klassen einzuschränken, die von einer bestimmten Klasse erben. Erinnerung: Die generische Point-Klasse aus Tutorium 11 war unbrauchbar, weil sie Punkte aus jeder Art von Objekten erzeugen konnte. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 22 / 27
Fortsetzung Vererbung Heute: Fortsetzung Beispiel: Point als generische Klasse class Point<T extends Number> { T x; T y; Point(T x, T y) { this.x = x; this.y = y; public T getx() { return x; public T gety() { return y; public String tostring() { return "("+x.tostring()+","+y.tostring()+")"; Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 23 / 27
Fortsetzung Vererbung Heute: Fortsetzung Beispiel: Point als generische Klasse In der Zeile class Point<T extends Number> wird der unbekannte (generische) Datentyp T auf alle Klassen eingeschränkt, die von Number erben. Das sind z. B. Integer, Double usw. Point<Integer> p1 = new Point<Integer>(2, 3); funktioniert also weiterhin, während Point<String> p1 = new Point<String>(...); zu einem Fehler führt. Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 24 / 27
Übersicht Schluss 1 Rückblick 2 Allgemeines 3 Abschlußaufgabe 2 4 Fortsetzung Vererbung 5 Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 25 / 27
Schluss Ausblick Was machen wir nächste Woche? Besprechung des 6. Übungsblattes Letzte Fragen und Schwierigkeiten klären Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 26 / 27
Schluss Dennis Ewert (Gruppe 6) Programmieren 13. Tutorium WS 2008/2009 27 / 27