Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp
|
|
- Mona Weiß
- vor 7 Jahren
- Abrufe
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
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,
MehrSind 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
MehrEinstieg 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
MehrVererbung. 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
MehrVererbung, 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
MehrEinstieg 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
MehrSilke 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
MehrTypumwandlungen 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
MehrSchlussendlich 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 -
MehrKapitel 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
MehrEinfü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
MehrMethoden 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
MehrRepetitorium 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
MehrSilke 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
MehrEinstieg 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
MehrProgrammieren 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
MehrObjektorientierung (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
MehrGrundlagen 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
MehrKapitel 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
MehrJava 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.
MehrWas 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
MehrAlgorithmen 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
Mehr3. 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,
MehrJava 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
MehrEinleitung 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
MehrGrundzü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
MehrProgrammieren 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
MehrProf. 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
MehrTh. 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
MehrProgrammieren 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
Mehr4. 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
MehrInstitut 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
MehrBeispiele 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]
MehrTh. 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
MehrAlgorithmen 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
MehrStack 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,
MehrTypisierung. 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
MehrJava 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
Mehr12 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,
Mehr1 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,
Mehr3 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
MehrAlgorithmen 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
MehrObjektorientierte 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
MehrObjektorientierte 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
MehrExkurs: 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
MehrJava: 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
MehrObjektorientierte 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/
MehrObjektorientierte 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/
MehrSchwerpunkte. 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
MehrKapitel 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
MehrVererbung, 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
MehrJava 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:
MehrInformatik 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.
MehrProgrammieren 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
MehrC++ - 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.
MehrHSR 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
MehrKapitel 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
MehrObjektorientierte 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
MehrObjektorientierte 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/
MehrVererbung. 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
MehrMethoden 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)
MehrObjektorientierte 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/
MehrJavakurs 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
MehrEinstieg 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
MehrImplementieren 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
MehrProgrammieren 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
Mehr3. 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
MehrNeben 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
MehrTü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
Mehr2.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
MehrProbeklausur: 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,
MehrJavakurs 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
MehrTag 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
Mehr7. 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
MehrMikrorechentechnik 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
MehrWeitere 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
MehrEinstieg 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
MehrProgrammiertechnik 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
MehrObjektorientierte 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/
MehrObjektorientierte 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
MehrProf. 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
Mehr14 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
MehrEinstieg 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
Mehr14 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.
MehrProgrammieren 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
MehrEinfü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
MehrEINFÜ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/
MehrNeuere 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
MehrNon-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.
MehrVererbung 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
MehrKapitel 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
MehrTag 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
Mehr3. 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.
MehrObjektorientierte 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
Mehr1 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
MehrEinfü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
MehrOOP 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
MehrFolienpaket 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
MehrTU 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)
Mehr4. 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