Interfaces Flashcards

1
Q

Konto-Schnittstelle mit 2 Implementierungen

A

° Klasse Konto bietet an ihrer Schnittstelle die Operationen: einzahlen, auszahlen, gibSaldo
° Implementierung benutzt eine Feldvariable, um den Saldo zu speichern
- Jede Ein- und Auszahlung verändert den Wert dieser Variablen
° Implementierung könnte eine Liste benutzen:
- Speichert jede Ein- und Auszahlung in einer Liste
- Saldo wird erst berechnet, wenn gibSaldo aufgerufen wird, indem die Ein- und Auszahlungen aufaddiert werden

° Für Klienten verändert sich nichts:

  • In beiden Fällen werden die sichtbaren Operationen aufgerufen und erhält die gleichen Ergebnisse
  • Objektbenutzung bleibt unverändert
  • Operationen des Interfaces genauso aufrufbar wie die einer Klasse
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Interface Beispiel

A
interface Konto
{
   void einzahlen (int betrag);
   void auszahlen (int betrag);
   int gibSaldo();
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Eigenschaften von Interfaces

A

° Sammlungen von Methodenköpfen
° Alle Methoden in einem Interface sind implizit public
° Enthalten keine Methodenrümpfe
° Definieren keine Felder
° Sind nicht instanziierbar (keine Exemplare)
° werden von Klassen implementiert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Interfaces werden durch Klassen implementiert

A

° Klasse kann deklarieren, dass sie eine Interface implementiert
° Klasse muss für jede Operation des Interfaces eine Methode anbieten
° sie erfüllt dann das Interface
° Immer wenn ein Objekt mit einem bestimmten Interface erwartet wird, kann eine Referenz auf ein Exemplar einer implementierenden Klasse verwendet werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Implementation Beispiel

A
class KontoSimpel implements Konto
{
   private int _saldo;
   public void einzahlen(int betrag) {...}
   public void auszahlen(int betrag) {...}
   public int gibSaldo() {...}
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Auswirkung bei Erzeugung

A

° Bei der Objekterzeugung muss eine implementierende Klasse angegeben werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Trennung von Schnittstelle und Implementation mit Interfaces

A

° Klientenklasse benutzt die Dienstleistungen des Interface und ist dadurch von der konkreten Anbieterklasse entkoppelt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Interface als Spezifikation

A

° Das Interface Konto ist aus einer Klasse abgeleitet
° Methoden wurden in einem Interface beschrieben
° Interface wird definiert und der Umgang für enen Typ wird festgelegt
° Köpfe der Operationen werden festgelegt (mit Kommentar)
° Interface bildet eine Spezifikation, die Klasse eine mögliche Realisierung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Spezifikation allgemein

A

° Beschreibung der gewünschten Funktionalität einer (Software-)Einheit
° Was soll die Einheit leisten?
° Aber nicht, wie sie diese Leistung erbringt
° Unterscheidung zwischen:
- informell (natürlichsprachliche)
- formal (z.B. mathematische)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Interface sind auch Typen

A

° Jede Klasse definiert einen Typ
- durch Schnittstelle (Operationen)
- durch Menger der Exemplare (Wertemenge)
° In Java ist Interface auch als Typ definiert
- durch Schnittstelle
- durch Menge der Exemplare aller Klassen, die dieses Interface erfüllen, d.h. die die Schnittstelle des Interface implementieren
° Für einen Typ im OO Sinne ist wichtig:
- Welche Objekte zur Wertemenge des Typs gehören
- Welche Operationen auf diesen Objekten zulässig ist
- NICHT wie die Operationen implementiert sind

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Erweiterter objektorientierter Typbegriff

A

° Typ definiert das Verhalten von Objekten durch eine Schnittstelle, ohne die Implementation der Operationen und des inneren Zustands festzulegen
° Folge:
- Ein Objekt wird von genau einer Klasse erzeugt
- Da eine Klasse auch mehrere Interfaces erfüllen kann, kann ein Objekt zu mehr als einem Typ gehören

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Statischer Typ

A

° durch deklarierten Typ definiert
° Statisch, weil er zur Übersetzungszeit feststeht
° legt die aufrufbaren Operationen der Varable fest
° Compiler überprüft zur Übersetzungszeit, ob die genannten Operation im statischen Typ defieniert ist

Konto k ; // Konto ist hier der statische Typ von k
k.einzahlen(200); // einzahlen ist hier eine Operation

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Dynamischer Typ

A

° hängt von der Klasse des Objektes ab, auf das die Referenzvariable zur Laufzeit verweist
° bestimmt die Implementation und ist dynamisch in zweierlei Hinsicht:
- kann erst zur Laufzeit ermittelt werden
- kann sich während der Laufzeit ändern
° Objekt hingegen ändert seinen Typ nicht; es bleibt sein Leben lang ein Exemplar seiner Klasse
° Dynamischer Typ einer Variablen entscheidet darüber, welche konkrete Methode bei einem Operationsaufruf ausgeführt wird
° Diese Entscheidung wird erst zur Laufzeit getroffen und wird dynamisches Binden (einer Methode) genannt

k = new KontoSimpel(); //dynamischer Typ von k: KontoSimpel
k = new KontoAnders(); // neuer dynamischer Typ von k: KontoAnders
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Typtest mit instanceof

A

° Jedes erzeugte Java-Objekt ist ein Exemplar von genau einer Klasse
° Diese Zugehörigkeit zu der erzeugenden Klasse ändert sich nicht
° Ein Objekt kann mit instanceof überprüft werden welcher Klasse es angehört
° Diese boolesche Operation nennen wir im Folgenden einen Typtest

Konto k; // Konto sei hier ein Interface

if (k instanceof KontoSimpel) // wenn k eine gültige Referenz
// auf ein Exemplar der Klasse
// KontoSimpel hält

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Typzusicherungen

A

° Klienten sollten ausschließlich mit dem statischen Typ umgehen
° Bei Situationen in denen Operationen des dynamischen Typs aufgerufen werden müssen, muss der Typ zugesichert werden
° Syntaktisch ähnlich wie eine Typumwandlung bei primitiven Typen
° Weder Objekt noch Objektreferenz werden verändert

Konto k; // Konto sei hier ein Interface

if (k instanceof KontoSimpel) // wenn k eine gültige Referenz auf ein
{ // Exemplar der Klasse KontoSimpel hält
KontoSimpel ki = (KontoSimpel)k;

// Nun Operationsaufrufe von KontoSimpel möglich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly