PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.

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)
Zusammenfassung der Vorwoche
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
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
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
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 bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
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.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Einführung in die Programmierung Anweisungen und Datentypen
Informatikunterricht mit Java
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
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.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
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 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
EPROG Tutorium #6 Philipp Effenberger
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.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
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
Abstrakte Klassen und das Interface-Konzept
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object

PKJ 2005/2 Stefan Dissmann Klasse Object public Object() protected Object clone() // Creates and returns a copy of this object. public Boolean equals(Object obj) // Indicates whether some other object is "equal to" this one. public Class getClass() // Returns the runtime class of an object. public int hashCode() // Returns a hash code value for the object. public String toString() // Returns a string representation of the object.

PKJ 2005/3 Stefan Dissmann Erinnerung Ziel war: Liste, in der beliebige Objekte abgelegt werden können Lösung mit Object klar: Elemente enthalten Referenzen auf Object Methoden der Liste arbeiten auf Object

PKJ 2005/4 Stefan Dissmann Allgemeine Elemente public class IntElement { private int wert; private IntElement nachfolger; public IntElement(int w) { wert = w; nachfolger = null; } public void verkette(IntElement n) { nachfolger = n; } public IntElement gibNachfolger() { return nachfolger; } public int gibWert() { return wert; } }

PKJ 2005/5 Stefan Dissmann Allgemeine Elemente public class IntElement { private int wert; private IntElement nachfolger; public IntElement(int w) { wert = w; nachfolger = null; } public void verkette(IntElement n) { nachfolger = n; } public IntElement gibNachfolger() { return nachfolger; } public int gibWert() { return wert; } }

PKJ 2005/6 Stefan Dissmann Allgemeine Elemente public class Element { private Object wert; private Element nachfolger; public Element(Object w) { wert = w; nachfolger = null; } public void verkette(Element n) { nachfolger = n; } public Element gibNachfolger() { return nachfolger; } public Object gibWert() { return wert; } }

PKJ 2005/7 Stefan Dissmann Allgemeine Liste public class Liste { private Element anfang, ende; public Liste() { anfang = ende = null; }; public Liste(Object w) { anfang = ende = new Element(w); } public Object gibErstes() { if (anfang != null) return anfang.gibWert(); else return null; } public boolean leer() { return anfang == null; } public void zeigeAlle() { Element lauf = anfang; while(lauf != null) { System.out.print(lauf.gibWert().toString() + " "); lauf = lauf.gibNachfolger(); } System.out.println(); }

PKJ 2005/8 Stefan Dissmann Allgemeine Liste Probleme bereiten: public int zähleWert(Object w) { … } public void sortiereEin(Object w) { … } public void lösche(Object w) { … }

PKJ 2005/9 Stefan Dissmann Allgemeine Liste Probleme bereiten: public int zähleWert(Object w) { … } public void sortiereEin(Object w) { … } public void lösche(Object w) { … } Diese Methoden benötigen einen Vergleich der abgelegten Objekte: Gleichheit bei zähleWert und lösche Größenvergleich bei sortiereEin

PKJ 2005/10 Stefan Dissmann Allgemeine Liste Probleme bereiten: public int zähleWert(Object w) { … } public void sortiereEin(Object w) { … } public void lösche(Object w) { … } Diese Methoden benötigen einen Vergleich der abgelegten Objekte: Gleichheit bei zähleWert und lösche Größenvergleich bei sortiereEin Klasse Object besitzt unbrauchbares equals und keinen Größenvergleich!

PKJ 2005/11 Stefan Dissmann Allgemeine Liste Lösung: Einführung einer Klasse Vergleichbar mit der Methode boolean groesser(Vergleichbar v)

PKJ 2005/12 Stefan Dissmann Allgemeine Liste Lösung: Einführung einer Klasse Vergleichbar mit der Methode boolean groesser(Vergleichbar v) und Ersetzen von Object in Liste und Element durch Vergleichbar

PKJ 2005/13 Stefan Dissmann Allgemeine Elemente public class Element { private Vergleichbar wert; private Element nachfolger; public Element(Vergleichbar w) { wert = w; nachfolger = null; } public void verkette(Element n) { nachfolger = n; } public Element gibNachfolger() { return nachfolger; } public Vergleichbar gibWert() { return wert; } }

PKJ 2005/14 Stefan Dissmann Allgemeine Liste public class Liste { private Element anfang, ende; public Liste() { anfang = ende = null; }; public Liste(Vergleichbar w){anfang=ende=new Element(w);} public Vergleichbar gibErstes() { if (anfang != null) return anfang.gibWert(); else return null; } public boolean leer() { return anfang == null; } public void zeigeAlle() { Element lauf = anfang; while(lauf != null) { System.out.print(lauf.gibWert().toString() + " "); lauf = lauf.gibNachfolger(); } System.out.println(); }

PKJ 2005/15 Stefan Dissmann Klassenhierarchie Vergleichbar ??? Object

PKJ 2005/16 Stefan Dissmann Klasse Vergleichbar public class Vergleichbar { public boolean groesser (Vergleichbar v) { ??? }

PKJ 2005/17 Stefan Dissmann Klasse Vergleichbar public class Vergleichbar { public boolean groesser (Vergleichbar v) { return true; } Unsinnig, muss von Unterklassen überschrieben werden!

PKJ 2005/18 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); }

PKJ 2005/19 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); } groesser ist jetzt abstrakte Methode = Signatur ohne Methodenrumpf

PKJ 2005/20 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); } groesser ist jetzt abstrakte Methode = Signatur ohne Methodenrumpf groesser kann nicht ausgeführt werden

PKJ 2005/21 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); } groesser ist jetzt abstrakte Methode = Signatur ohne Methodenrumpf groesser kann nicht ausgeführt werden Vergleichbar kann nicht sinnvoll erzeugt werden

PKJ 2005/22 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); } groesser ist jetzt abstrakte Methode = Signatur ohne Methodenrumpf groesser kann nicht ausgeführt werden Vergleichbar kann nicht sinnvoll erzeugt werden Vergleichbar ist abstrakte Klasse

PKJ 2005/23 Stefan Dissmann Klasse Vergleichbar abstract public class Vergleichbar { abstract public boolean groesser (Vergleichbar v); } groesser ist jetzt abstrakte Methode = Signatur ohne Methodenrumpf groesser kann nicht ausgeführt werden Vergleichbar kann nicht sinnvoll erzeugt werden Vergleichbar ist abstrakte Klasse Erzeugbare Unterklassen von Vergleichbar müssen groesser implementieren!

PKJ 2005/24 Stefan Dissmann Klassenhierarchie > Vergleichbar ??? Object

PKJ 2005/25 Stefan Dissmann Klasse VergleichbarMitEquals abstract public class VergleichbarMitEquals { abstract public boolean groesser (Vergleichbar v); public boolean equals (Object o) { return !groesser((Vergleichbar)o) && !((Vergleichbar)o).groesser(this); } Nur wenn totale Ordnung vorliegt!

PKJ 2005/26 Stefan Dissmann Abstrakte Methoden Zusammenfassung: Abstrakte Methoden definieren nur die Signatur einer Methode besitzen keinen Methodenrumpf sind nicht ausführbar erzwingen eine abstrakte Klasse müssen in Unterklassen implementiert werden können zum Formulieren von Algorithmen eingesetzt werden

PKJ 2005/27 Stefan Dissmann Abstrakte Klassen Zusammenfassung: Abstrakte Klassen werden durch nur eine abstrakte Methode erzwungen können keine Objekte erzeugen müssen von (konkreten) Unterklassen implementiert werden müssen nicht unbedingt abstrakte Methoden besitzen bekanntes Beispiel: Klasse Konto

PKJ 2005/28 Stefan Dissmann Abstrakte Klassen Sonderfall: Klassen, die nur abstrakte Methoden enthalten dienen nur der Definition einer Benutzungsschnittstelle enthalten keine Realisierung Beispiel: class Vergleichbar In JAVA eigenes Konstrukt: interface

PKJ 2005/29 Stefan Dissmann Interface Vergleichbar public interface Vergleichbar { boolean groesser (Vergleichbar v); }

PKJ 2005/30 Stefan Dissmann Interface Vergleichbar public interface Vergleichbar { boolean groesser (Vergleichbar v); } Schlüsselwort interface

PKJ 2005/31 Stefan Dissmann Interface Vergleichbar public interface Vergleichbar { boolean groesser (Vergleichbar v); } Schlüsselwort interface kein abstract angegeben, trotzdem abstrakt keine Zugriffsrechte angegeben, trotzdem öffentlich

PKJ 2005/32 Stefan Dissmann Interface Vergleichbar public interface Vergleichbar { boolean groesser(Vergleichbar v); } Interface kann wie eine Klasse zur Typisierung von Referenzen eingesetzt werden kann geerbt werden von anderen Interfaces kann durch Klassen implementiert werden

PKJ 2005/33 Stefan Dissmann Interface - Vererbung public interface Vergleichbar { boolean groesser(Vergleichbar v); } public interface BesserVergleichbar extends Vergleichbar { boolean kleiner(Vergleichbar v); }

PKJ 2005/34 Stefan Dissmann Interface - Vererbung public interface Vergleichbar { boolean groesser(Vergleichbar v); } public interface BesserVergleichbar extends Vergleichbar { boolean kleiner(Vergleichbar v); } Schlüsselwort extends wie bei Klassen

PKJ 2005/35 Stefan Dissmann Interface-hierarchie > BesserVergleichbar > Vergleichbar

PKJ 2005/36 Stefan Dissmann Interface - Implementierung public interface Vergleichbar { boolean groesser(Vergleichbar v); } public class Element implements Vergleichbar { … public boolean groesser(Vergleichbar v) { … } … }

PKJ 2005/37 Stefan Dissmann Interface - Implementierung public interface Vergleichbar { boolean groesser(Vergleichbar v); } public class Element implements Vergleichbar { … public boolean groesser(Vergleichbar v) { … } … } Schlüsselwort implements erzwingt Implementierung von groesser oder abstrakte Klasse

PKJ 2005/38 Stefan Dissmann Klassen-Interface-hierarchie Element Object > Vergleichbar

PKJ 2005/39 Stefan Dissmann Interfaces Anmerkungen: Klasse kann von Klasse erben und zugleich Interface implementieren Bsp.: class Studierende extends Element implements BesserVergleichbar … Klasse besitzt höchstens eine Oberklasse, aber Klasse kann mehrere Interfaces implementieren und Interface kann mehrere Interfaces erben

PKJ 2005/40 Stefan Dissmann Klassen-Interface-hierarchie > A > W K > V > X > Y > Z

PKJ 2005/41 Stefan Dissmann > A > W K > V > X > Y > Z Klassen-Interface-hierarchie Vereinbarungen: abstract public class A implements V, W {… public interface Z extends Y {… public class K extends A implements X,Z {…

PKJ 2005/42 Stefan Dissmann > A > W K > V > X > Y > Z Klassen-Interface-hierarchie Mögliche Zuweisungen: V ref1 = new K(); W ref2 = new K(); X ref3 = new K(); Y ref4 = new K(); Z ref5 = new K(); A ref6 = new K(); K ref7 = new K(); Object ref8 = new K();

PKJ 2005/43 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt - und nicht bei Klassen?

PKJ 2005/44 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt -und nicht bei Klassen? Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen Object AB C

PKJ 2005/45 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt -und nicht bei Klassen? Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen Object AB C toString() toString() ??

PKJ 2005/46 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt -und nicht bei Klassen? Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen JAVA verhindert das Auftreten des Problems

PKJ 2005/47 Stefan Dissmann Klasse - Interface Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt -und nicht bei Klassen? Klasse vererbt implementierte Methoden zu gleicher Signatur eventuell mehrere Implementierungen JAVA verhindert das Auftreten des Problems Interface vererbt nur Methodenköpfe (Signaturen) gleiche Signaturen sind textuell gleich gleiche Signaturen fallen beim Erben/Implementieren zusammen das Problem tritt nicht auf!

PKJ 2005/48 Stefan Dissmann Klassen Anmerkung 1: Geerbt-werden kann Klasse nicht verhindern, aber die Redefinition ihrer Methoden in Unterklassen: public class Liste { final public void fuegeAn(…) { … } Schlüsselwort final verhindert erneute Definition in Unterklassen

PKJ 2005/49 Stefan Dissmann Klassen Anmerkung 2: Objekte können explizit auf Klassenzugehörigkeit überprüft werden: Element el = new Element(); dann ergeben folgende Ausdrücke true : el instanceof Object el instanceof Element el instanceof Vergleichbar

PKJ 2005/50 Stefan Dissmann Klassen Anmerkung 2: Objekte können explizit auf Klassenzugehörigkeit überprüft werden: Element el = new Element(); dann ergeben folgende Ausdrücke true : el instanceof Object el instanceof Element el instanceof Vergleichbar Operator

PKJ 2005/51 Stefan Dissmann Klassen Anmerkung 2: Objekte können explizit auf Klassenzugehörigkeit überprüft werden: Element el = new Element(); dann ergeben folgende Ausdrücke true : el instanceof Object el instanceof Element el instanceof Vergleichbar Anwendung aber häufig schlechter Stil ?