Einführung in die Programmierung Vererbung

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Programmierung Ausführbare Klassen
Einführung in die Programmierung Zusammenfassung
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
der Universität Oldenburg
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Erweiterte Zuweisungskompatibilität
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Klassen und Objekte
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Einführung in die Programmierung Klassendefinition und Objekte
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
20:00.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Objektorientiertes Programmieren
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
EPROG Tutorium #5 Philipp Effenberger
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Vererbungskonzepte in Java
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Venusspiegel und Marsschild
OOP II.
Polymorphie Überladen
 Präsentation transkript:

Einführung in die Programmierung Vererbung Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Vererbung Uwe Lämmel www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de

Inhalt Vererbung Subtype Ersetzung Polymorphie

Das Beispiel DoME "Database of Multimedia Entertainment" speichert Informationen über CDs und DVDs CD: Titel, Künstler, Anzahl Titel, Spielzeit, hab-Ich, Kommentar DVD: Titel, Regisseur, Spielzeit, hab-Ich, Kommentar ermöglicht: Suche nach Informationen Ausgabe von Informationen / Listen database to store details of all CDs and videos I know

DoME-Objekte one object per CD or video; each object stores details for one item.

DoME-Klassen Obere Hälfte: Merkmale Unterer Teil: Methoden add the obvious methods (getters and setters); not complete here - just examples add a print method to print out the details

Klassendiagramm class diagram is simple (ArrayList not shown in BlueJ)

Das DoME-Objekt-Modell database object will hold two collections: one for CDs, one for videos

CD Quelltext public class CD { private String titel; private String kuenstler; private String kommentar; CD(String derTitel, String derKuenstler){ titel = derTitel; kuenstler = derKuenstler; kommentar = " "; } // Konstruktor void setKommentar(String kommentar) { ... } // setzeKommentar String getKommentar() { ... } void print(){ ... } ... } // CD extract from CD code - nothing unusual

DVD Quelltext public class DVD { private String titel; private String regisseur; private String kommentar; DVD(String derTitel, String derRegisseur { titel = derTitel; regisseur = derRegisseur; kommentar = " "; } // Konstruktor void setKommentar(String kommentar) { ... } String getKommentar( ) { ... } void print( ) { ... } ... } // DVD extract from video code (how does it differ from CD code?)

Datenbank-Quelltext class Database { private ArrayList<CD> cds; private ArrayList<DVD> dvds; ... public void list() { LineIO io = new LineIO(); for(CD cd : cds) { cd.print(); io.writeln(); // empty line between items } // for cd for(DVD dvd : dvds) { dvd.print(); } // for dvd } // list } // Database extract from database code.

Kritik doppelter Quelltext Klassen CD und DVD sind fast gleich Wartung schwierig – Doppelarbeit Gefahr von Fehlern in der Wartung Doppelter Code auch in der Datenbank-Klasse we note a lot of code duplication. this is one problem with this solution (there are others)

Vererbung solution: inheritance. make superclass with common attributes, make subclasses

Vererbung Definieren einer Oberklasse (superclass) : Medium Definieren von Unterklassen (subclass) für CD und DVD Oberklasse verwaltet gemeinsame Merkmale Unterklasse "erbt" (inherit) Merkmale der Oberklasse Unterklassen fügen eigene Merkmale hinzu

Vererbung in Java keine Änderung class Medium{ ... } Änderung class DVD extends Medium{ ... } class CD extends Medium { ... } syntax for inheritance: extends keyword

Oberklasse class Medium { private String titel; private int spielzeit; private boolean habIch; private String kommentar; // Konstruktoren und Methoden folgen … } // Medium we define common fields in superclass

Unterklassen class CD extends Medium { private String kuenstler; private int titelanzahl; // Konstruktoren und Methoden folgen ... } // CD we add subclass fields; inherit superclass fields (note extends keyword) subclass objects will have all fields. class DVD extends Medium { private String regisseur; // Konstruktoren und Methoden folgen ... } // DVD

Vererbung und Konstruktoren class Medium { private String titel; private int spielzeit; private boolean habIch; private String kommentar; /** * Initialisieren der Merkmale. */ public Medium(String derTitel, int zeit) { titel = derTitel; spielzeit = zeit; habIch = false; kommentar = ""; } // Konstruktor // Methoden … } // Medium how do we initialise the fields? superclass: nothing unusual.

Vererbung und Konstruktoren class CD extends Medium { private String kuenstler; private int titelanzahl; /** * Erzeugen einer CD */ public CD(String derTitel, String derKuenstler, int anzTitel, int zeit) { super(derTitel, zeit); kuenstler = derKuenstler; titelanzahl = anzTitel; } // Konstructor // methods omitted } // CD subclass: must call superclass constructor! Must take values for all fields that we want to initialise.

Konstruktor der Oberklasse Unterklassen-Konstruktor muss 'super' aufrufen falls nicht, fügt Compiler super() ein: funktioniert nur, falls Oberklasse Konstruktor ohne Parameter besitzt! super muss erste Anweisung im Konstruktor sein.

Weitere Medien it is now much easier to add new types. common attributes do not need to be rewritten.

mehr Hierarchie when adding new types, the hierarchy may be extended

neuer Datenbank-Code class Databank { private ArrayList<Medium> medien; /** * Erzeuge eine leere Datenbank */ public Databank() { medien = new ArrayList<Medium>(); } // Konstruktor * Hinzufügen eines Mediums public void erfasseMedium(Medium dasMedium) { medien.add(dasMedium); } // Database ... note: code duplication in class Database removed as well! only on field, one ArrayList creation, on add method

neuer Datenbank-Code /** * Ausgabe alle CDs und DVDs * auf die Konsole */ public void auflisten() { LineIO io = new LineIO(); for(Medium medium : medien) { medium.print(); io.writeln(); } //for } //auflisten ...and only one loop in list method.

Subklassen und Subtyp Klassen (Bauplan-) definieren Typen Subklassen definieren Subtypen. Objekte der Subklassen benutzbar, wann immer ein Objekt der Oberklasse erforderlich (substitution )

Subtypen und Parameter-Übergabe class Database { public void erfasseMedium(Medium medium) { ... } } //Database DVD dvd = new DVD(...); CD cd = new CD(...); database. erfasseMedium(dvd); database. erfasseMedium(cd); Subklassen-Objekte als Superklassen-Parameter

Klassendiagramm class diagram is simple (ArrayList not shown in BlueJ)

Objekt – Diagramm database object will hold two collections: one for CDs, one for videos

Polymorphe Variablen Objekt-Variablen in Java sind polymorph: können Objekte verschiedener Typen speichern: deklarierten Typ beliebiger Subtyp

Subtypen und Zuweisung Subklasse Objekt kann einer Superklassen-Variable zugewiesen werden Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle();

Casting (Typ-Angleichung) S.318 !! Subtyp kann Supertyp zugewiesen werden ABER: Supertyp kann NICHT Subtyp zugewiesen werden: Vechicle v; Car c = new Car(); v = c; // richtig; c = v; Compiler-Fehler! Casting = explizite Typumwandlung ermöglicht Zuweisung an Subtyp. c = (Car) v; Nur OK, falls v wirklich ein Auto! Verantwortung liegt beim Programmierer

Alle Klassen erben von Object Die Klasse Objekt Alle Klassen erben von Object

Klassendiagramm

Probleme mit der Ausgabe CD: Rites I (49 min)* Jan Garbarek Anzahl Titel: 16 Das Beste auf dem Saxophon   DVD: Hair (119 min) Milos Forman Das Musical! Was wir wollen: Wir bekommen: Titel: Rites I (49 min)* Das Beste auf dem Saxophon Titel: Hair (119 min) Das Musical!

Problem print-Methode der Klasse Medium listet nur gemeinsame Merkmale. Vererbung nur von oben nach unten Subklasse erbt Oberklassen-Merkmale. Oberklasse kennt nicht die Subklassen-Merkmale

Lösung: Überschreiben print in allen Klassen jede Unterklasse mit eigener print Version: print in Unterklasse überschreibt print der Oberklasse (Overriding) print print print

Überschreiben/Overriding Oberklasse und Unterklasse definieren Methoden mit derselben Signatur (Kopf) Jede Methode greift auf Merkmaler ihrer Klasse zu Methode in Oberklasse erfüllt statischen Typcheck Laufzeit: Unterklassen-Methode wird aktiviert (überschreibt Oberklassen-Version)

Methoden-Aufruf Weder Vererbung noch Polymorphie

Methoden-Aufruf Vererbung aber kein Überschreiben

Methoden-Aufruf Zugriff auf Variable in Variable gespeichertes Objekt finden Klasse des Objekts finden Klasse wird nach Methode durchsucht Falls NICHT gefunden: Oberklasse durchsuchen wiederholen bis Methode gefunden Überschreibende Methoden werden zuerst gefunden

Beispiel public class Person { private String name; public Person(String name) { this.name = name;} public String getName( ) { return name; } } //Person public class Deutscher extends Person { public Deutscher(String name) { super(name); } public String getGruss() { return "Guten Tag"; } } //Deutscher

UML-Diagramm Person name getNname() Franzose Bayer getGruss() setLieblingsbier() lieblingsbier Deutscher

Dynamisches Binden Person name getName() Deutscher Bayer getGruss() lieblingsbier getGruss() setLieblingsbier()

Zusammenfassung Vererbung erlaubt Definition von Klassen als Erweiterung von Klassen Vererbung vermeidet doppelten Code ermöglicht Code-Wiederverwendung vereinfacht den Quelltext vereinfacht Wartung und Erweiterung Variablen können auch Subtypen-Objekte speichern Subtypen können überall dort eingesetzt werden, wo Supertyp erwartet (Substitution).

Hierarchie in der Vererbung inheritance hierarchies are nothing unusual. we see them all the time. (a masters student is a students is a person...)

Ende