Klassenhierarchien, Vererbung

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Konzepte objektorientierter Systeme
Kritische Betrachtung
der Universität Oldenburg
Assoziationen Verbindungen zwischen Objekten einer Klasse
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Erweiterte Zuweisungskompatibilität
Objektorientierte Konzepte und Notation in UML
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
C++ Vererbung und Polymorphie
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
Einführung in die Programmierung Vererbung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
7. Vorlesung Vererbung Einfach- und Mehrfachvererbung Polymorphismus
Applets Java für’s Web.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Klassendefinitionen in Java
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
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.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Die Zählschleife int s = 0 for (int k=1; k
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Variablenkonzept Klassisch, in Java Basistyp
Übungen zum 2. Tag unter dem Motto Events
Client-Server-Architektur
Objektorientierte Programmierung
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Starten der Entwicklungsumgebung (IDE)
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Learning By Doing Übungen GPanel Quadratfenster mit pixelunabhängigen Windowkoordinaten (doubles) Zweckmässige Standardwerte (defaults) 01 x 0 1 y // WbzEx5.java.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Programmiervorkurs WS 2014/15 Methoden
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 8. Vorlesung WS 2002/2003.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
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.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Java-Kurs - 9. Übung Besprechung der Hausaufgabe
UML-Klassendiagramm: Klassen
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Abstrakte Klassen und das Interface-Konzept
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
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.
Java-Kurs - 8. Übung Klassen und Objekte: Vererbung
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Programmierung und Vererbung in Java
Objektorientierte Programmierung und Vererbung
OO-Programmierung & Vererbung
Vererbung in Java Von Jan und Eddi.
Polymorphie Überschreiben
 Präsentation transkript:

Klassenhierarchien, Vererbung Learning By Doing Klassenhierarchien, Vererbung Objekte werden in der Regel in Klassenhierarchien klassifiziert Beispiel: Europäische Säugetiere Oberklasse, Superklasse, Basisklasse Unterklasse, abgeleitete Klasse Einfachvererbung: nur eine Superklasse is-a-Relation: Ein Objekt der Unterklasse ist auch ein Objekt der Superklasse Grundidee: Erweiterung der Eigenschaften und des Verhaltens durch Vererbung "Alle guten und schlechten Eigenschaften werden vererbt" Manchmal auch: Veränderung des Verhaltens in der abgeleiteten Klasse (Überschreiben) Aber nie: Entfernen von Eigenschaften und Verhalten in der abgeleiteten Klasse s. Buch S. 153ff

Vererbung durch extends Learning By Doing Vererbung durch extends Wir vererben alle Eigenschaften des GPanels einer Klasse MoireIs MoireIs ist-ein GPanel // MoireIs.java import ch.aplu.util.*; class MoireIs extends GPanel { MoireIs() super(0, 10, 0, 10); int i, k; for (i = 0; i <= 10; i++) for (k = 0; k <= 10; k++) line(i, 0, k, 10); line(0, i, 10, k); } public static void main(String[] args) new MoireIs(); Konstruktor Superklasse line() ist Methode von MoireIs s. Buch S. 157

Komposition statt Vererbung Learning By Doing Komposition statt Vererbung Wir konstruieren die Klasse MoireHas unter Verwendung eines GPanels MoireHas hat-ein GPanel // MoireHas.java import ch.aplu.util.*; class MoireHas { GPanel panel = new GPanel(0, 10, 0, 10); MoireHas() int i, k; for (i = 0; i <= 10; i++) for (k = 0; k <= 10; k++) panel.line(i, 0, k, 10); panel.line(0, i, 10, k); } public static void main(String[] args) new MoireHas(); MoireHas verwendet das GPanel s. Buch S. 156

Klassendiagramme (UML, unified modeling language) Learning By Doing Klassendiagramme (UML, unified modeling language) zur Dokumentation zur besseren Übersicht und zum besseren Verständnis zur automatischen Codegeneration (Wunsch) Vererbung (is-a) Komposition (has-a) Pfeil zur Superklasse Raute zur umgebenden Klasse Typischer Klassenentwurf (Polygone) s. Buch S. 160ff

Zugriffsbezeichner (Package-Konzept) Learning By Doing Zugriffsbezeichner (Package-Konzept) Semantische Fehler (Fehler zur Laufzeit des Programms) sind oft auf die fehlerhafte Veränderung von Daten zurück-zuführen. Man muss die Daten vor dem unerlaubten Zugriff schützen (Datenkapselung). Schutzmechanismen: Verwendung von Konstanten (Schlüsselwort final) Verzicht auf globale Variablen (gibt es in Java nicht) Verwendung von lokalen Variablen statt Instanzvariablen Zugriffseinschränkungen von Instanzvariablen und Methoden durch Verwendung von Zugriffsbezeichner (access-specifiers) und durch einen Programmierstil "so privat wie möglich" Zusammenfassung in Klassenbibliotheken (packages) s. Buch S. 172ff

Zugriffsbezeichner für Klassen, Instanzvariablen und Methoden Learning By Doing Zugriffsbezeichner für Klassen, Instanzvariablen und Methoden Zugriffs-bezeichner Zugriff von Klassen im gleichen Package Zugriff von Klassen in anderen Packages Zugriff von Subklassen im gleichen Package Zugriff von Subklassen in anderen Packages public ja protected nein default private s. Buch S. 172

Musterbeispiel: package homeland Learning By Doing Musterbeispiel: package homeland Neue Methode shape() shape() überschrieben shape() überschrieben s. Buch S. 173

Learning By Doing // TurtleKid.java package homeland; Programme Learning By Doing // TurtleKid.java package homeland; import ch.aplu.turtle.*; public class TurtleKid extends Turtle { private String homeland = ""; // Mutator public void setHomeland(String h) homeland = h; } // Accessor public String getHomeland() return homeland; public void shape() label(homeland); for (int i = 0; i < 4; i++) forward(50); left(90); // TurtleBoy.java package homeland; public class TurtleBoy extends TurtleKid { public void shape() label(getHomeland()); for (int i = 0; i < 3; i++) forward(50); left(120); } extends TurtleKid extends Turtle // TurtleGirl.java package homeland; public class TurtleGirl extends TurtleKid { public void shape() label(getHomeland()); for (int i = 0; i < 18; i++) forward(10); left(20); } extends TurtleKid

Learning By Doing Alois, das TurtleKid Petra, das TurtleGirl WbzEx7 Learning By Doing // WbzEx7.java import homeland.*; public class WbzEx7 { public WbzEx7() TurtleKid alois = new TurtleKid(); alois.setHomeland("Emmenthal"); alois.back(50); alois.shape(); TurtleGirl petra = new TurtleGirl(); petra.setHomeland("Zürich"); petra.forward(100); petra.shape(); TurtleBoy marcel = new TurtleBoy(); marcel.setHomeland("Basel"); marcel.left(90).forward(100); marcel.shape(); } public static void main(String[] args) new WbzEx7(); Alois, das TurtleKid Petra, das TurtleGirl Marcel, der TurtleBoy

Objektorientierte Programmiersprache Learning By Doing Objektorientierte Programmiersprache Kapselung (Klassenbildung) Vererbung (is-a-Hierarchie) Polymorphie (Laufzeitbindung) Polymorphie (Vielgestaltigkeit) Klassisch (statische Bindung): bereits zur Compilationszeit ist eindeutig, welche Methode (Prozedur, Funktion, Subroutine) aufgerufen wird OOP (dynamische Bindung, virtuelle Methoden): bei überschriebenen Methoden wird erst zur Laufzeit ermittelt, welche der Methoden aufgerufen wird (in Java immer, d.h. alle Methoden sind virtuell) TurtleKid kid; ... Je nachdem, was in diesem Teil des Programms abläuft, kid.shape(); kann hier shape() von TurtleKid, TurtleBoy oder TurtleGirl aufgerufen werden. s. Buch S. 181ff

Learning By Doing So ... oder so ... // WbzEx8.java import homeland.*; public class WbzEx8 { public WbzEx8() TurtleKid kid; if (Math.random() < 0.45) kid = new TurtleGirl(); kid.setHomeland("Zürcher girl"); } else kid = new TurtleBoy(); kid.setHomeland("Basler boy"); kid.shape(); public static void main(String[] args) new WbzEx8(); So ... oder so ...

Musterbeispiel zur Polymorphie Learning By Doing Musterbeispiel zur Polymorphie class Voliere { Vector<Bird> cage = new Vector<Bird>(); public void create() {...} void whistleAll() for (int i = 0; i < cage.size(); i++) cage.elementAt(i).whistle(); } J2SE V1.4: keine Typvariablen ((Bird)cage.elementAt()).whistle() dafür (unschöner) Cast Vector cage = new Vector(); Generischer Datentyp Typvariable <Bird> Es pfeift der richtige Vogel s. Buch S. 192

Abstrakte Klasse Learning By Doing // Bird.java public class Bird { public void whistle() System.out.println( "Fehler: Vogelvorlage"); } Abstrakte Klasse abstract public class Bird { abstract public void whistle(); } Keine Instanzen erlaubt Garantieerklärung (Contract) für Unterklassen // Amsel.java public class Amsel extends Bird { public void whistle() System.out.println( "Amsel pfeift: uiuiii..."); } // Drossel.java public class Drossel extends Bird { public void whistle() System.out.println( "Drossel pfeift: zwawaaa..."); } // Fink.java public class Fink extends Bird { public void whistle() System.out.println( "Fink pfeift: zrzrrr..."); } // Star.java public class Star extends Bird { public void whistle() System.out.println( "Star pfeift: kiukuu..."); }

Interfaces Learning By Doing Klassengerüste (kein Code) // BirdIf.java public interface BirdIf { public void whistle(); } Garantieerklärung (Contract) für implementierende Klassen Ersatz für Mehrfachvererbung // AmselImp.java public class AmselImp implements BirdIf { public void whistle() System.out.println( "Amsel pfeift: uiuiii..."); } // DrosselImp.java public class DrosselImp implements BirdIf { public void whistle() System.out.println( "Drossel pfeift: zwawaaa..."); } // FinkImp.java public class FinkImp implements BirdIf { public void whistle() System.out.println( "Fink pfeift: zrzrrr..."); } // StarImp.java public class StarImp implements BirdIf { public void whistle() System.out.println( "Star pfeift: kiukuu..."); }