Was bedeutet "Program to Interfaces" ?
Programmiere an eine Schnittstellen, nicht an eine Implementierung!
Programmteile (Modul) sollten nur die Schnittstellen voneinander kennen , nicht die Implementierung
"Baukastenprinzip"
Analogie:
USB-Schnittstelle an Computer
- alles mögliche kann angeschlossen werden
( Stcik. Drucker, Maus...)
- dem PC ist das egal
---> lose Kopplung
Gegenbeispiel:
Mikrofon-Eingang
- hier kann auch Lautsprecher angeschlossen werden
-> Schnittstelle passt !
- Lautsprecher realisiert Schnittstelle "Aufnahme" aber nicht!
- so kann nichts aufgenommen werden !
Modul Computer ist von Implementierung des angeschlossenen Gerätes (Mikrofon) abhängig
=> Enge Kopplung
Programmteile (Modul) sollten nur die Schnittstellen voneinander kennen , nicht die Implementierung
"Baukastenprinzip"
Analogie:
USB-Schnittstelle an Computer
- alles mögliche kann angeschlossen werden
( Stcik. Drucker, Maus...)
- dem PC ist das egal
---> lose Kopplung
Gegenbeispiel:
Mikrofon-Eingang
- hier kann auch Lautsprecher angeschlossen werden
-> Schnittstelle passt !
- Lautsprecher realisiert Schnittstelle "Aufnahme" aber nicht!
- so kann nichts aufgenommen werden !
Modul Computer ist von Implementierung des angeschlossenen Gerätes (Mikrofon) abhängig
=> Enge Kopplung
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Wieso ist eine enge Kopplung schlecht ?
- Software ist nie "fertig"
- Anforderungen können sich jeder Zeit ändern
- Software wird ständig erweitert/ verändert
- Enge Kopplung zwischen Klassen erschwert Erweiterbarkeit/ Veränderbarkeit
- kleine Änderung kann aufgrund enger Kopplung ganze Systeme lahm legen
"Domino-Effekt"
- Lose Kopplung wünschenswert
-> Interfaces
- Anforderungen können sich jeder Zeit ändern
- Software wird ständig erweitert/ verändert
- Enge Kopplung zwischen Klassen erschwert Erweiterbarkeit/ Veränderbarkeit
- kleine Änderung kann aufgrund enger Kopplung ganze Systeme lahm legen
"Domino-Effekt"
- Lose Kopplung wünschenswert
-> Interfaces
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist eine Vererbung mit "extends"
entspricht einer engen Kopplung
- Klassen nehmen in vielen Details Bezug aufeinander
Problem: Änderungen an Basisklasse können Funktionalität von Subklasse beeinträchtigen.
- Klassen nehmen in vielen Details Bezug aufeinander
Problem: Änderungen an Basisklasse können Funktionalität von Subklasse beeinträchtigen.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist eine Vererbung mit "implements" ?
- Klassen innerhalb einer Anwendung (fast) unabhängig voneinander
- Verzicht auf vererbte Funktionalität ermöglicht flexiblen Programmentwurf
- Implementierungen sind gezwungen, Interface-Methoden zu überschreiben, bleiben dabei aber austauschbar
- immer zu bevorzugen !!!
- Verzicht auf vererbte Funktionalität ermöglicht flexiblen Programmentwurf
- Implementierungen sind gezwungen, Interface-Methoden zu überschreiben, bleiben dabei aber austauschbar
- immer zu bevorzugen !!!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Welche Schwächen hat die Vererbung mit "extends"?
Objekte können oft mehr als einer Kategorie zugeordnet werden. Das ist mit extends nicht möglich, weil jede Klasse maximal eine Superklasse hat.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Soll "extends" ganz gemieden werden ?
NEIN
Implementierungsvererbung mit bedacht einsetzen!
- bei wahrer Spezialisierung einer Klasse
- Wenn Programm nicht erweiterbar sein soll
- Wenn große Coderedundanzen vorhanden
Implementierungsvererbung mit bedacht einsetzen!
- bei wahrer Spezialisierung einer Klasse
- Wenn Programm nicht erweiterbar sein soll
- Wenn große Coderedundanzen vorhanden
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was sind Interfaces ?
zusätzliche Sprachfeature in Java
- "Klasse " ohne Daten und Implementierung
Sammlung abstrakter Methoden und (ggf.) Konstanten
enthält Keine Konstruktoren
-> keine Objekterzeugung möglich
- "Klasse " ohne Daten und Implementierung
Sammlung abstrakter Methoden und (ggf.) Konstanten
enthält Keine Konstruktoren
-> keine Objekterzeugung möglich
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was sind die Eigenschaften von Interfaces?
Realisierung loser Kopplung
beinhalten ausschließlich öffentliche , abstrakte Methoden sowie Konstanten
können sich gegenseitig erweitern (extends)
können nicht erzeugt werden
Klassen können beliebig viele Interfaces implementieren
beinhalten ausschließlich öffentliche , abstrakte Methoden sowie Konstanten
können sich gegenseitig erweitern (extends)
können nicht erzeugt werden
Klassen können beliebig viele Interfaces implementieren
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Wie werden Interfaces deklariert?
mit Schlüsselwort interface statt class
Konvention: Interface-Bezeichner beginnen immer mit Großem "I" gefolgt von weiterem Großbuchstaben
Methoden sind implizit abstrakt und öffentlich
( public abstract)
- Modifizierer können weggelassen werden
- deklariert nur Kopf einer Methode ohne Rumpf
- Am Ende abgeschlossen durch Semikolon
Interface für strombetriebene Geräte:
public interface IStrombetrieben{
<RÜCKGABETYP><BEZEICHNER> ( <PARAMETER>);
void einschlaten (int spannung);
void ausschalten();
}
Konvention: Interface-Bezeichner beginnen immer mit Großem "I" gefolgt von weiterem Großbuchstaben
Methoden sind implizit abstrakt und öffentlich
( public abstract)
- Modifizierer können weggelassen werden
- deklariert nur Kopf einer Methode ohne Rumpf
- Am Ende abgeschlossen durch Semikolon
Interface für strombetriebene Geräte:
public interface IStrombetrieben{
<RÜCKGABETYP><BEZEICHNER> ( <PARAMETER>);
void einschlaten (int spannung);
void ausschalten();
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Wie werden Interfaces implementiert?
mit Schlüsselwort "implements"
Beispiel:
Mixer hat (mind) selbe Schnittstelle wie IStrombetrieben
public class Mixer implements IStrombetrieben{
private boolean istAn = false;
private static final int
MAXIMALE_SPANNUNG = 240;
public void einschlaten(int spannung){
if(spannung <= MAXIMALE_SPANNUNG) {
this.istAn = true;
}
}
public void ausschalten(){
this. istAn = false;
}
}
Beispiel:
Mixer hat (mind) selbe Schnittstelle wie IStrombetrieben
public class Mixer implements IStrombetrieben{
private boolean istAn = false;
private static final int
MAXIMALE_SPANNUNG = 240;
public void einschlaten(int spannung){
if(spannung <= MAXIMALE_SPANNUNG) {
this.istAn = true;
}
}
public void ausschalten(){
this. istAn = false;
}
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist bei der Nutzung von Interfaces zu beachten?
Interface kann als Vertrag betrachtet werden.
Interface-Entwickler legt einzuschaltende Schnittstelle fest
Interface-Nutzer ist verpflichtet, alle Methoden des Interfaces zu implementieren
- falls nicht, gibt Compiler Fehlermeldung aus
- Interface-Entwickler kann sich frühzeitig auf Schnittstelle verlassen -> Polymorphismus
Interface-Entwickler legt einzuschaltende Schnittstelle fest
Interface-Nutzer ist verpflichtet, alle Methoden des Interfaces zu implementieren
- falls nicht, gibt Compiler Fehlermeldung aus
- Interface-Entwickler kann sich frühzeitig auf Schnittstelle verlassen -> Polymorphismus
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist Polymorphismus?
Objekt kann zu Laufzeit Verhalten ändern
Wir unterscheiden:
Überladen von Methoden (statischer Polymorphismus)
z.B.
- beim Überladen von Konstruktoren (VL05)
- Überladene Funktionen in java-API oder GraphicIO
Überschreiben von Methoden (dynamischer Polymorphismus)
Wir unterscheiden:
Überladen von Methoden (statischer Polymorphismus)
z.B.
- beim Überladen von Konstruktoren (VL05)
- Überladene Funktionen in java-API oder GraphicIO
Überschreiben von Methoden (dynamischer Polymorphismus)
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was bedeutet "Überladen von Methoden"?
- Methoden eines Objektes tragen gleichen Namen und gleichen Rückgabetyp
- müssen unterschiedliche Parameterliste haben
- Methoden befinden sich in gleicher Klasse oder Subklasse.
- Methodensignatur unterscheidet sich lediglich in Parameterliste
-Compiler vergleicht bei Aufruf übergebene Parameter mit Methodensignatur und wählt die am besten passende Methode
- Methoden können beliebig oft überladen werden
-GraphicIO setzt stark auf Überladen von Methoden!
=> Gute Quelle!
Beispiel für unterschiedliche Parameteranzahl:
Beispiel für unterschiedliche Parametertypen:
public void print(int intValue) {
...
}
public void print(String stringValue) {
...
}
public void printTest(){
print(137); wählt erste "print"-Methode
print("TEST"); wählt zweite "print"-Methode
}
- müssen unterschiedliche Parameterliste haben
- Methoden befinden sich in gleicher Klasse oder Subklasse.
- Methodensignatur unterscheidet sich lediglich in Parameterliste
-Compiler vergleicht bei Aufruf übergebene Parameter mit Methodensignatur und wählt die am besten passende Methode
- Methoden können beliebig oft überladen werden
-GraphicIO setzt stark auf Überladen von Methoden!
=> Gute Quelle!
Beispiel für unterschiedliche Parameteranzahl:
Beispiel für unterschiedliche Parametertypen:
public void print(int intValue) {
...
}
public void print(String stringValue) {
...
}
public void printTest(){
print(137); wählt erste "print"-Methode
print("TEST"); wählt zweite "print"-Methode
}
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist dynamischer Polymorphismus?
Polymorphismus im engeren Sinn
beruht auf 3 Prinzipien
- Überschreiben von Methoden
- Substitutionsprinzip
- späte Bindung/ dynamische Bindung
beruht auf 3 Prinzipien
- Überschreiben von Methoden
- Substitutionsprinzip
- späte Bindung/ dynamische Bindung
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was bedeutet "Überschreiben von Methoden"?
- Subklasse erbt Methoden der Superklasse
-Methode, welche in Superklasse definiert ist, wird in Subklasse überschrieben
- komplett gleiche Signatur (Name und Parameterliste), nur Rumpf wird geändert
- Subklasse blendet geerbtes Verhalten aus.
Verhalten kann so genauer an Subklasse angepasst werden.
Ausnahme :
Methoden nicht überschreibbar, wenn sie mit private, final, oder static definiert wurden.
-Methode, welche in Superklasse definiert ist, wird in Subklasse überschrieben
- komplett gleiche Signatur (Name und Parameterliste), nur Rumpf wird geändert
- Subklasse blendet geerbtes Verhalten aus.
Verhalten kann so genauer an Subklasse angepasst werden.
Ausnahme :
Methoden nicht überschreibbar, wenn sie mit private, final, oder static definiert wurden.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Was ist das Substitutionsprinzip?
Objekttypen:
polymorphe Referenzen - können potentiell verschiedene Typen annehmen .
- den deklarierten Typ und alle seine Subtypen
Objekt von Typ kann also zur Laufzeit substituiert (ersetzt) werden
- Figur kann Kreis, Rechteck, Dreieck oder Kugel sein
- Figur kann sich also entsprechend unterschiedlich verhalten
Erlaubt, weil Subklasse das Verhalten der Superklasse erbt!
polymorphe Referenzen - können potentiell verschiedene Typen annehmen .
- den deklarierten Typ und alle seine Subtypen
Objekt von Typ kann also zur Laufzeit substituiert (ersetzt) werden
- Figur kann Kreis, Rechteck, Dreieck oder Kugel sein
- Figur kann sich also entsprechend unterschiedlich verhalten
Erlaubt, weil Subklasse das Verhalten der Superklasse erbt!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Wie unterscheiden sich statischer Typ und Laufzeittyp?
‐ statischer Typ legt Zugriffsmöglichkeiten auf Methoden fest
‐ Methode einer Klasse kann nur von Objekt mit statischem Typ dieser Klasse aufgerufen werden
Beispiel
Kugel kugel; Deklaration legt statischen Typ fest
kugel = new Kugel() ; Definition legt Laufzeittyp fest
‐ Kugel ist statischer Typ und Laufzeittyp
Figur andereKugel; statischer Typ ist Figur andereKugel
= new Kugel(); Laufzeittyp ist Kugel
andereKugel.rolle(); NEIN! Figur kennt "rolle" nicht!
‐ Methode einer Klasse kann nur von Objekt mit statischem Typ dieser Klasse aufgerufen werden
Beispiel
Kugel kugel; Deklaration legt statischen Typ fest
kugel = new Kugel() ; Definition legt Laufzeittyp fest
‐ Kugel ist statischer Typ und Laufzeittyp
Figur andereKugel; statischer Typ ist Figur andereKugel
= new Kugel(); Laufzeittyp ist Kugel
andereKugel.rolle(); NEIN! Figur kennt "rolle" nicht!
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Wie verläuft die dynamische Methodensuche?
Aufruf der Methode eines Objekts stößt Methodensuche an
Fall1
Klasse des Objektes hat KEINE Superklasse -> in Klassendefinition des Objekts beschriebene Methode wird ausgeführt.
Fall 2
Klasse des Objekts hat Superklasse
a) Klasse des Objekts hat gewünschte Methode überschrieben
-> überschriebene Methode (und nur diese!) wird aufgerufen
b) Klasse des Objekts hat gewünschte Methode NICHT überschrieben -> Methodensuche wird bei Superklasse fortgeführt, usw.
Fall1
Klasse des Objektes hat KEINE Superklasse -> in Klassendefinition des Objekts beschriebene Methode wird ausgeführt.
Fall 2
Klasse des Objekts hat Superklasse
a) Klasse des Objekts hat gewünschte Methode überschrieben
-> überschriebene Methode (und nur diese!) wird aufgerufen
b) Klasse des Objekts hat gewünschte Methode NICHT überschrieben -> Methodensuche wird bei Superklasse fortgeführt, usw.
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Welche Vorteile hat Polymorphismus?
Bessere Abbildung der Wirklichkeit:
ermöglicht variable Anpassung des Verhaltens von Methoden an Kontext
ermöglicht hohe Wiederverwendbarkeit
lose Kopplung
Austausch von Objekten führt zu Verhaltensänderung
- ein und derselbe Code kann unterschiedliche Aufgaben abarbeiten
- für Entwurfsmuster sehr wichtig
ermöglicht variable Anpassung des Verhaltens von Methoden an Kontext
ermöglicht hohe Wiederverwendbarkeit
lose Kopplung
Austausch von Objekten führt zu Verhaltensänderung
- ein und derselbe Code kann unterschiedliche Aufgaben abarbeiten
- für Entwurfsmuster sehr wichtig
Tags: Interfaces und Polymorphismus, VL08
Quelle:
Quelle:
Kartensatzinfo:
Autor: P-H-I-L
Oberthema: Informatik
Thema: Java
Veröffentlicht: 13.04.2010
Schlagwörter Karten:
Alle Karten (135)
Felder (6)
Interfaces und Polymorphismus (20)
Programmelemente (26)
Terminologie (8)
VL 05 (15)
VL 07 (11)
VL04 (6)
VL08 (20)
VL09 GUI (2)