HERZLICH WILLKOMMEN PROGRAMMIERKURS (JAVA) ZUM. Dr. Vera Weil Institut für Informatik Universität zu Köln. 9. Vorlesung (05.

Größe: px
Ab Seite anzeigen:

Download "HERZLICH WILLKOMMEN PROGRAMMIERKURS (JAVA) ZUM. Dr. Vera Weil Institut für Informatik Universität zu Köln. 9. Vorlesung (05."

Transkript

1 HERZLICH WILLKOMMEN ZUM PROGRAMMIERKURS (JAVA) Dr. Vera Weil Institut für Informatik Universität zu Köln 9. Vorlesung (05. Dezember 2018)

2 Letztes Mal Statische Methoden und Felder Zugriffsmechanismen Vererbung 2 / 131

3 Frage vom letzten Mal 3 / 131

4 Klassen-Hierarchie anzeigen lassen Geht das? Ja! 4 / 131

5 Klassen-Hierarchie anzeigen lassen 5 / 131

6 Klassen-Hierarchie anzeigen lassen Im Package-Explorer: dann rechte Maustaste... 6 / 131

7 Klassen-Hierarchie anzeigen lassen 7 / 131

8 Klassen-Hierarchie anzeigen lassen 8 / 131

9 Klassen-Hierarchie anzeigen lassen 9 / 131

10 Klassen-Hierarchie anzeigen lassen...bei zwei Klassen mehr / 131

11 Noch mal zur Vererbung / 131

12 Vererbung (Reboot) // Animal.java public class Animal { int size; String typename = "Tier"; } void giblaut(){ System.out.println("Animal giblaut!"); } 12 / 131

13 Vererbung Animal a = new Animal(); a zeigt auf ein Objekt der Klasse Animal. public class Animal { int size; String typename = "Tier"; void giblaut(){...} } a hat Zugriff auf: Sonst nichts! Attribut size Attribut typename Methode giblaut() 13 / 131

14 Vererbung Zeiger a > Attribut size Attribut typename Methode giblaut() 14 / 131

15 Vererbung // Bird.java public class Bird extends Animal { String typename = "Vogel"; boolean isbird = true; void giblaut(){ System.out.println("Piep piep"); } void birdeigenemethode(){ System.out.println("Mich gibt es nur bei Bird!"); } 15 / 131

16 Vererbung Bird b = new Bird(); public class Bird extends Animal { String typename = "Vogel"; boolean isbird = true; void giblaut(){...}; void birdeigenemethode(){...}; } b hat (direkten) Zugriff auf: isbird, typename giblaut(), birdeigenemethode() Sonst nichts? Doch! Bird erbt alles von Animal! 16 / 131

17 Vererbung public class Bird extends Animal { String typename = "Vogel"; boolean isbird = true; void giblaut(){...}; void birdeigenemethode(){...}; } public class Animal { int size; String typename = "Tier"; void giblaut(){...} } 17 / 131

18 Vererbung Bird b = new Bird(); public class Bird extends Animal { String typename = "Vogel"; boolean isbird = true; void giblaut(){...}; void birdeigenemethode(){...}; } b hat (direkten) Zugriff auf: isbird, typename giblaut(), birdeigenemethode() und das von Animal vererbte Attribut size 18 / 131

19 Vererbung Bird b = new Bird(); public class Bird extends Animal { String typename="vogel"; boolean isbird=true; void giblaut(){...}; void birdeigenemethode(){...}; } System.out.println(b.typeName); Vogel System.out.println(b.isBird); true System.out.println(b.size); 0 19 / 131

20 Vererbung Zeiger a (Animal-Zeiger) > Attribut size Attribut typename Methode giblaut() 20 / 131

21 Vererbung Zeiger b (Bird-Zeiger) > Attribut size Attribut typename Methode giblaut() Methode birdeigenemethode() 21 / 131

22 Vererbung Zeiger b (Bird-Zeiger) > Attribut size Attribut typename Methode giblaut() Methode birdeigenemethode() von Animal geerbt 22 / 131

23 Vererbung Zeiger b (Bird-Zeiger) > Attribut size Attribut typename Methode giblaut() Methode birdeigenemethode() von Animal geerbt eigenes Attribut eigene Methode eigene Methode 23 / 131

24 Vererbung Jedes Objekt der Unterklasse ist immer auch ein Objekt der Oberklasse. Aber nicht umgekehrt! Animal a = new Animal(); Bird b = new Bird(); boolean t = a instanceof Animal; System.out.println(t); boolean t = a instanceof Bird; System.out.println(t); true false 24 / 131

25 Vererbung Jedes Objekt der Unterklasse ist immer auch ein Objekt der Oberklasse. Aber nicht umgekehrt! Animal a = new Animal(); Bird b = new Bird(); boolean t = b instanceof Bird; System.out.println(t); boolean t = b instanceof Animal; System.out.println(t); true true 25 / 131

26 Kompatibilität (Reboot) Animal a = new Animal(); Bird b = new Bird(); a = b; boolean t = b instanceof Bird; System.out.println(t); boolean t = b instanceof Animal; System.out.println(t); funktioniert! true true 26 / 131

27 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; boolean t = a instanceof Animal; System.out.println(t); boolean t = a instanceof Bird; System.out.println(t); funktioniert! true true!!! 27 / 131

28 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; boolean t = a instanceof Animal; System.out.println(t); funktioniert! true boolean t = a instanceof Bird; System.out.println(t); true a zeigt gerade auf ein Bird-Objekt! 28 / 131

29 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; a zeigt auf Bird-Objekt ist aber immer noch Animal-Zeiger Zeiger a (Animal-Zeiger) > Attribute size, typename Methode giblaut() 29 / 131

30 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; a zeigt auf Bird-Objekt ist aber immer noch Animal-Zeiger a.size a.isbird ok! Fehler! a besitzt keinen Zugriff auf isbird a hat nur die Attribute von Animal 30 / 131

31 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; a zeigt auf Bird-Objekt ist aber immer noch Animal-Zeiger a.size a.isbird ok! Fehler! b.size = 2; Wert von a.size: 0 (default) oder 2? 2 Adresse von b, Attribute von Animal 31 / 131

32 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; Hier wurde einem Animal-Zeiger die Adresse eines Bird-Zeigers zugewiesen. Hier wurde einem Oberklassen-Zeiger die Adresse eines Unterklassen-Zeigers zugewiesen. 32 / 131

33 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; Hier wurde einem Oberklassen-Zeiger die Adresse eines Unterklassen-Zeigers zugewiesen. Der Oberklassen-Zeiger kann nur auf die Attribute zugreifen, welche die Oberklasse besitzt. Die Attribut-Werte entsprechen aber den Werten des Objektes der Unterklasse. 33 / 131

34 Kompatibilität Animal a = new Animal(); Bird b = new Bird(); a = b; a.giblaut(); // Piep piep! a.birdeigenemethode(); Fehler! a hat nur den Werkzeugkasten eines Animal-Zeigers! Wir können also die Adresse eines Unterklassen-Objektes an eine Referenz der Oberklasse zuweisen. Gegebenenfalls erleiden wir aber Werkzeugverlust. 34 / 131

35 Kompatibilität Animal a = new Bird(); Bird b = a; Fehler! Type Mismatch: Cannot convert from Bird to Animal! Problem? b zeigt auf ein Bird-Objekt b hat Zugriff auf Bird-Attribut isbird a zeigt auf ein Bird-Objekt a hat keinen Zugriff auf Bird-Attribut isbird 35 / 131

36 Kompatibilität Animal a = new Bird(); Bird b = a; Type Mismatch Problem? Lösung? a zeigt auf ein Bird-Objekt a hat keinen Zugriff auf Bird-Attribut isbird Bird b = (Bird) a; a hat keinen Zugriff auf Bird-Attribut isbird Aber über b kommen wir an das a-objekt ran! 36 / 131

37 Kompatibilität Animal a = new Bird(); Bird b = a; Type Mismatch Falls a auf ein Bird-Objekt zeigt, dann können wir den Zeiger a an einen Bird-Zeiger zuweisen. Wir müssen ihn aber als Bird-Zeiger casten. Also: Bird b = (Bird) a; Läuft! 37 / 131

38 Kompatibilität Animal a = new Bird(); Bird b = (Bird) a; 38 / 131

39 public class Article { //wird aufgerufen, um Informationen anzuzeigen void showarticleinfo(){ showinfo(); } } void showinfo(){ System.out.println("Article Info"); } 39 / 131

40 public class Book extends Article { } void showinfo(){ System.out.println("Book Info"); } 40 / 131

41 public static void main(string[] args) { Article[] alle = new Article[5]; //5 Artikel im Warenkorb for(int i = 0; i<alle.length; i++){ alle[i] = new Article(); } } for(article a : alle){ a.showarticleinfo(); // alle Informationen raushauen } 41 / 131

42 Ausgabe: Article Info Article Info Article Info Article Info Article Info 42 / 131

43 public static void main(string[] args) { Article[] alle = new Article[5]; //5 Artikel im Warenkorb for(int i = 0; i<alle.length; i++){ alle[i] = new Article(); } alle[0] = new Book(); //Buch an erster Stelle } for(article a : alle){ a.showarticleinfo(); // alle Informationen raushauen //keine Aenderungen noetig!! } 43 / 131

44 Ausgabe: Book Info Article Info Article Info Article Info Article Info 44 / 131

45 Jetzt gibt es bei Book vielleicht auch noch eine Erste Seite lesen -Option. Die gibt es bei den anderen Artikeln nicht, das ist eine Besonderheit von Book. // Besonderheit von Book // Diese Methode besitzt kein anderer Artikel void firstpage(){ System.out.println("I have First Page Option"); } 45 / 131

46 Article[] alle = new Article[5]; //5 Artikel im Warenkorb for(int i = 0; i<alle.length; i++){ alle[i] = new Article(); } alle[0] = new Book(); //Buch an erster Stelle alle[3] = new Book(); //Buch an vierter Stelle for(article a : alle){ a.showarticleinfo(); if(a instanceof Book){ Book b = (Book) a; b.firstpage(); } } //falls Buch, zeige F.P.O. //nur Book darf firstpage benutzen 46 / 131

47 Ausgabe: Book Info - I have First Page Option Article Info Article Info Book Info - I have First Page Option Article Info 47 / 131

48 Vererbung Java erlaubt nur Einfachvererbung, keine Mehrfachvererbung. eine Klasse kann immer nur von einer Oberklasse erben zwei Väter gibt es nicht nur einen Vater, nur einen Großvater,... Softcover extends Book extends TolleKlasse!!geht nicht!! Das spielt gleich eine Rolle, bei Interfaces / 131

49 Interfaces (Schnittstellen) 49 / 131

50 Schnittstelle Ganz lapidar: Schnittstelle = Kontaktmöglichkeit zwischen zwei Dingen USB-Schnittstelle = Kontaktmöglichkeit zwischen Smartphone und Laptop Andockstelle 50 / 131

51 Interfaces Interfaces sind Beschreibungen von Schnittstellen. Enthalten hauptsächlich abstrakte Methoden (also Methodenköpfe) und Konstanten. Damit wird beschrieben, was mit der Schnittstelle möglich sein muss. Die genaue Umsetzung der jeweiligen Methoden muss man dann implementieren, also mit Leben füllen. 51 / 131

52 Interfaces ähnlich zu abstrakten Klassen 52 / 131

53 Interfaces: Beispiel Onlineshop. Bietet Artikel und Dienstleistungen. Dienstleistung extends Article? Keinen Sinn. Artikel soll bestellbar sein, falls vorrätig. Dienstleistung soll bestellbar sein, falls realisierbar. Und alles, was bestellbar ist, soll die Methode zurzeitbestellbar() beinhalten. Wie auch immer die umgesetzt wird. 53 / 131

54 Interfaces: Beispiel Onlineshop. Bietet Artikel und Dienstleistungen. Hierarchie (Vererbung)? Keinen Sinn. Artikel soll bestellbar sein, falls vorrätig. Dienstleistung soll bestellbar sein, falls realisierbar. Und alles, was bestellbar ist, soll die Methode zurzeitbestellbar() beinhalten. Wie auch immer die umgesetzt wird. Und egal, ob Dienstleistung oder Artikel. 54 / 131

55 Interfaces: Beispiel Onlineshop. Bietet Artikel und Dienstleistungen. Und alles, was bestellbar ist, soll die Methode zurzeitbestellbar() beinhalten. Wie auch immer die umgesetzt wird. mögliche Lösung: abstrakte Klasse Bestellbar() Artikel- und Dienstleistungsklasse davon ableiten erben dann auch zurzeitbestellbar() 55 / 131

56 Interfaces: Beispiel Onlineshop. Bietet Artikel und Dienstleistungen. Und alles, was bestellbar ist, soll die Methode zurzeitbestellbar() beinhalten. Wie auch immer die umgesetzt wird. mögliche Lösung: abstrakte Klasse Bestellbar() Artikel- und Dienstleistungsklasse davon ableiten erben dann auch zurzeitbestellbar() möglich, aber es geht auch anders deutlicher bei folgendem Problem 56 / 131

57 Interfaces: Beispiel Onlineshop. Bietet Artikel. Alles, was rabattierfähig ist, soll die Methode getpreismitrabatt() zeigeimrotenwarenkorb(); beinhalten. Wie auch immer die umgesetzt wird. jetzt wird s kompliziert / 131

58 Article nodiscount Discount Book CD Hardcover Softcover Musik Hoerspiel Buch_inlaendisch Buch_importiert 58 / 131

59 Article nodiscount Discount Book CD Hardcover Softcover Musik Hoerspiel Buch_inlaendisch Buch_importiert 59 / 131

60 Article nodiscount Discount Hardcover Book Softcover nicht erlaubt CD Musik Hoerspiel Buch_inlaendisch Buch_importiert 60 / 131

61 Article Hardcover Book Softcover nicht erlaubt CD Musik Hoerspiel Buch_inlaendisch Buch_importiert 61 / 131

62 Article Book CD Hardcover Softcover Musik Hoerspiel Buch_inlaendisch Buch_importiert 62 / 131

63 Article Book CD Hardcover Softcover Musik Hoerspiel Buch_inlaendisch Buch_importiert 63 / 131

64 Article Book CD* Hardcover Softcover Musik Hoerspiel Buch_inlaendisch Buch_importiert* 64 / 131

65 Interfaces Die mit * markierten Klassen gehören auch noch zu einem weiteren Typ. Dieser Typ bringt ein paar Methoden etc. mit. CD extends Article implements Discountable{. 65 / 131

66 Interfaces CD extends Article implements Discountable{ CD erbt von der Klasse Article CD implementiert die Schnittstelle Discountable Alle Schnittstellen-Methoden sind abstract und public, auch ohne Angaben dieser Modifizierer. Implementiert eine Klasse nicht alle Methoden der Schnittstelle, wird sie selbst eine abstrakte Klasse. Kennzeichnung mit abstract 66 / 131

67 Interfaces CD extends Article implements Discountable{ CD erbt von der Klasse Article CD implementiert die Schnittstelle Discountable Schnittstellen können keine Objekte erzeugen. Interfaces haben keinen Konstruktor... Eine Klasse kann beliebig viele Schnittstellen implementieren. werden durch Kommata getrennt 67 / 131

68 Interfaces CD extends Article implements Discountable{ CD erbt von der Klasse Article CD implementiert die Schnittstelle Discountable Wenn eine Klasse ein Interface implementiert, muss sie alle Methoden des Interfaces überschreiben, oder selbst zu einer abstrakten Klasse werden. Ein Interface kann mit dem Schlüsselwort interface selbst geschrieben werden. 68 / 131

69 Interfaces: Beispiel String String implementiert unter anderem das Interface CharSequence. Bei sieht das dann so aus: 69 / 131

70 70 / 131

71 String implementiert CharSequence. Also hat String eine Methode namens length(), welche die Länge (als int) der Zeichenkette wiedergibt. 71 / 131

72 Interfaces String t = "Bonjour."; System.out.println(t.length()); Ausgabe: 8 Weil die vordefinierte Klasse String das Interface CharSequence implementiert, können Sie einfach davon ausgehen, dass String eine Methode namens length() besitzt, die sinnvoll implementiert ist. Diese Arbeit haben die Java-Entwickler für Sie übernommen. 72 / 131

73 Interfaces String t = "Bonjour."; System.out.println(t.length()); Ausgabe: 8 Um an die Länge von t zu kommen, bietet Ihnen das Interface CharSequence die Schnittstellenmethode length(). so kommen wir an die Länge von t dran ohne selbst etwas wirklich programmieren zu müssen 73 / 131

74 // Colorable.java public interface Colorable { boolean canbecolored(); boolean hasacolor(); void getscolor(int color); } 74 / 131

75 // Pullover.java public class Pullover implements Colorable { int color; boolean canbecolored() { return true; } boolean hasacolor(){... return true; }; void getscolor(int color){ this.color = color; }; } 75 / 131

76 Interfaces Mehr Informationen? Siehe entsprechende Literatur / Quellen. 76 / 131

77 Rekursion 77 / 131

78 Rekursion Methoden können sich selbst aufrufen. Ohne Abbruchbedingung (zum Beispiel mit if-abfrage) kann das unendlich lang dauern. static void down(int n){ down(n-1); } down(10); in der main-methode führt zu / 131

79 Rekursion static void down(int n){ down(n-1); } Aufruf von down(10) führt zu...aufruf von down(9)...aufruf von down(8) und so weiter / 131

80 Rekursion Rekursion macht aber in einigen Kontexten durchaus Sinn. Zeit- und Speicherplatzaspekte sollten aber bedacht werden. Fakultät berechnen, z.b. 5! = 5 * 4 * 3 * 2 * 1 Fibonacci-Reihe 1,1,2,3,5,8,13,... Bei einigen Sortieralgorithmen / 131

81 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e v i e r t a g e v i e r t a g e Alles in der untersten Reihe ist sortiert! 81 / 131

82 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e v i e r t a g e v i e r t a g e Mergen! 82 / 131

83 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e v i e r t a g e v oder i zuerst? Zuerst i! v i i v v i e r t a g e 83 / 131

84 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e i v e r t a g e v i e r t a g e 84 / 131

85 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e i v e r a t g e v i e r t a g e 85 / 131

86 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e v i e r t a g e i v e r a t e g v i e r t a g e 86 / 131

87 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. v i e r t a g e e i r v a e g t i v e r a t e g v i e r t a g e 87 / 131

88 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v e i r v a e g t i v e r t a g e v i e r t a g e 88 / 131

89 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 89 / 131

90 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 90 / 131

91 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 91 / 131

92 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 92 / 131

93 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 93 / 131

94 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 94 / 131

95 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v + a e g t 95 / 131

96 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v + e i r v a e g t 96 / 131

97 Sortieren: Mergesort Ziel: Sortieren des folgenden Buchstabenarrays, aufsteigend. a e e g i r t v e i r v a e g t 97 / 131

98 Sortieren: Mergesort in Pseudocode mergesort(liste) if( liste <= 1){ return liste } else halbiere liste in linkeliste, rechteliste linkeliste = mergesort(linkeliste) rechteliste = mergesort(rechteliste) return merge(linkeliste, rechteliste) 98 / 131

99 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste, rechteliste linkeliste = mergesort(linkeliste) rechteliste = mergesort(rechteliste) return merge(linkeliste, rechteliste) 99 / 131

100 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = mergesort(5,8,1,3) rechteliste = mergesort(4,3,6,0) return merge(linkeliste, rechteliste) 100 / 131

101 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = mergesort(5,8,1,3) // Aufruf! rechteliste = mergesort(4,3,6,0) return merge(linkeliste, rechteliste) 101 / 131

102 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = mergesort(5,8) // Aufruf! rechteliste = mergesort(1,3) return merge(linkeliste, rechteliste) 102 / 131

103 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = mergesort(5) // Aufruf! rechteliste = mergesort(8) return merge(linkeliste, rechteliste) 103 / 131

104 Sortieren: Mergesort in Pseudocode mergesort(5) //liste ist jetzt 5 if( liste <= 1){ return liste //Rueckkehr! } else / 131

105 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = mergesort(5) // Rueckkehr! rechteliste = mergesort(8) return merge(linkeliste, rechteliste) 105 / 131

106 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 // Rueckkehr! rechteliste = mergesort(8) return merge(linkeliste, rechteliste) 106 / 131

107 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 rechteliste = mergesort(8)// Aufruf! return merge(linkeliste, rechteliste) 107 / 131

108 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 rechteliste = mergesort(8)// Rueckkehr! return merge(linkeliste, rechteliste) 108 / 131

109 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 rechteliste = 8// Rueckkehr! return merge(linkeliste, rechteliste) 109 / 131

110 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 rechteliste = 8 return merge(5, 8) //Aufruf! 110 / 131

111 Sortieren: Mergesort in Pseudocode mergesort(5,8) //liste ist jetzt 5,8 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5), rechteliste (hier: 8) linkeliste = 5 rechteliste = 8 return (5, 8) 111 / 131

112 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = mergesort(5,8) // Aufruf! rechteliste = mergesort(1,3) return merge(linkeliste, rechteliste) 112 / 131

113 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = (5,8) // Rueckkehr! rechteliste = mergesort(1,3) return merge(linkeliste, rechteliste) 113 / 131

114 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = (5,8) rechteliste = mergesort(1,3) //Aufruf! return merge(linkeliste, rechteliste) 114 / 131

115 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = (5,8) rechteliste = mergesort(1,3) //Rueckkehr! return merge(linkeliste, rechteliste) 115 / 131

116 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = (5,8) rechteliste = (1,3) return merge((5,8), (1,3)) //Aufruf 116 / 131

117 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3) //liste ist jetzt 5,8,1,3 if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8), rechteliste (hier: 1,3) linkeliste = (5,8) rechteliste = (1,3) return (1,3,5,8) //Rueckkehr! 117 / 131

118 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = mergesort(5,8,1,3) // Aufruf! rechteliste = mergesort(4,3,6,0) return merge(linkeliste, rechteliste) 118 / 131

119 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = mergesort(5,8,1,3) // Rueckkehr! rechteliste = mergesort(4,3,6,0) return merge(linkeliste, rechteliste) 119 / 131

120 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = mergesort(4,3,6,0) return merge(linkeliste, rechteliste) 120 / 131

121 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = mergesort(4,3,6,0) //Aufruf! return merge(linkeliste, rechteliste) 121 / 131

122 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = mergesort(4,3,6,0) //Rueckkehr! return merge(linkeliste, rechteliste) 122 / 131

123 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = (0,3,4,6) return merge(linkeliste, rechteliste) 123 / 131

124 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = (0,3,4,6) return merge((1,3,5,8), (0,3,4,6)) //Aufruf! 124 / 131

125 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = (0,3,4,6) return (0,1,3,3,4,5,6,8) //Rueckkehr! 125 / 131

126 Sortieren: Mergesort in Pseudocode mergesort(5,8,1,3,4,3,6,0) if( liste <= 1){ return liste } else halbiere liste in linkeliste (hier: 5,8,1,3), rechteliste (hier: 4,3,6,0) linkeliste = (1,3,5,8) rechteliste = (0,3,4,6) return (0,1,3,3,4,5,6,8) //Fertig! 126 / 131

127 Mergesort Da wir ohnehin logarithmisch viele Aufrufe von Mergesort benötigen, macht es keinen wirklichen Unterschied, ob wir auf einem Array mit 5 Elementen arbeiten, oder auf einem Array mit 8 Elementen arbeiten.? siehe Info I+II 127 / 131

128 Mergesort Da wir ohnehin logarithmisch viele Aufrufe von Mergesort benötigen, macht es keinen wirklichen Unterschied, ob wir auf einem Array mit 5 Elementen arbeiten, oder auf einem Array mit 8 Elementen arbeiten. Es macht (komplexitätstheoretisch) keinen Unterschied, ob wir auf k Elementen arbeiten, oder auf der Anzahl von Elementen arbeiten, die der nächstgrößeren Zweierpotenz von k aus entsprechen. 128 / 131

129 Mergesort Was heißt das für uns? Um MergeSort anzuwenden, verändern wir das Array. Wir verlängern es um entsprechend viele Stellen, und setzen da Integer.MAX_VALUE rein, z.b. Dann führen wir MergeSort aus. Dann schneiden wir die künstlichen Stellen wieder ab. 129 / 131

130 Mergesort Wie finden wir die kleinste Zweierpotenz größer als k? Zum Beispiel: Teste: 1 > k? Teste: 2 > k? Teste: 4 > k?... Falls z.b. k = 7, dann ist 8 die nächstgrößere Zweierpotenz. 130 / 131

131 Rueckblick Vererbung (noch mal detaillierter) Interfaces Rekursion mit Beispiel MergeSort Vielen Dank für Ihre Aufmerksamkeit! 131 / 131

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article 2.13 Vererbung Klassen modellieren Objekte der realen Welt. Diese sind oft hierarchisch gegliedert. Beispiel: Ein Verlag bietet Bücher und CDs an. Beide Medien sind Artikel des Verlages. Book author: String

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Abstrakte Klassen und Methoden & Interfaces Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie

Mehr

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann

Mehr

II.4.2 Abstrakte Klassen und Interfaces - 1 -

II.4.2 Abstrakte Klassen und Interfaces - 1 - 1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1

Mehr

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 - ! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete II.4.2 Abstrakte Klassen und Interfaces - 1 - Ähnliche Programmteile public class Bruchelement { Bruch wert;

Mehr

Informatik II Übung 6

Informatik II Übung 6 Informatik II Übung 6 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 11.4.2018 Carina Fuss 11.4.2018 1 Übung 6 Nachbesprechung Übung 5 Objektorientierung Vererbung, Polymorphie, abstrakte Klassen, Interfaces,

Mehr

Programmierung Nachklausurtutorium

Programmierung Nachklausurtutorium Programmierung Nachklausurtutorium Laryssa Horn, Tim Engelhardt 20 März 2018 Klassen Wofür wir Klassen brauchen: Definieren ein Bauplan eines Objektes Bauplan enthält Attribute und Methoden Klasse Beispiel

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Java Einführung Vererbung und Polymorphie. Kapitel 13

Java Einführung Vererbung und Polymorphie. Kapitel 13 Java Einführung Vererbung und Polymorphie Kapitel 13 Inhalt Klassifikation (UML) Implementierung von Vererbungshierarchien Überschreiben von Methoden Polymorphismus: Up-Casting und Dynamisches Binden Schlüsselwort

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 (7. Juni 2012) 1 Besprechung Blatt 6 Fragen 2 Referenzen Referenzsemantik 3 Vererbung Allgemein abstract Interfaces Vererbung in UML 4 Vorbereitung Blatt 7 Anmerkungen Fragen Fragen zu Blatt 6? Referenzsemantik

Mehr

Das Interface-Konzept am Beispiel der Sprache Java

Das Interface-Konzept am Beispiel der Sprache Java Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse

Mehr

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Informatik II Übung 06. Benjamin Hepp 5 April 2017 Informatik II Übung 06 Benjamin Hepp benjamin.hepp@inf.ethz.ch 5 April 2017 Nachbesprechung U5 5 April 2017 Informatik II - Übung 01 2 Nachbesprechung U5 1. Einfach verkettete Listen Keine Probleme 2.

Mehr

Wiederholung. Klassenhierarchie:

Wiederholung. Klassenhierarchie: Wiederholung Klassenhierarchie: class Unter extends Ober {... Die Unterklasse Unter erweitert die Funktionalität ihrer Oberklasse Ober. Objekte der Klasse Unter können anstelle von Objekten der Klasse

Mehr

Vererbung, Polymorphie

Vererbung, Polymorphie Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08

Mehr

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2016/2017 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in die

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II 432 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 433 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen

Mehr

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II 446 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 447 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus

Mehr

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Grundidee abstrakter Klassen:

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen

Mehr

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax Weitere Beispiele Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts public interface Funktion { boolean istimdefbereich(double x); double wert(double x); String gibbeschreibung(); public interface

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 11: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2017/2018 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

14. Java Objektorientierung

14. Java Objektorientierung Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen

Mehr

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1 IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Kapitel 5: Interfaces

Kapitel 5: Interfaces Liste P: Programmieren mit Java WS 2001/2002 Prof. Dr. V. Turau FH Wiesbaden Kapitel 5: Interfaces Folie 82 : Einleitung Betrachtet man die Programmierleistung für ein Produkt über einen längeren Zeitraum,

Mehr

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

14. Java Objektorientierung. Klassen, Vererbung, Kapselung 427 14. Java Objektorientierung Klassen, Vererbung, Kapselung Objektorientierung: Verschiedene Aspekte 428 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 3 29.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klassen ableiten

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces 10 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Interfaces Aber: Mehrfachvererbung von Klassen ist in Java nicht erlaubt. Ausweg Definition eines Interfaces, z.b.:

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Fakultät IV Elektrotechnik/Informatik

Fakultät IV Elektrotechnik/Informatik Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)

Mehr

Info B VL 8: Abstrakte Klassen & Interfaces

Info B VL 8: Abstrakte Klassen & Interfaces Info B VL 8: Abstrakte Klassen & Interfaces Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 8: Abstrakte

Mehr

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierkurs C++ Abstrakte Klassen und Methoden Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware

Mehr

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010 Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung Prof. R. Westermann Endterm Klausur zu Informatik I 20. Februar 2010 ˆ Die Arbeitszeit beträgt 120

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

14. Java Objektorientierung

14. Java Objektorientierung Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen

Mehr

Musterlösung Stand: 5. Februar 2009

Musterlösung Stand: 5. Februar 2009 Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)

Mehr

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 13 Einstieg in die Informatik mit Java Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 13 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung

Mehr

Objektorientierte Programmierung. Kapitel 14: Interfaces

Objektorientierte Programmierung. Kapitel 14: Interfaces 14. Interfaces 1/26 Objektorientierte Programmierung Kapitel 14: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/ brass/oop13/

Mehr

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich Informatik II Übungsstunde 6 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Besprechung der Vorlesung Uebungsbezogene Themen: Statisches & Dynamisches Type Checking Zeit zum Programmieren...

Mehr

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK ECHNISCHE UNIVERSIÄ MÜNCHEN FAKULÄ FÜR INFORMAIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2007/2008 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 9 F. Forster,. Gawlitza,

Mehr

Objektorientierung (OO)

Objektorientierung (OO) Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members

Mehr

Liste Programmieren Java Überblick

Liste Programmieren Java Überblick Liste Programmieren Java Überblick 1 Was ist Java? 2 Klassen und Objekte 4 Schnittstellen 5 Innere Klassen 6 Exceptions 7 Funktionsbibliothek 8 Datenstrukturen und Algorithmen 9 Ein-/Ausgabe 10 Threads

Mehr

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1 Vererbung 1 11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object

Mehr

Interfaces und Vererbung

Interfaces und Vererbung Interfaces und Vererbung Einführung in Java Folie 1 von 31 12. Mai 2011 Ivo Kronenberg Inhalt Interfaces Statische und dynamische Typen Visiblitätsmodifier Vererbung Überschreiben von Methoden Konstruktoren

Mehr

Tafelübung 07 Algorithmen und Datenstrukturen

Tafelübung 07 Algorithmen und Datenstrukturen Tafelübung 07 Algorithmen und Datenstrukturen Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Vererbung Grundlagen Abstrakte

Mehr

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus Vererbung Generalisierung und Spezialisierung Vererbung und Polymorphismus Wir wollen in unserem Aquarium verschiedene Arten von Fischen schwimmen lassen. In einem ersten Ansatz definieren wir nicht nur

Mehr

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete 2 Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, und Pakete Martin Wirsing Ziele Den Begriff der einfachen und mehrfachen Vererbung verstehen Verstehen, wann Vererbung eingesetzt wird deklarationen

Mehr

Interfaces und Generics

Interfaces und Generics Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Interfaces und Generics Jan-Henrik Haunert Lehrstuhl für Informatik I Übersicht Liste und InsertionSort für Punkte für Objekte beliebiger

Mehr

Programmieren 1 09 Vererbung und Polymorphie

Programmieren 1 09 Vererbung und Polymorphie Programmieren 1 09 Vererbung und Polymorphie Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 I. VERERBUNG 2 2 Vererbung Von Interfaces übernehmen

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, Polymorphie und innere Klassen 2 Vererbung im Klassendiagramm (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Object

Mehr

II.4.5 Generische Datentypen - 1 -

II.4.5 Generische Datentypen - 1 - 1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.5 Generische Datentypen - 1 - Ähnliche

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015 Fakultät IV NI & CV Probeklausur Java Einführung in die Informatik Wintersemester 2014/2015 Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen

Mehr

Praxis der Programmierung

Praxis der Programmierung Klassenvariablen und -methoden, Vererbung Institut für Informatik und Computational Science Henning Bordihn 1 Klassenvariablen und -methoden 2 Klassenvariablen und -methoden werden mit dem Schlüsselwort

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

IT I: Heute. Nachbetrachtung Wissensüberprüfung. Einführung Vererbung. Roboter in becker.robots. Filialenbelieferung 4.11.

IT I: Heute. Nachbetrachtung Wissensüberprüfung. Einführung Vererbung. Roboter in becker.robots. Filialenbelieferung 4.11. IT I: Heute Nachbetrachtung Wissensüberprüfung Einführung Vererbung Roboter in becker.robots Filialenbelieferung 4.11.2014 IT I - VO 4 1 Organisatorisches Tutorium am Mi, 12.11. schon um 11 Uhr (bis 12:30).

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Übersicht Liste und InsertionSort für e für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann

Mehr

Aufgabe 1 (Programmanalyse, Punkte)

Aufgabe 1 (Programmanalyse, Punkte) 2 Aufgabe 1 (Programmanalyse, 8 + 6 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Schreiben Sie hierzu jeweils die ausgegebenen Zeichen hinter den Kommentar OUT:. public class

Mehr

Ersetzbarkeit und Verhalten

Ersetzbarkeit und Verhalten Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 14.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung 14.1.08 1 / 11 Übersicht 1

Mehr

Abstrakte Basisklassen

Abstrakte Basisklassen Softwareentwicklung II (IB) Abstrakte Basisklassen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 24.06.2018 15:20 Inhaltsverzeichnis Idee.........................................

Mehr

Java Grundlagen 2 - OOP

Java Grundlagen 2 - OOP Institut für Programmierung und Reaktive Systeme Java Grundlagen 2 - OOP Markus Reschke 20.08.2014 Eine kleine Geschichte 1 Spezifikation Es sollen Formen in einer GUI angezeigt werden: Ein Quadrat, ein

Mehr

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface Abstrakte Klassen, Interface Beispiel: Vögel Definition von Klassen enthält Abstraktion von den konkreten Objekten. Z.B.: Klasse: Vogel Kann ein Objekt der Klasse Vogel instanziiert werden? Nein, es gibt

Mehr

Die Welt in unseren Programmen false -1.4E-12. false. Klassen

Die Welt in unseren Programmen false -1.4E-12. false. Klassen Algorithmen und Datenstrukturen Die Welt in unseren Programmen Die Welt in unseren Programmen Wintersemester 2012/13 9. Vorlesung Sortieren von Objekten 1.357374356 25236748458 true "HalloWelt!" 14136.23462

Mehr