Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp

Größe: px
Ab Seite anzeigen:

Download "Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp"

Transkript

1 Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp Th. Letschert, FH Giessen-Friedberg

2 Th. Letschert OOP 2 Vererbung (Inhertitance) I Wiederverwendung von Klassendefinitionen Erweiterung von Objekt-Konstruktionen Initialisierung bei Vererbung Vererbung und das Typ-System von Java Seite 2

3 Klassen und Objekte Klasse : Muster / Vorschrift zur Erzeugung von Objekten Objekt : Exemplar / Instanz der Klasse Klasse public class Kuh { Aggregation (Beziehung zwischen Instanzen der Klassen) Kuh Horn: hornlinks Horn: hornrechts muhen(): Ton fressen(futter): void 4 Bein Futter <<snapshot>> Attribute Methoden Assoziation (allgemeine Abhängigkeit der Klassen) Stereotyp ~ Instanz private Bein[] bein = new Bein[4]; private Horn hornlinks, hornrechts; public Kuh() { for ( int i=0; i<4; i++) bein[i] = new Bein(); public Ton muhen() { return null; public void fressen( Futter f ) { berta Objekt public static void main(string[] args){ Kuh berta = new Kuh(); Klasse und Instanz in UML Klasse und Instanz in Java Seite 3

4 Klassen und Subklassen Klasse : Muster / Vorschrift zur Erzeugung von Objekten Subklasse : erweitertes Muster / Vorschrift zur Erzeugung von Objekten Kuh Horn: hornlinks Horn: hornrechts muhen(): Ton fressen(futter): void Futter Milch public class Kuh {... public class MilchKuh extends Kuh { public Milch melken() { return new Milch(); Bein <<snapshot>> berta 4 Vererbung: ist ein - Beziehung MilchKuh melken(): Milch <<snapshot>> berta Kuh MilchKuh Ton t1 = berta.muhen(); Ton t2 = carla.muhen(); berta = new Kuh(); carla = new MilchKuh(); Milch m1 = berta.melken(); Milch m2 = carla.melken(); Klasse, Subklasse, Instanz in UML Klasse, Subklasse, Instanz in Java Seite 4

5 Klassen und Subklassen => Objekte und erweiterte Objekte Die abgeleitete Klasse erbt = übernimmt von der Basisklasse Instanzvariablen Methoden hornlinks hornrechts Ton muhen() {... void fressen(futter f) {... Kuh berta Objekte der abgeleiteten Klasse enthalten die Instanzvariablen Methoden die auch Objekte der Basisklasse enthalten und noch andere dazu übernommen (geerbt) hornlinks hornrechts Ton muhen() {... void fressen(futter f) {... Milch melken() {... Basis- (Kuh-) Anteil Milchkuh- Anteil Objekte abgeleiteter Klassen setzen sich aus einem Basisund einem abgeleiteten Anteil zusammen. MilchKuh carla Erweiterung Seite 5

6 Klassen und Subklassen: Verallgemeinerung und Spezialisierung Die Basisklasse ist allgemeiner als die abgeleitete Klasse. Die abgeleitete Klasse ist eine Spezialisierung der Basisklasse. Objekte der abgeleiteten Klasse sind Erweiterungen der Objekte der Basisklasse: sie wissen das, was Objekten der Basisklasse wissen (und eventuell noch mehr). sie können das, was Objekte der Basisklasse können (und eventuell noch mehr). Kuh MilchKuh Das allgemeine Konzept Verallgemeinerung Spezialisierung Das spezielle Konzept Jede MilchKuh ist eine Kuh, aber nicht umgekehrt. Nur manche Kühe sind Milchkühe. Seite 6

7 Th. Letschert OOP 2 Vererbung und Klassen- / Objekt-Initialisierungen Seite 7

8 Initialisierung und Vererbung Initialisierung: 1. Klasse wird initialisiert 1.1. Klassenvariablen mit Zuweisung werden belegt 1.2. statischer Initialisier wird ausgeführt 2. Objekt wird initialisiert 2.1. Instanzvariablen mit Zuweisung werden belegt 2.2. Objekt-Initialisier wird ausgeführt 2.3. Ein Konstruktor wird ausgeführt (Bei Klassen ohne Konstruktordefinition wird ein Defaultkonstruktor erzeugt.) class C { static X x = Y y = static { x = { y = Basis() { y = Seite 8

9 Initialisierung und Vererbung Initialisierung bei Vererbung: 1. Klasse wird initialisiert 1.1. Basis-Klasse wird initialisiert Klassenvariablen mit Zuweisung werden belegt statischer Initialisier wird ausgeführt 1.2. abgeleitete Klasse wird initialisiert Klassenvariablen mit Zuweisung werden belegt statischer Initialisier wird ausgeführt 2. Objekt wird initialisiert 2.1. Basis-Anteil wird initialisiert Instanzvariablen (der Basisklasse) mit Zuweisung werden belegt Objekt-Initialisier (der Basisklasse) wird ausgeführt Default-Konstruktor (der Basisklasse) wird ausgeführt 2.2. abgeleiteter Anteil wird initialisiert Instanzvariablen mit Zuweisung werden belegt Objekt-Initialisier wird ausgeführt Ein Konstruktor wird ausgeführt Seite 9

10 Initialisierung und Vererbung class Basis { static X b1 = X b2 = static { b1 = class Ab extends Basis { static Y a1 = Y a2 = static { a1 = { b2 = { a2 = Basis() { b2 = Ab() { a2 = public static void main(string[] args) { Ab ab = new Ab(); Reihenfolge der Initialisierungen? Seite 10

11 Initialisierung und Vererbung class Basis { static X b1 = 1 X b2 =.5. static { b1 = 2 class Ab extends Basis { static Y a1 = 3 Y a2 = 8 static { a1 = 4 { b2 = 6 { a2 = 9 Basis() { b2 = 7 Ab() { a2 = 10 public static void main(string[] args) { Ab ab = new Ab(); Reihenfolge der Initialisierungen Seite 11

12 Initialisierung und Vererbung super : Einen anderen als den Defaultkonstruktor der Basisklasse aktivieren 1. Klasse wird initialisiert 2. Objekt wird initialisiert 2.1. Basis-Anteil wird initialisiert Instanzvariablen Objekt-Initialisier Spezieller Konstruktor (der zum super-aufruf passt) wird ausgeführt 2.2. abgeleiteter Anteil wird initialisiert Instanzvariablen Objekt-Initialisier Ein Konstruktor mit super wird ausgeführt public class Kuh { private String name; public Kuh() { name = "Berta"; public Kuh(String name) { this.name = name; public String tostring () { return "Kuh "+name; public class MilchKuh extends Kuh { public MilchKuh() { super("carla"); public MilchKuh(String name) { super(name); Kuh k1 = new Kuh(); Kuh k2 = new Kuh("Elfriede"); MilchKuh k3 = new MilchKuh(); MilchKuh k4 = new MilchKuh("Charlotte"); Wie heißen diese Kühe? Seite 12

13 Th. Letschert OOP 2 Vererbung und Typen: Klasse Typ Subklasse Subtyp Seite 13

14 Klasse ~ Typ Zu jeder Klasse gehört ein Typ class C {... C ist der Name eines Typs Typ Variablentyp C x = new C(); Parametertyp void f( C x ) {... Rückgabetyp C f (... ) {... Typen werden vom Compiler geprüft C x = muss zu C passen void f( C x ){... f( muss zu C passen ) C f (...) {... return muss zu C passen Virtuelle Maschine prüft Typen Zur Laufzeit kann das Programm wegen eines Typfehlers abgebrochen werden Seite 14 Kuh k = new Kuh(); MilchKuh mk = new MilchKuh(); k = mk; //OK mk = k; //Compiler-Fehler mk = (MilchKuh)k;//OK k = (Kuh)mk; //OK Beispiel: Typfehler vom Compiler entdeckt Kuh k = new Kuh(); MilchKuh mk = new MilchKuh(); mk = (MilchKuh)k; //Laufzeitfehler k = mk; //OK Beispiel: Typfehler von der JVM entdeckt Kuh k = new Kuh(); MilchKuh mk = new MilchKuh(); k = mk; //OK mk = (MilchKuh)k; //OK Beispiel: Kein statischer und kein dynamischer Typfehler

15 statischer Typ / dynamischer Typ Jeder Ausdruck hat einen statischen Typ Der statische Typ ergibt sich aus dem Programmtext Er wird vom Compiler bestimmt und bei seinen Typ-Prüfungen genutzt Statisch: alles was sich aus dem Text ergibt Dynamisch: alles was erst zur Laufzeit bekannt ist. name: Carla Ton muhen() {... void fressen(futter f) {... Referenzen zeigen auf ein Objekt mit einer Klasse ein Feld mit einem Feldtyp Dynamischer Typ einer Variablen mit Referenztyp / eines Referenz-Wertes Typ der Klasse / des Feldes auf den die Referenz zeigt k Kuh k = new MilchKuh(); Milch melken() {... k hat - (immer) den statischen Typ Kuh - (jetzt) den dynamischen Typ MilchKuh Offiziell sind Typen ein rein statisches Konzept: Ausdrücke im Programmtext haben Typen, Objekte nicht! Der Begriff dynamischer Typ (Typ einer Referenz ~ Typ dessen auf das sie zeigt), ist aber nützlich (vereinfacht komplizierte Sprechweisen) und allgemein üblich. Seite 15

16 Typanpassungen: formal, geprüft, mit semantischer Aktion Anpass. ohne Cast Typanpassung mit Konversionen: Wertanpassung (semantische Aktion) zur Laufzeit Beispiel: int => double / double => int Typanpassung mit Typprüfung zur Laufzeit Beispiel Downcast : Kuh => MilchKuh Typanpassung ohne Laufzeitaktion Beispiel Upcast : MilchKuh => Kuh Cast Cast int i = 5; double d = i + 0.2; i = (int)d; Zahldarstellung wird modifiziert: Bitmodifikation zur Laufzeit Kuh k = new Kuh(); MilchKuh mk = new MilchKuh(); mk = (MilchKuh)k; Referenz in k wird geprüft: Laufzeitaktion ohne Modifikation Anpass. ohne Cast Kuh k = new Kuh(); MilchKuh mk = new MilchKuh(); k = mk; Typanpassung / Was geschieht: - semantischer Aktion - Prüfung dynamischer Typen - Prüfung statischer Typen Konversion ohne Laufzeitaktion: nur Compileraktion Typanpassung / Wie wird es ausgelöst: - Konversion nur mit Cast - Typanpassung ohne Aufforderung Seite 16

17 Subtypen : Substitutionsprinzip Subtyp-Relation Subtypen können Typen vertreten S ist Subtyp von T ( S < T ) Substitutionsprinzip: jeder Ausdruck vom Typ S kann an jeder Stelle gebraucht werden, an der ein Ausdruck vom Typ T gefordert ist, wenn S < T. S ist kompatibel zu T. Subtypen in Java Primitive Typen: vom engeren zum weiteren Typ: byte < short < int < long < float < double char < int <.. Referenz-Typen S Subklasse von T => S < T S implementiert Interface I => S < I Interface I erweitert Interface J => I < J S ist Interface oder Klasse => S < Object S < T => S[] < T[] Philosophie der Typen Konversionen vom Subtyp zu Typ erfolgen ohne expliziten Cast. Java Terminologie: Widening primitive Conversion: vom engen zum weiten primitiven Typ int < long Widening Reference Conversion: von der Subtyp-Referenz zur Typ-Referenz MilchKuh < Kuh Kuh < Object Substitutionsprinzip: Grundlage der Typregeln in Java Seite 17

18 Subtypen : Substitutionsprinzip Subtyp-Relation auf Basis des Substitutionsprinzips S ist Subtyp von T ( S < T ) Objekte vom Typ S wissen und können all das, was Objekte vom Typ T wissen und können Philosophie der Typen MilchKühe Kühe Subtypen: Interpretation als Teilmengen int < long Ein int-wert kann ohne Probleme in einen long-wert konvertiert werden; umgekehrt geht Information verloren Subtypen: Interpretation als Konversionsmöglichkeit MilchKuh < Kuh Eine Milchkuh kann jederzeit eine Kuh vertreten: sie kann und weis alles was Kühe wissen und können; umgekehrt nicht: eine Milchkuh kann man z.b. melken, eine im Allgemeinen Kuh nicht. Milch Kuh! Kuh! Subtypen: Interpretation als Wechsel der Betrachtungsweise Seite 18

19 Typanpassungen in Java Widening Typanpassung Subtyp -> Typ immer erlaubt kein Cast notwendig Varianten Widening auf primitiven Typen Compiler fügt Anpassungscode ein Anpassung der Werte, i.d.r. ohne Informationsverlust Widening auf Referenzen keine Aktion, keine Veränderung der Werte Narrowing Typanpassung Typ -> Subyp mit Cast eventuell erzwingbar Varianten Narrowing auf primitiven Typen Compiler fügt Anpassungscode ein Anpassung der Werte, i.d.r. mit Informationsverlust Widening auf Referenzen Prüfung zur Laufzeit, keine Veränderung der Werte Seite 19 Narrowing mit Cast mit LaufzeitAktion Widening ohne Cast ohne LaufzeitAktion Widening ohne Cast mit LaufzeitAktion int double => int double + (double) int => double int double int i = (int) ( ); Typanpassungen mit Konversionen Kuh MilchKuh => Kuh Milchkuh Kuh elke = new MilchKuh("Elke"); Typanpassungen ohne Aktionen Milchkuh Kuh => MilchKuh Kuh MilchKuh mk = (MilchKuh)new Kuh(); Typanpassungen mit Typprüfung Narrowing mit Cast mit Typprüfung zur Laufzeit

20 Java: Statisch typisiert und typsicher Java ist statisch typisiert Der statische Typ ist entscheidend! OK Compiler statisch typisiert: Typprüfungen finden zur Übersetzungszeit statt. Typanpassungen werden zur Übersetzungszeit erzeugt Java-Compiler prüft Typen auf Kompatibilität fügt unaufgefordert Konversions-Operationen ein bei kompatiblen Typen die Anpassungsoperationen erfordern fügt auf Aufforderung (Cast) Prüfungen und / oder Anpassungsoperationen ein bei nicht kompatiblen Typen die aber (eventuell) angepasst werden können (Narrowing) Zur Laufzeit werden Typprüfungen / Konversionsoperationen ausgeführt Java ist typsicher Kuh elke = new MilchKuh("Elke"); Programmierer Kuh k =... MilchKuh mk = k; Ich will aber! Nicht OK Na gut, aber JVM prüft! Kuh k =... MilchKuh mk = (MilchKuh) k; JVM Compiler Compiler Das sehe ich mir mal genauer an! Programme mit Typfehlern werden nicht übersetzt oder stürzen ab! Seite 20 Cast: Verantwortung liegt beim Programmierer (Fehler führen zu Classcast- Exceptions)

21 Beispiel 1: Typen / Typfehler static void f1(milchkuh mk) {... static void f2(kuh k){... static Kuh g1() { return new MilchKuh(); static Kuh g2() { return new Kuh(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); f1(elke); f2(elke); Kuh k1 = g1(); MilchKuh mk1 = g1(); Kuh k2 = g2(); MilchKuh mk2 = g2(); Kuh k3 = (Kuh)g1(); MilchKuh mk3 = (MilchKuh)g2(); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Casts sind Überflüssig? 4. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? Seite 21

22 Beispiel 1: Typen / Typfehler static void f1(milchkuh mk) {... static void f2(kuh k){... static Kuh g1() { return new MilchKuh(); static Kuh g2() { return new Kuh(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); f1(elke); f2(elke); Kuh k1 = g1(); MilchKuh mk1 = g1(); Kuh k2 = g2(); MilchKuh mk2 = g2(); Kuh k3 = (Kuh)g1(); MilchKuh mk3 = (MilchKuh)g2(); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Casts sind Überflüssig? 4. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? Seite 22

23 Beispiel 1: Typen / Typfehler static void f1(milchkuh mk) {... static void f2(kuh k){... static Kuh g1() { return new MilchKuh(); static Kuh g2() { return new Kuh(); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Casts sind Überflüssig? public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); f1( (MilchKuh)elke ); f2(elke); Kuh k1 = g1(); MilchKuh mk1 = (MilchKuh)g1(); Kuh k2 = g2(); MilchKuh mk2 = (MilchKuh)g2(); Kuh k3 = (Kuh)g1(); MilchKuh mk3 = (MilchKuh)g2(); 4. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? Casts nur bei wirklichem Bedarf einsetzen! Beschwerden des Compiler sind so gut wie immer berechtigt! Kein Cast nur um ihn zum Seite 23 Schweigen zu bringen!

24 Beispiel 1: Typen / Typfehler static void f1(milchkuh mk) {... static void f2(kuh k){... static Kuh g1() { return new MilchKuh(); static Kuh g2() { return new Kuh(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); f1( (MilchKuh)elke ); f2(elke); Kuh k1 = g1(); MilchKuh mk1 = (MilchKuh)g1(); Kuh k2 = g2(); MilchKuh mk2 = (MilchKuh)g2(); Kuh k3 = /*(Kuh)*/ g1(); MilchKuh mk3 = (MilchKuh)g2(); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Casts sind Überflüssig? 4. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? Seite 24

25 Beispiel 1: Typen / Typfehler static void f1(milchkuh mk) {... static void f2(kuh k){... static Kuh g1() { return new MilchKuh(); static Kuh g2() { return new Kuh(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); f1( (MilchKuh)elke ); f2(elke); Kuh k1 = g1(); MilchKuh mk1 = (MilchKuh)g1(); Kuh k2 = g2(); MilchKuh mk2 = (MilchKuh)g2(); Kuh k3 = /*(Kuh)*/ g1(); MilchKuh mk3 = (MilchKuh)g2(); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Casts sind Überflüssig? 4. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? Seite 25

26 Beispiel 2: Typen / Typfehler static Milch prodzieremilch1(kuh kuh) { return kuh.melken(); Statische / dynamische Typfehler? static Milch prodzieremilch2(kuh kuh) { return ((MilchKuh)kuh).melken(); static Milch prodzieremilch3(milchkuh kuh) { return kuh.melken(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); Milch eimer1 = prodzieremilch1(elke); Milch eimer2 = prodzieremilch2(elke); Milch eimer3 = prodzieremilch3(elke); MilchKuh carla = new MilchKuh("Carla"); Milch eimer4 = prodzieremilch1(carla); Milch eimer5 = prodzieremilch2(carla); Milch eimer6 = prodzieremilch3(carla); Seite 26

27 Beispiel 2: Typen / Typfehler static Milch prodzieremilch1(kuh kuh) { return kuh.melken(); Statische / dynamische Typfehler? static Milch prodzieremilch2(kuh kuh) { return ((MilchKuh)kuh).melken(); static Milch prodzieremilch3(milchkuh kuh) { return kuh.melken(); public static void main(string[] args){ Kuh elke = new MilchKuh("Elke"); Milch eimer1 = prodzieremilch1(elke); Milch eimer2 = prodzieremilch2(elke); Milch eimer3 = prodzieremilch3(elke); MilchKuh carla = new MilchKuh("Carla"); Milch eimer4 = prodzieremilch1(carla); Milch eimer5 = prodzieremilch2(carla); Milch eimer6 = prodzieremilch3(carla); Seite 27

28 Beispiel 2: Typen / Typfehler static Milch prodzieremilch1(kuh kuh) { return null; //kuh.melken(); Statische / dynamische Typfehler? static Milch prodzieremilch2(kuh kuh) { return ((MilchKuh)kuh).melken(); static Milch prodzieremilch3(milchkuh kuh) { return kuh.melken(); public static void main(string[] args){ Jetzt Fehlerfrei! Kuh elke = new MilchKuh("Elke"); Milch eimer1 = prodzieremilch1(elke); Milch eimer2 = prodzieremilch2(elke); //Milch eimer3 = prodzieremilch3(elke); MilchKuh carla = new MilchKuh("Carla"); Milch eimer4 = prodzieremilch1(carla); Milch eimer5 = prodzieremilch2(carla); Milch eimer6 = prodzieremilch3(carla); Seite 28

29 Th. Letschert OOP 2 Subtyp-Eigenschaft und zusammengesetzte Typen Kollektionen Felder Seite 29

30 Subtypen und Kollektionen / Felder Die Subtyp-Eigenschaft überträgt sich nicht auf Kollektionen S < T > List<S> < List<T> Gilt für alle Kollektionstypen (List, ArrayList,... Set, HashSet,..., Queue,...) Milchkühe können Kühe vertreten aber Kollektionen von Milchkühen sind kein Ersatz für Kollektionen von Kühen Die Subtyp-Eigenschaft überträgt sich auf Felder S < T => S[ ] < T[] Milchkühe können Kühe vertreten und Felder von Milchkühen sind ein Ersatz für Felder von Kühen static void fuetteralle(list<kuh> l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ List<Kuh> stall1 = new ArrayList<Kuh>();... fuetteralle(stall1); //OK Unterschiedliche Subtyp-Philosophien bei Feldern und Kollektionen List<MilchKuh> stall2 = new ArrayList<MilchKuh>();... fuetteralle(stall2); FEHLER!!! static void fuetteralle(kuh[] l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ Kuh[] stall1 = new Kuh[10];... fuetteralle(stall1); //OK MilchKuh[] stall2 = new MilchKuh[10];... fuetteralle(stall2); //OK!!! Seite 30

31 Subtypen und Kollektionen / Felder : Beispiel 1, Kollektionen static void fuetteralle(list<kuh> l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ List<Kuh> stall1 = new ArrayList<Kuh>(); stall1.add(new Kuh()); stall1.add(new MilchKuh()); fuetteralle(stall1); List<Kuh> stall2 = new ArrayList<MilchKuh>(); stall2.add(new Kuh()); stall2.add(new MilchKuh()); fuetteralle(stall2); List<MilchKuh> stall3 = new ArrayList<MilchKuh>(); stall3.add(new Kuh()); stall3.add(new MilchKuh()); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? fuetteralle(stall3); Seite 31

32 Subtypen und Kollektionen / Felder : Beispiel 1, Kollektionen static void fuetteralle(list<kuh> l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ List<Kuh> stall1 = new ArrayList<Kuh>(); stall1.add(new Kuh()); stall1.add(new MilchKuh()); fuetteralle(stall1); List<Kuh> stall2 = new ArrayList<MilchKuh>(); stall2.add(new Kuh()); stall2.add(new MilchKuh()); fuetteralle(stall12); List<MilchKuh> stall3 = new ArrayList<MilchKuh>(); stall3.add(new Kuh()); stall3.add(new MilchKuh()); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? fuetteralle(stall3); Seite 32

33 Subtypen und Kollektionen / Felder : Beispiel 1, Kollektionen static void fuetteralle(list<kuh> l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ List<Kuh> stall1 = new ArrayList<Kuh>(); stall1.add(new Kuh()); stall1.add(new MilchKuh()); fuetteralle(stall1); List<Kuh> stall2 = new ArrayList<MilchKuh>(); stall2.add(new Kuh()); stall2.add(new MilchKuh()); fuetteralle(stall2); List<MilchKuh> stall3 = new ArrayList<MilchKuh>(); stall3.add( (MilchKuh) new Kuh()); stall3.add(new MilchKuh()); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? fuetteralle(stall3); Cast hier nicht möglich! kein Cast List<MilchKuh> => List<Kuh> Seite 33

34 Subtypen und Kollektionen / Felder : Beispiel 1, Kollektionen static void fuetteralle(list<kuh> l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ List<Kuh> stall1 = new ArrayList<Kuh>(); stall1.add(new Kuh()); stall1.add(new MilchKuh()); fuetteralle(stall1); //List<Kuh> stall2 = new ArrayList<MilchKuh>(); //stall2.add(new Kuh()); //stall2.add(new MilchKuh()); //fuetteralle(stall2); List<MilchKuh> stall3 = new ArrayList<MilchKuh>(); stall3.add( (MilchKuh) new Kuh()); stall3.add(new MilchKuh()); 1. Welche statischen Typfehler enthält das Programm? (d.h. Typfehler die den Compiler stören) 2. Bei welchen der statischen Typfehler kann der Compiler durch einen Cast beruhigt werden? 3. Welche Laufzeitfehler treten (eventuell) auf wenn: a) Zeilen mit Typfehlern, bei der Compiler nicht beruht werden kann, auskommentiert werden. b) Mit Casts der Compiler soweit wie möglich beruhigt wird? //fuetteralle(stall3); Seite 34

35 Subtypen und Kollektionen / Felder : Kollektionen Konsequenz / Verallgemeinerung? - Was kann als Parameter übergeben werden, wenn eine Kollektion von Elementen der Oberklasse formaler Parameter ist? Die Subtypeigenschaft überträgt sich nicht auf Kollektionen - Was kann als Parameter übergeben werden, wenn eine Kollektion von Elementen der Subklasse formaler Parameter ist? - Was kann in eine Kollektion von Elementen der Oberklasse eingefügt werden? - Was kann in eine Kollektion von Elementen der Subklasse eingefügt werden? - Welche Casts sind möglich: Kollektionen vom Subtyp in Kollektionen vom Obertyp? Kollektionen vom Obertyp in Kollektionen vom Subtyp? Seite 35

36 Subtypen und Kollektionen / Felder : Beispiel 2, Felder und Vererbung Formulieren Sie ein äquivalentes Beispiel mit Feldern statt Listen! Sind Unterschiede sind zu erwarten? Wenn ja: Welche? Seite 36

37 Subtypen und Kollektionen / Felder : Beispiel 2, Felder und Vererbung static void fuetteralle(kuh[] l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ Kuh[] stall1 = new Kuh[2]; stall1[0] = new Kuh(); stall1[1] = new MilchKuh(); Beispiel angepasst. Ein (statischer) Typfehler, Wo? fuetteralle(stall1); Kuh[] stall2 = new MilchKuh[2]; stall2[0] = new Kuh(); stall2[1] = new MilchKuh(); fuetteralle(stall2); MilchKuh[] stall3 = new MilchKuh[2]; stall3[0] = new Kuh(); stall3[1] = new MilchKuh(); fuetteralle(stall3); Seite 37

38 Subtypen und Kollektionen / Felder : Beispiel 2, Felder und Vererbung static void fuetteralle(kuh[] l){ for ( Kuh k : l ) k.frisst(new Futter()); Beispiel angepasst. Ein (statischer) Typfehler public static void main(string[] args){ Kuh[] stall1 = new Kuh[2]; stall1[0] = new Kuh(); stall1[1] = new MilchKuh(); fuetteralle(stall1); Kuh[] stall2 = new MilchKuh[2]; stall2[0] = new Kuh(); stall2[1] = new MilchKuh(); fuetteralle(stall2); MilchKuh[] stall3 = new MilchKuh[2]; stall3[0] = new Kuh(); stall3[1] = new MilchKuh(); fuetteralle(stall3); Seite 38

39 Subtypen und Kollektionen / Felder : Beispiel 2, Felder und Vererbung static void fuetteralle(kuh[] l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ Kuh[] stall1 = new Kuh[2]; stall1[0] = new Kuh(); stall1[1] = new MilchKuh(); Beispiel angepasst. Ein (statischer) Typfehler eliminiert Ein dynamischer Typfehler Wo? fuetteralle(stall1); Kuh[] stall2 = new MilchKuh[2]; stall2[0] = new Kuh(); stall2[1] = new MilchKuh(); fuetteralle(stall2); MilchKuh[] stall3 = new MilchKuh[2]; //stall3[0] = new Kuh(); stall3[1] = new MilchKuh(); fuetteralle(stall3); Seite 39

40 Subtypen und Kollektionen / Felder : Beispiel 2, Felder und Vererbung static void fuetteralle(kuh[] l){ for ( Kuh k : l ) k.frisst(new Futter()); public static void main(string[] args){ Kuh[] stall1 = new Kuh[2]; stall1[0] = new Kuh(); stall1[1] = new MilchKuh(); fuetteralle(stall1); Kuh[] stall2 = new MilchKuh[2]; stall2[0] = new Kuh(); stall2[1] = new MilchKuh(); fuetteralle(stall2); MilchKuh[] stall3 = new MilchKuh[2]; //stall3[0] = new Kuh(); stall3[1] = new MilchKuh(); fuetteralle(stall3); stall2 hat den statischen Typ Kuh[ ] Das Einfügen von Kühen ist also (statisch) erlaubt. Der Compiler akzeptiert die Zuweisung. stall2 hat den dynamischen Typ MilchKuh[ ] In ein Feld vom Subtyp (MilchKuh) darf nichts vom Obertyp (Kuh) eingefügt werden. (Böser Verstoß gegen das Subtyp-Prinzip!) Um das zu garantieren tragen Felder zur Laufzeit Typinfo mit sich, die beim Einfügen geprüft wird. Wir kommen später darauf zurück. Exception in thread "main" java.lang.arraystoreexception: kuehe.kuh Das Typsystem von Java (und anderer moderner, professioneller Programmiersprachen) ist wichtig für das Verständnis der Sprache und (leider, zum Glück?) nicht so trivial wie es auf den ersten Blick aussieht. Seite 40

41 Subtypen und Kollektionen / Felder : Felder und Vererbung Eigenschaften Feldern in Bezug auf Subtypen (Vererbung): - Was kann als Parameter übergeben werden, wenn ein Feld von Elementen der Oberklasse formaler Parameter ist? Die Subtypeigenschaft überträgt sich auf Felder - Was kann als Parameter übergeben werden, wenn ein Feld von Elementen der Subklasse formaler Parameter ist? - Was kann in ein Feld von Elementen der Oberklasse eingefügt werden? - Was kann in ein Feld von Elementen der Subklasse eingefügt werden? - Welche Casts sind möglich: Felder vom Subtyp in Felder vom Obertyp? Felder vom Obertyp in Felder vom Subtyp? Seite 41

42 Aufgabe Modellieren Sie in Java Kühe sind Rindvieh, man kann sie melken Stiere sind Rindvieh, sie können Toreros aufspießen Rindvieh kann Gras fressen Angenommen Sie haben eine Liste / ein Feld von Kühen, lässt sich, ohne Fehlermeldung des Compilers ohne Cast ohne Laufzeitfehler ein Stier in diese Liste / dieses Feld einfügen? Experimentieren Sie! Felder gelten wegen ihrer Eigenschaft der Weitergabe der Subtyp-Eigenschaft als schlecht / altmodisch. Was ist bei Kollektionen anders, warum ist das besser? Felder benötigen zur Laufzeit Informationen über ihren Typ, weil jede Einfüge-Operation geprüft werden muss. Warum? Ist das bei Kollektionen genauso? Seite 42

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert Kühe Was sind Kühe? 2 Kühe: Kennen wir alle! Zwei Kühe 3 Kühe in der Informatik / UML Kuh Kuh Horn: hornlinks Horn: hornrechts Konzept,

Mehr

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert Kühe Was sind Kühe? 2 Kühe Zwei Kühe 3 Kühe in der Informatik / UML Kuh Kuh Horn: hornlinks Horn: hornrechts Konzept, Typ, Klasse Beschreibt

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

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

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank... Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: hat Farbe Hubraum Tank kann man Gas geben Bremsen Hoch

Mehr

Typumwandlungen bei Referenztypen

Typumwandlungen bei Referenztypen Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei

Mehr

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe: Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Einführung in die Programmiersprache Java II

Einführung in die Programmiersprache Java II Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden

Mehr

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik Methoden und Klassen Silke Trißl Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode wird public

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode Methoden und Klassen Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode

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

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

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

Grundlagen der Informatik 0

Grundlagen der Informatik 0 Technische Universität Darmstadt 01.07.2013 Grundlagen der Informatik 0 Vorlesung 0 Java ist eine Programmiersprache Ilkay Baytekin Douglas Crockford http://media.smashingmagazine.com/wp-content/uploads/2012/04/doug-crockford-image.jpg

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Java I Vorlesung Vererbung und Sichtbarkeit

Java I Vorlesung Vererbung und Sichtbarkeit Java I Vorlesung 4 Vererbung und Sichtbarkeit 17.5.2004 Vererbung Überladen, Überschreiben, Verstecken, Verschatten Zugriffskontrolle Statische Members Wiederholung: OOP Programme bestehen aus Klassen.

Mehr

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe. Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe http://www.zitate-online.de/autor/goethe-johann-wolfgang-von/ http://www.weimar-lese.de/files_weimar_lese/johann_wolfgang_von_goethe_bearbeitet_von_andreas_werner.jpg

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

3. Vererbung II : Polymorphismus

3. Vererbung II : Polymorphismus Th. Letschert OOP 2 3. Vererbung II : Polymorphismus Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Ableitung: Übernehmen Überdecken Überladen Redefinieren Seite 2 Th. Letschert OOP 2 Übernehmen,

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

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders Typisierung Effiziente Programmierung Thomas Schnieders Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2018-04-26 Thomas Schnieders Typisierung 1

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

Programmieren 1 08 Objekte und Interfaces

Programmieren 1 08 Objekte und Interfaces Programmieren 1 08 Objekte und Interfaces Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Objektorientierung: Von Static zu Instance Klasse

Mehr

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Anonyme Klassen

Mehr

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Sichtbarkeitsbeziehungen und Geheimnisprinzip Sichtbarkeitsbeziehungen realisieren

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

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung Die Klasse Object. Die Klasse Object 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige

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

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]

Mehr

Th. Letschert OOP 2 6. Klassenentwurf II

Th. Letschert OOP 2 6. Klassenentwurf II Th. Letschert OOP 2 6. Klassenentwurf II Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Klassenentwurf II - Substitutionsprinzip Seite 2 Th. Letschert OOP 2 Liskovs Substitutionsprinzip A: syntaktische

Mehr

Algorithmen und Programmierung II

Algorithmen und Programmierung II Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung

Mehr

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Stack stack = new Stack(); stack.push (Würstchen); string s = (string) stack.pop(); Console.WriteLine (s); D3kjd3Di38lk323nnm Der Typ object object (System.Object) ist die Ausgangsbasisklasse für alle Typen. Jeder Typ kann per Upcast in ein object umgewandelt werden. Um zu zeigen, wie das nützlich sein kann,

Mehr

Typisierung. Prüfungen zur Übersetzungszeit Type Test und Type Cast Bedingte Zuweisung Nil Übergangsparameter Grade der Typisierung. 3.

Typisierung. Prüfungen zur Übersetzungszeit Type Test und Type Cast Bedingte Zuweisung Nil Übergangsparameter Grade der Typisierung. 3. Typisierung Prüfungen zur Übersetzungszeit Type Test und Type Cast Bedingte Zuweisung Nil Übergangsparameter Grade der Typisierung 2 Untypisierte Sprachen erfordern Methodensuche zur Laufzeit bei Misserfolg

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

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

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

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 5. Dezember 2011 1 Besprechung Blatt 6 Fragen 2 Vererbung Allgemein abstract Interfaces 3 Unified Modeling Language (UML) Ablaufdiagramme Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 7

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

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

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Exkurs: ANONYME KLASSEN Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Anonyme Klassen Eigenschaften 1 Häufigste Anwendung lokaler Klassen: anonyme Definition. Klasse erhält keinen eigenen

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Stefan Brass: OOP (Java), 15. Überladene Methoden 1/22 Objektorientierte Programmierung Kapitel 15: Überladene Methoden Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/

Mehr

Objektorientierte Programmierung. Kapitel 20: Wrapper-Klassen

Objektorientierte Programmierung. Kapitel 20: Wrapper-Klassen Stefan Brass: OOP (Java), 20. Wrapper-Klassen 1/27 Objektorientierte Programmierung Kapitel 20: Wrapper-Klassen Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/

Mehr

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen Schwerpunkte 10. Felder (Arrays) Teil 1 Java-Beispiele: Echo.java Primzahlen.java Monate.java Klassifikation von Typen in Programmiersprachen Array: einziger strukturierter Typ in Java Deklaration, Erzeugung

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Vererbung, Polymorphismus

Vererbung, Polymorphismus Vererbung, Polymorphismus INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Automobilbau Firma produziert Limousine Kunde möchte Kombi Wielösen? Möglichkeiten Neudesign

Mehr

Java I Vorlesung 6 Referenz-Datentypen

Java I Vorlesung 6 Referenz-Datentypen Java I Vorlesung 6 Referenz-Datentypen 7.6.2004 Referenzen this, super und null Typkonvertierung von Referenztypen Finale Methoden und Klassen Datentypen in Java In Java gibt es zwei Arten von Datentypen:

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

Programmieren in Java

Programmieren in Java Programmieren in Java Einführung in die objektorientierte Programmierung Teil 2 2 Übersicht der heutigen Inhalte Vererbung Abstrakte Klassen Erweitern von Klassen Überladen von Methoden Überschreiben von

Mehr

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2 HSR Rapperswil 2001 Markus Rigling Programmieren: Vererbung 1 Variante 2 Inhaltsverzeichnis: 1. Was ist Vererbung...3 2. Anwendung...3 3. Realisierung...3 4. Vorgehensweise zur Erstellung einer Kind-Klasse...3

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Objektorientierte Sprachen

Objektorientierte Sprachen Objektorientierte Sprachen Eine Sprache, die Objekte unterstützt, heißt objektbasiert Eine klassenbasierte Sprache unterstützt zusätzlich Klassen Eine objektorientierte Sprache unterstützt zusätzlich die

Mehr

Objektorientierte Programmierung. Kapitel 20: Wrapper-Klassen

Objektorientierte Programmierung. Kapitel 20: Wrapper-Klassen 20. Wrapper-Klassen 1/27 Objektorientierte Programmierung Kapitel 20: Wrapper-Klassen Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2013/14 http://www.informatik.uni-halle.de/

Mehr

Vererbung. Martin Wirsing. Ziele. Vererbung

Vererbung. Martin Wirsing. Ziele. Vererbung 2 Ziele Martin Wirsing en Begriff der einfachen verstehen und Redefinition von Oberklassenmethoden verstehen spolymorphie verstehen ie Klasse Object kennenlernen in Zusammenarbeit mit Michael Barth, Philipp

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

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

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 14: Generics Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Generische Klassen (Generics) Motivation Java Typ-Prüfung Warum also Generics? Generische

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 24 Einstieg in die Informatik mit Java Variablenarten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 24 1 Lokale Variablen 2 Lokale Variablen in Blocks 3 Lokale Variablen

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

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

3. Konzepte der objektorientierten Programmierung

3. Konzepte der objektorientierten Programmierung 3. Konzepte der objektorientierten Programmierung 3.1 Basiskonzepte 3.2 Generalisierung / Spezialisierung 3.3 Aggregation 3.4 Assoziation 3.5 Nachrichten 3.6 Polymorphismus 3. Konzepte der Objektorientierung

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

Tücken der dynamischen Bindung

Tücken der dynamischen Bindung Kapitel 3 Tücken der dynamischen Bindung 3.1 this-pointer Im Methodenaufruf o.m(x) ist o Bezugsobjekt wird als zusätzlicher Parameter übergeben: m(o,x) kann im Rumpf von m als this (bzw self) angesprochen

Mehr

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

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

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

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

Mikrorechentechnik II. Klassen in C++

Mikrorechentechnik II. Klassen in C++ Mikrorechentechnik II Klassen in C++ class class cfilter { float K; float T; float Ta; public: // Filterverstärkung // Filterzeitkonstante // Tastzeit Zugriffskontrolle: public, protected, private void

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Programmiertechnik Objektorientierung

Programmiertechnik Objektorientierung Programmiertechnik Objektorientierung Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was ist Objekt-Orientierung? Objekt-Orientierung (OO) ist nicht völlig scharf definiert, d.h. es gibt unterschiedliche

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Objektorientierte Programmierung III

Objektorientierte Programmierung III Objektorientierte Programmierung III OOP Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten. Vererbung: Erlaubt Code zwischen verwandten Typen

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Objektorientierung Was ist Objektorientierung Es einige Grundprinzipien, die (fast) allen Definitionen des Begriffs Objektorientierung

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 28 Einstieg in die Informatik mit Java Variablenarten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 28 1 Überblick: Variablenarten 2 Lokale Variablen 3 Lokale Variablen

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

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

Einführung in die Programmierung

Einführung in die Programmierung Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/

Mehr

Neuere Sprachelemente in Java

Neuere Sprachelemente in Java Softwaretechnik 1 Vorlesung Neuere Sprachelemente in Java Prof. Dr. Bernhard Rumpe Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/ Seite 2 Neuerungen seit Java 5.0 Java Spracherweiterungen

Mehr

Non-null Types in an Object-Oriented Language

Non-null Types in an Object-Oriented Language Non-null Types in an Object-Oriented Language Seminararbeit Prof. Dr. P. H. Schmitt Institut für Institut für theoretische Informatik Universität Karlsruhe vorgelegt von Saoussen Arfaoui Betreuer: Dipl.

Mehr

Vererbung und Polymorphie

Vererbung und Polymorphie Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter

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

Tag 7 Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java) Tag 7 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.

Mehr

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen Objektorientierte Programmierung mit Grundlagen 27.10.2008 1 Übersicht 27.10.2008 2 1 Übersicht Klassen und Objekte in - Klassen - Objekte - Klassen - Objekte 27.10.2008 3 Übersicht 27.10.2008 4 2 Einführung

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

Mehr

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik

Mehr

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Folienpaket 7 Themenschwerpunkte: Methoden in OOP 284 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Eine Klasse entwerfen Eine Klasse enthält folgende Information: Name der Klasse (ist auch der

Mehr

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)

Mehr

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor: 4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende

Mehr