prj 2007/1 stefan dissmann abstrakte methode zusammenfassung: abstrakte methode definiert nur die...

39
PRJ 2007/1 Stefan 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

Upload: adaleiz-martin

Post on 05-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 2: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 3: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 4: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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 …

Page 5: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 6: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/6Stefan Dissmann

Klassen-Interface-hierarchie

<<abstract>>

A

<<interface>>

W

K

<<interface>>

V

<<interface>>

X

<<interface>>

Y

<<interface>>

Z

Object

Page 7: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/7Stefan Dissmann

Klasse - Interface

Warum ist mehrfaches Erben/Implementieren bei Interfaces erlaubt

- und nicht bei Klassen?

Page 8: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 9: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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()??

Page 10: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 11: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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!

Page 12: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/12Stefan Dissmann

Interfaces und abstrakte Klassen

Was soll der ganze Unfug? Klassen abstrakte Klassen Interfaces

erben und vererben

implementieren

Kompatibilität von Referenzen

Page 13: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/13Stefan Dissmann

Design by Contract

Idee:

Klasse bietet anderen Klassen Funktionalität/Leistung an

durch Methoden

Page 14: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 15: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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!

Page 16: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/16Stefan Dissmann

Design by Contract

Idee:

Abstimmung erfolgt durch Verhandeln!

geht nur mit beiden Partnern einzelner Partner formuliert Anforderungen Interface ist Anforderungsbeschreibung

Page 17: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/17Stefan Dissmann

Page 18: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 19: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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.

Page 20: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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)

Page 21: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 22: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

?

Page 23: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/23Stefan Dissmann

Klassen

Statische Methoden

• bekannt (und genutzt) seit der ersten Vorlesung:

public static void main(String[] args) { … }

Page 24: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/24Stefan Dissmann

Klassen

Statische Methoden

• bekannt (und genutzt) seit der ersten Vorlesung:

public static void main(String[] args) { … }

Page 25: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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!

Page 26: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/26Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

Page 27: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/27Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r = new K();m() …

Page 28: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/28Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

Page 29: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/29Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

möglich ist:r.m();

Page 30: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/30Stefan Dissmann

Statische methoden

Kpublic void m() …

public static void

s() …

r

m() …

möglich ist:r.m();möglich ist auch:

K.s();

Page 31: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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();

Page 32: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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)

Page 33: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 34: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/34Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 35: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/35Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 36: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/36Stefan Dissmann

Statische Attribute

Beispiel:

public class Objektzaehler {

private static int anzahl = 0;

public Objektzaehler() {

anzahl++;

}

public static int gibAnzahl() {

return anzahl;

}

}

Page 37: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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());

Page 38: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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

Page 39: PRJ 2007/1 Stefan Dissmann Abstrakte Methode Zusammenfassung: Abstrakte Methode definiert nur die Signatur einer Methode besitzt keinen Methodenrumpf ist

PRJ 2007/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(…)