Abstrakte Klassen HS Merseburg (FH) WS 06/07.

Slides:



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

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Referenzen und Zeichenketten
FH-Hof Java Packages Richard Göbel. FH-Hof Das Modulkonzept für Java Packages dienen zur Strukturierung größerer Java- Programme Ein Package kann: eigene.
Java: Grundlagen der Objektorientierung
Vererbung.
Abstrakte Klassen.
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung X1 Sitzung X1: Packages & Wiederholung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Einführung in die OOP in Java
Einführung in die Programmierung mit Java
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
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 Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Packages Vortrag : Cornelia Hardt 23. November 1999.
Abstrakte Klassen DVG
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
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
Klassen 02 - Klassen.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
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.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
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
Objektorientierte Programmierung
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Programmiervorkurs WS 2014/15 Instanzmethoden
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Abstrakte Klassen und das Interface-Konzept
Objektorientierte Programmierung (OOP)
Objektorientierte Programmierung mit JAVA. © Klasse Wie in C++ ist die Klasse das primäre Mittel um ein Entity abzubilden Die Eigenschaften.
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.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Einführung in die Programmierung mit Java
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Implementieren von Klassen
 Präsentation transkript:

Abstrakte Klassen HS Merseburg (FH) WS 06/07

Grundlage: eine Basisklasse kann keine Instanzen erzeugen Ausgangspunkt war Vererbung – Übernahme von Attributen und Methoden in abgeleitete Klassen public class GeoFigur { protected float Länge; protected float Breite; protected float Fläche; static protected int InstCounter; // Konstruktoren // Methoden zum Setzen und Lesen public float setl(float x) {…} HS Merseburg (FH) WS 06/07

diese Attribute und Methoden sind allgemeingültig, andere Methoden machen nur für konkrete Instanz Sinn, wie beispielsweise: public abstract float berechneFlaeche(); public abstract float berechneVolumen(); diese Methoden erhalten den Modifier abstract: abstrakte Methoden können nicht vom Typ static, private oder final sein sie enthalten keine Methodendefinition beinhaltet eine Klasse eine abstrakte Methode, dann ist die Klasse selbst abstrakt HS Merseburg (FH) WS 06/07

Abstrakte Klassen sind durch das Schlüsselwort „abstract“ gekennzeichnet und können nicht als final deklariert werden. Sie können auch nicht instanziert werden.   Soll eine abstrakte Klasse verwendet werden (zum Beispiel die Ableitungen Dreieck, Rechteck, Kreis der Klasse GeoFigur) muss die abstrakte Methode implementiert werden. Allen abgeleiteteten Klassen sind aber die abstrakten Methoden gemeinsam (gleiche Parameter und Rückgabewerte). HS Merseburg (FH) WS 06/07

Interfaces HS Merseburg (FH) WS 06/07

Beispiel Leichtathlet Basisklasse: Leichtathlet In manchen Fällen ist es sinnvoll, eine Klasse mit zwei oder mehr Basisklassen zu erzeugen  Mehrfachvererbung Beispiel Leichtathlet   Basisklasse: Leichtathlet Abgeleitet: Weitspringer – Hochspringer – 100m Läufer – Hürdenläufer ...   Neue Klasse: Zehnkämpfer Erbt von bestimmten Klassen, die von Leichtathlet abgeleitet sind  Übernimmt Methoden und Attribute von 10 Klassen Problem: sind in den Basisklassen Variablen oder Methoden mit gleichem Namen aber unterschiedlicher Ausprägung vorhanden  Zuordnung schwierig Beispiel: Weitspringer und Hochspringer könnten springe() enthalten HS Merseburg (FH) WS 06/07

Zehnkämpfer ist weder Weitspringer noch Hochspringer Alternativen: es könnte eine Methode fest angesprochen werden  aber Vorteile der Mehrfachvererbung gehen verloren bei jedem Aufruf die Methode explizit angeben z.B. Weitspringer.springe()  auf dynamische Zuordnung von M. wird verzichtet Mehrfachvererbung wird aber nur in wenigen Fällen wirklich nutzbringend eingesetzt: Zehnkämpfer ist weder Weitspringer noch Hochspringer Interfaces Mit Schnittstellen überwindet Java die Einschränkungen der Einfachvererbung ohne die Nachteile der MFV in Kauf nehmen zu müssen IF definieren beliebige Anz. von Methoden und Variablen und damit gleichzeitig eigenen Referenztyp. HS Merseburg (FH) WS 06/07

Eine Schnittstelle kann andere Schnittstellen erweitern. Um eine Schnittstelle S zu implementieren muß eine Klasse C alle in der Schnittstelle enthaltenen Methoden konkret realisieren  Verpflichtung Eine Schnittstelle kann andere Schnittstellen erweitern.   Allgemeine Form: [public] [abstract] interface InterfaceName [extends BasisInterface] { [public] [static] [final] Konstante1 = Wert1; ... [public] [abstract] Methode1(Argumentliste); } Jede Variable im Interface gilt automatisch als static und final  es handelt sich um eine Konstante - die zu initialisieren ist !!!! HS Merseburg (FH) WS 06/07

public interface Kalorien { public double lesenKalorien(); } Jede Klasse, die eine Methode lesenKalorien() enthält, kann das Interface implementieren: public class SchokoKeks extends Keks implements Kalorien {   private double kal;   public double lesenKalorien() { return kal; // .. weitere Methoden von SchokoKeks HS Merseburg (FH) WS 06/07

Kalorien SKeks = new SchokoKeks(); Andere Klassen können Referenzen auf Objekte der Klasse Interface erzeugen und diesen Objekte der Klasse SchokoKeks zuweisen: public class A { Kalorien SKeks = new SchokoKeks(); System.out.println(Skeks.lesenKalorien()); ... } HS Merseburg (FH) WS 06/07

Nutzen von Interfaces HS Merseburg (FH) WS 06/07

public class Pausenbrot extends Brot implements Kalorien { ... Wenn andere Klassen mit anderer Vererbungshierarchie ebenfalls das Interface imlementieren ... public class Pausenbrot extends Brot implements Kalorien {   ... public double lesenKalorien() { ... implementieren } HS Merseburg (FH) WS 06/07

Kalorien SKeks = new SchokoKeks(); Kalorien PBrot = new Pausenbrot(); Pausenbrot und Schokokeks stammen von unterschiedlichen Vererbungshierarchien, implementieren aber die gleiche Schnittstelle. Klasse A kann daher über die Schnittstelle Kalorien die Methode lesenKalorien() aller betreffender Klassen aufrufen:   public class A { Kalorien SKeks = new SchokoKeks(); Kalorien PBrot = new Pausenbrot(); System.out.println(Skeks.lesenKalorien()); System.out.println(PBrot.lesenKalorien()); ... } HS Merseburg (FH) WS 06/07

Packages HS Merseburg (FH) WS 06/07

Bisher war jede Klasse eine eigene Datei  .class  Ziel der Packages: Gliederung der Projektklassen und der Systembibliotheken Pakete enthalten inhaltlich zusammengehörende Klassen, Schnittstellen und Unterpakete. Alle Klassen gehören implizit zu einem Package, das unbenannt ist. Paketdeklaration: package ein.paket.name; class KlassenName {...} Der Paketname ist implizit jedem im Paket enthaltenen Typnamen vorangestellt (vor allen Klassen und Schnittstellen-definitionen der Klasse). Der vollständige Name für ein Package besteht aus Komponenten, die durch Punkte getrennt sind . HS Merseburg (FH) WS 06/07

Grundsätzlich beliebig, Packages korrespondieren mit der Verzeichnisstruktur (abhängig von Java-Implementation) Jede Komponente eines P-Namens kann einem bestimmten Verzeichnis des Rechners zugeordnet werden Klassen und Schnittstellen werden als einzelne Dateien im Verzeichnis gespeichert   Namenswahl: Grundsätzlich beliebig, systemweite Packages  Namenskonvention von Sun  gewährleistet weltweit eindeutige Namen für P. Internet Domain Namen + interner PackageName HS Merseburg (FH) WS 06/07

Beispiele: zugehörige Dateinamen: Package Klasse Methode java.lang.Thread.start() ../java/lang/Thread.class   Package Klassse Methode com.ms.awt.image.getsize() ../com/ms/awt/image.class ../lib/classes.zip Package Klasse Methode de.hs-merseburg.in.pax.java.GeoFig.setB() HS Merseburg (FH) WS 06/07

über den direkten Namen einschließlich vorangestelltem Paketbezeichner Zugriff: über den direkten Namen einschließlich vorangestelltem Paketbezeichner Beispiel:  Klasse A in Package x.y.z  x.y.z.A Eindeutige Referenz möglich: public class B { int f() { x.y.z.A einA; x.y.z.A nochEinA; ... einA = new x.y.z.A(); }} HS Merseburg (FH) WS 06/07

Problem: unübersichtlicher Quelltext  import import x.y.z.A; import x.y.z.B; public class D { int g() { A a = new A(); B b = new B(); x.y.z.C c = new x.y.z.C(); // nicht imp. Name ... }} Import von Teilen oder des ganzen Paketes import x.y.z.A; import x.y.z:*; Importiert nur die Klassen einer Ebene  Unterpakete müssen selbst importiert werden. HS Merseburg (FH) WS 06/07