Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Curt Küchler Geändert vor über 5 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.