Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Raphael Fischer fischrap@student.ethz.ch 03.04.2014 Informatik II - Übung 06 Raphael Fischer fischrap@student.ethz.ch 03.04.2014.

Ähnliche Präsentationen


Präsentation zum Thema: "Raphael Fischer fischrap@student.ethz.ch 03.04.2014 Informatik II - Übung 06 Raphael Fischer fischrap@student.ethz.ch 03.04.2014."—  Präsentation transkript:

1 Raphael Fischer fischrap@student.ethz.ch 03.04.2014
Informatik II - Übung 06 Raphael Fischer

2 Objektorientierte Programmierung
Raphael Fischer

3 Klassenhierarchie public class Fahrzeug { … }
public class Auto extends Fahrzeug {…} public class Lastwagen extends Auto { … } Raphael Fischer

4 Hierarchie class Auto extends Fahrzeug {
class Fahrzeug { int Radzahl; String toString() { return "Fahrzeug. Radzahl = " + Radzahl; } } class Auto extends Fahrzeug {     double Hubraum;     String toString() {       return "Auto. Radzahl = " +  Radzahl + ", Hubraum = "  + Hubraum;     }   Raphael Fischer

5 Raphael Fischer

6 Typen-Cast (Kann Exception auslösen)
Instanceof und casts Was, wenn man Fahrzeug bekommt, aber eigentlich weiss, dass es ein Auto ist? Auf Hubraum zugreifen Typen-Cast (Kann Exception auslösen) if (f instanceof Auto)       System.out.println(((Auto)f).Hubraum);      else        System.out.println("f ist kein Auto!");  Raphael Fischer

7 Aufgabe 1: Vererbung Raphael Fischer

8 Abstrakte Klassen abstract class ClassName
Dienen nur als Oberklasse für andere Klassen new AbstractClass() geht nicht Können abstrakte Methoden definieren public abstract double flaeche(); Müssen überschrieben werden! Raphael Fischer

9 Abstrakte Klassen - Beispiel
GeomObject g = new GeomObject(); GeomObject g = new Kreis(); abstract class GeomObject public abstract double flaeche(); class Rechteck class Kreis private lengthY; private lengthX; public double flaeche(); private radius; public double flaeche(); Raphael Fischer

10 Abstrakte Klassen - Beispiel
Was nützt das jetzt? Wir können z.B. Listen von GeomObjects bauen Listen durchlaufen und auf jedem Objekt System.out.println(obj.flaeche()) aufrufen Oder Flächenwerte addieren... Es ist EGAL, was genau der statische Typ der Objekte ist – egal ob Rechteck oder Kreis! Wir können GeomObjects auch mittels flaeche() sortieren! Raphael Fischer

11 Bemerkung abstract class Object Jede Klasse erbt automatisch davon
Enthält z.B. standard-Definition von toString() Raphael Fischer

12 Interfaces Beschreiben «Eigenschaften» von Klassen Typische Beispiele:
Comparable: Objekte sind vergleichbar Serializable: Objekte können sich in einen String schreiben und wieder daraus herstellen Beschreibt abstrakte Methode(n), die Klasse dann implementieren muss Eine Klasse kann mehrere Interfaces implementieren! Raphael Fischer

13 Kein abstract, weil sowieso alles abstract in Interface
Interfaces - Beispiel Interface Comparable { public boolean smallerThan(Comparable other); } Fahrzeug implements Comparable { public double weight; public boolean smallerThan(Comparable other) { return this.weight < ((Fahrzeug)other).weight; } Kein abstract, weil sowieso alles abstract in Interface Raphael Fischer

14 Aufgabe 2: Abstract classes und Interfaces
Raphael Fischer

15 Vergleich abstract classes - Interfaces
Mehrfachvererbung nur bei Interfaces Parameter nur in abstract classes Funktions-Implementierungen nur in abstract classes Raphael Fischer

16 Hinweise zu Blatt 06 Raphael Fischer

17 U6.A1 Papieraufgabe zu Vererbung Raphael Fischer

18 Factories: Wieso? Zwei Informatiker Arbeiten mit Bäumen. Damit sie gleichzeitig Arbeiten können implementiert sie einer, der andere nutzt sie: Implementierung Nutzung Benutze: new ArrayTree() . Meinung geändert: Ändere alle new ArrayTree() zu new ListTree() Anfangs wird entschieden: Es wird ein ArrayTree Während der Entwicklung merkt man: ListTree wäre für diese Anwendung besser geeignet. Raphael Fischer

19 Lösung: Interface und Factory
Statt den Konstruktor direkt zu benutzen, wird dies über eine TreeFactory gemacht! Tree t = TreeFactory.makeTree(); Raphael Fischer

20 Raphael Fischer

21 U6.A2c) Programmiert eigenen Testcase Eclipse: Tests.java
Codeboard: publicTest.java Nehmt euch z.B. diesen als Beispiel: /** * Check toString for empty stack. */ @Test public void toStringEmpty() { IStack stack = StackFactory.create(); Assert.assertEquals("string representation is wrong", "[]", stack.toString()); } Raphael Fischer

22 U6.A3: Generische Listen Übungsserie 5 Übungsserie 6
Elemente der Liste: Ganzzahlen Value: int Übungsserie 6 Elemente der Liste: generische Objekte Value: Object Selbst eine Utility-Klasse erstellen: ListUtils implements IListUtils: handhabt generische Listen Vergleiche mit den Utility-Klassen aus A1 & A3 von Übung 5 Diesmal wird die Utility Klasse instantiiert (nicht mehr static) Raphael Fischer

23 Neue Klassen erstellen
Codeboard: Eclipse: Rechtsklick auf package -> New -> Class Raphael Fischer

24 U6.A3b) abstract class GeometricObject implements Comparable{
abstract int area(); boolean smallerThan(Comparable) { … } } class Rectangle { int area(){ … } } class Triangle { int area(){ … } } Raphael Fischer

25 Tipps zu U6.A3 U5.A3: sort in ListUtils (aus a)) Ähnliche Idee
Minimale Anpassung, da es sich statt int um generische Object- Elemente handelt. Wie sortiere ich etwas, das ich nicht kenne? Lösung: Interface Comparable, cast nach Comparable möglich public interface Comparable { boolean smallerThan(Comparable rhs); } Raphael Fischer

26 Tipps zu U6.A4 Schwere Aufgabe
Selbsttest: Wer das kann, hat keine Programmierprobleme in der Prüfung  Vereint die Effizienz von Arrays mit dem aufwandslosen Wachsen von Listen Implementierung des Interface Istack  Es kann u6a2.StackFactory.create() benutzt werden Raphael Fischer

27 …viel Spass! Informatik II - Übung 06


Herunterladen ppt "Raphael Fischer fischrap@student.ethz.ch 03.04.2014 Informatik II - Übung 06 Raphael Fischer fischrap@student.ethz.ch 03.04.2014."

Ähnliche Präsentationen


Google-Anzeigen