PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die...
-
Upload
faramund-bodmer -
Category
Documents
-
view
109 -
download
0
Transcript of PKJ 2005/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die...
PKJ 2005/1Stefan Dissmann
Abstrakte Methode
Zusammenfassung:
Abstrakte Methode• definiert nur die Signatur einer Methode• besitzt keinen Methodenrumpf• ist nicht ausführbar• erzwingt eine abstrakte Klasse• muss in Unterklassen implementiert werden• kann zum Formulieren von Algorithmen eingesetzt
werden
• Schlüsselwort: abstract
PKJ 2005/2Stefan Dissmann
Abstrakte Klasse
Zusammenfassung:
Abstrakte Klasse• wird durch nur eine abstrakte Methode erzwungen• kann keine Objekte erzeugen• muss von (konkreten) Unterklassen implementiert
werden
• muss nicht unbedingt abstrakte Methoden besitzen
• Schlüsselwort: abstract
PKJ 2005/3Stefan Dissmann
Interface
Sonderfall:
Interface ähnelt einer Klasse, • die nur abstrakte Methoden enthält• dient nur der Definition einer Benutzungsschnittstelle• enthält keine Realisierung
• Schlüsselwort: interface
PKJ 2005/4Stefan Dissmann
Interface
public interface Vergleichbar {
boolean groesser(Vergleichbar v);
}
Interface
• kann zur Typisierung von Referenzen eingesetzt werden:Vergleichbar ref;
• kann geerbt werden von anderen Interfaces:interface X extends Vergleichbar …
• kann durch Klassen implementiert werden:class K implements Vergleichbar …
PKJ 2005/5Stefan Dissmann
Interface
Anmerkungen:
• Klasse kann Klasse erben undzugleich Interface implementierenBsp.: class K extends L implements I, J, K …
• Klasse besitzt höchstens eine Oberklasse, aber• Klasse kann mehrere Interfaces implementieren und• Interface kann mehrere Interfaces erben
PKJ 2005/6Stefan Dissmann
Klassen-Interface-hierarchie
<<abstract>>
A
<<interface>>
W
K
<<interface>>
V
<<interface>>
X
<<interface>>
Y
<<interface>>
Z
Object
PKJ 2005/7Stefan Dissmann
Klasse - Interface
Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt
- und nicht bei Klassen?
PKJ 2005/8Stefan 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
A B
C
PKJ 2005/9Stefan 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
A B
C
toString()
toString()toString()
toString()??
PKJ 2005/10Stefan 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/11Stefan 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/12Stefan Dissmann
Interfaces und abstrakte Klassen
Was soll der ganze Unfug? Klassen abstrakte Klassen Interfaces
erben und vererben
implementieren
Kompatibilität von Referenzen
PKJ 2005/13Stefan Dissmann
Design by Contract
Idee:
Klasse bietet anderen Klassen Funktionalität/Leistung an
durch Methoden
PKJ 2005/14Stefan Dissmann
Design by Contract
Idee:
Klasse bietet anderen Klassen Funktionalität/Leistung an
durch Methoden
Klasse erwartet Funktionalität/Leistung von anderen Klassen
in Form von Methoden
PKJ 2005/15Stefan Dissmann
Design by Contract
Idee:
Klasse bietet anderen Klassen Funktionalität/Leistung andurch Methoden
Klasse erwartet Funktionalität/Leistung von anderen Klassen
in Form von Methoden
Abstimmung erfolgt durch Verhandeln!
PKJ 2005/16Stefan Dissmann
Design by Contract
Idee:
Abstimmung erfolgt durch Verhandeln!
geht nur mit beiden Partnern einzelner Partner formuliert Anforderungen Interface ist Anforderungsbeschreibung
PKJ 2005/17Stefan Dissmann
PKJ 2005/18Stefan 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/19Stefan Dissmann
Klassen
Anmerkung 1:
final kann auch benutzt werden, um Konstante zu definieren!
public class Liste {
final private int maxLaenge = 50;
final public void fuegeAn(…) { … }
Schlüsselwort final verhindert eine erneute Zuweisung an Attribut.
PKJ 2005/20Stefan 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 (falls Element Vergleichbar implementiert)
PKJ 2005/21Stefan 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 (falls Element Vergleichbar implementiert)
Operator
PKJ 2005/22Stefan 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 (falls Element Vergleichbar implementiert)Anwendung aber häufig schlechter Stil
?
PKJ 2005/23Stefan Dissmann
Klassen
Statische Methoden
• bekannt (und genutzt) seit der ersten Vorlesung:
public static void main(String[] args) { … }
PKJ 2005/24Stefan Dissmann
Klassen
Statische Methoden
• bekannt (und genutzt) seit der ersten Vorlesung:
public static void main(String[] args) { … }
PKJ 2005/25Stefan Dissmann
Klassen
Statische Methoden
• bekannt (und genutzt) seit der ersten Vorlesung:
public static void main(String[] args) { … }
• Konsequenz: main kann ausgeführt werden,ohne dass ein Objekt der Klasse erzeugt werden
muss!
PKJ 2005/26Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
PKJ 2005/27Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
r = new K();m() …
PKJ 2005/28Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
r
m() …
PKJ 2005/29Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
r
m() …
möglich ist:r.m();
PKJ 2005/30Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
r
m() …
möglich ist:r.m();möglich ist auch:
K.s();
PKJ 2005/31Stefan Dissmann
Statische methoden
Kpublic void m() …
public static void
s() …
r
m() …
möglich ist:r.m();und auch:r.s();
möglich ist auch:K.s();
PKJ 2005/32Stefan Dissmann
Statische Methoden
Zusammenfassung:
Statische Methoden• können über Referenzen aufgerufen werden• können über den Klassennamen aufgerufen werden
benötigen also kein Objekt zur Ausführung können daher nicht auf Eigenschaften eines Objekts
zugreifen,können also keine normalen Methoden oder
Attribute nutzen,(die nur in Objekten verfügbar sind)
PKJ 2005/33Stefan Dissmann
Statische Methoden
Zusammenfassung:
Statische Methoden• können über Referenzen aufgerufen werden• können über den Klassennamen aufgerufen werden
benötigen also kein Objekt zur Ausführung
können daher nicht auf Eigenschaften eines Objekts zugreifen,
können also keine normalen Methoden oder Attribute nutzen,
(die nur in Objekten verfügbar sind)
statische Methoden benötigen statische Attribute
PKJ 2005/34Stefan Dissmann
Statische Attribute
Beispiel:
public class Objektzaehler {
private static int anzahl = 0;
public Objektzaehler() {
anzahl++;
}
public static int gibAnzahl() {
return anzahl;
}
}
PKJ 2005/35Stefan Dissmann
Statische Attribute
Beispiel:
public class Objektzaehler {
private static int anzahl = 0;
public Objektzaehler() {
anzahl++;
}
public static int gibAnzahl() {
return anzahl;
}
}
PKJ 2005/36Stefan Dissmann
Statische Attribute
Beispiel:
public class Objektzaehler {
private static int anzahl = 0;
public Objektzaehler() {
anzahl++;
}
public static int gibAnzahl() {
return anzahl;
}
}
PKJ 2005/37Stefan Dissmann
Statische Attribute
Beispiel (Fortsetzung):
Objektzaehler oz;
oz = new Objektzaehler();
oz = new Objektzaehler();
oz = new Objektzaehler();
System.out.println(oz.gibAnzahl());
System.out.println(Objektzaehler.gibAnzahl());
PKJ 2005/38Stefan Dissmann
Statische Attribute
Beispiel (Fortsetzung):
Objektzaehler oz;
oz = new Objektzaehler();
oz = new Objektzaehler();
oz = new Objektzaehler();
System.out.println(oz.gibAnzahl());
System.out.println(Objektzaehler.gibAnzahl());
Liefert: 3
3
PKJ 2005/39Stefan Dissmann
Statische Attribute
Anmerkung:
System ist eine Klasse
out ist ein statisches Attribut in System, und zwareine Referenz auf ein Objekt (OutputStream)
println ist eine Methode der Klasse OutputStream
System.out.println(…)