Strukturieren durch Hierarchiebildung VL 3-5 Flashcards
Was ist die Motivation für Vererbung?
Damit man Code Duplikate vermeidet und gleiche Teilkonzepte gleichartig verwendet.
Welche Arten von Vererbung gibt es?
-Typ-Vererbung(Interfaces):
Die Schnittstelle wird vererbt und die Operationen werden überall gleich aufgerufen
-Implementationsvererbung: Unterklassen enthalten Implementation ihrer Elternklassen und sind eine Spezialisierung ihrer Elternklassen. Die Elternklassen abstrahieren von Unterschieden ihrer Unterklassen
Was ist Subtyping
Typen werden hierarchisch miteinander in Beziehung gesetzt. Sollte eine ist-ein-Beziehung ausdrücken(nicht jede ist-ein-Beziheung ist eine Subtyp Beziehung.
Der Fokus beim Subtyping ist Ersetzbarkeit.
Was ist die Grundidee der Polymorphie?
Hinter einer Schnittstelle können verschiedenartige Typen und Implementationen verbergen, von deren Unterschieden auf Ebene der Benutzung durch den Klienten bewusst abstrahiert werden soll.
Wozu ist Generalisierung zu verwenden?
- Gemeinsamkeiten mehrerer Klassen in Oberklasse zusammenfassen
- gemeinsame Bestandteile aus diesen Klassen “herausziehen”
->Redundanz vermeiden
Was ist Spezialisierung?
- neue Unterklassen als Spezialisierung von bestehenden Klassen
- Unterklassen verfeinern/erweitern
- gemeinsames in Oberklasse, Anpassung für andere Kontexte
->Redundanz vermeiden
Wozu verwendet man Vererbung?
- Anpassen durch Spezialisierung(Blinkersteuerung -> Blinkersteuerung mit Anhänger)
- Vermeiden von Redundanz(z.B. Java Collections Framework (List))
- Wiederverwendung
- Weitergabe und Ergänzung geerbter Eigenschaften
Was ist Überschreiben: Redefinieren?
Die Unterklasse überschreibt (@Override) eine Methode der Oberklasse und definiert sie neu.
Was ist Erweitern beim Redefinieren?
Die Methode der Oberklasse wird mit Schlüsselwort super aufgerufen und dann erweitert.
Beispiel:
Oberklasse:
public void eins(){}
Unterklasse: @Override public void eins() { super.eins(); ..... }
Was sind Eigenschaften abstrakter Klassen?
- keine Exemplare einer abstrakten Klasse erzeugbar
- Unterklasse muss alle abstrakten Methoden implementieren, andernfalls auch eine abstrakte Klasse
UML:
abstrakte Klasse: kursiv
konkrete Klasse: normal
Was ist eine Schablonenmethode?
Eine konkrete Methode, die eine oder mehrere abstrakte Methoden aufruft. Sie legt üblicherweise einen Ablauf, einen Algorithmus oder ein Teilverhalten fest.
Was ist eine Einschubmethode?
Eine abstrakte Methode, die meist zusammen mit der Schablonenmthode vorkommt. Die erbende Klasse implementiert die Einschubmethode und konkretisiert das Verhalten.
Was sind Entwicklungsfehler?
Sind vermeidbar, sollten vom Team entdeckt werden und Software sollte Robustheit haben
Was sind Umgebungsfehler?
Sind außerhalb des Einflussbereichs der Entwickler. Unregelmäßig, können aber vorhersehbar sein. -> Fehlerreaktion
Was ist Polymorphie?
Verschiedene Typen bieten dieselbe Schnittstelle an, wie z.B. ArrayList ≠ ArrayList
Was ist dynamisches Binden?
Compiler kann erst zur Laufzeit(dynamisch) entscheiden, welche Methode aufzurufen ist, da erst bei Laufzeit Objekt den dynamischen Typ einer Variable bestimmt.
Was sind die Regeln für das Subtyping im Bezug auf Verträge zwischen Klienten und Dienstleister?
- Verträge können an Zulieferer weitergegeben werden
- Zulieferer darf höchstens Voraussetzungen fordern, wie Anbieter sie fordert
- Zulieferer muss mindestens gleiche Leistung wie Anbieter haben
Was sind die Ziele von Implementationsvererbung in Methoden?
- Anpassung durch Spezialisierung(Klasse für neuen Kontext anpassen)
- Vermeiden von Redundanz
- Vervollständigen zwecks Wiederverwendung
Was macht das Schlüsselwort throw?
Auslösen einer Exception
Was macht das Schlüsselwort throws?
Deklarieren einer geprüften Exception an der Operationsschnittstelle
Wie werden Fehler mithilfe von try, catch und finally behandelt?
- try: Block, in dem Auftreten einer Exception gerechnet wird
- catch: Block zur Behandlung der auftretenden Exception
- finally: Block, der in jedem Fall ausgeführt wird
Was sind checked und unchecked Exceptions?
- checked Exceptions: Methode wird mit thros im Kopf deklariert, so dass im Bedarfsfall ausgelöst wird
- unchecked Exceptions: wird nicht deklariert, wird für Entwicklungsfehler benutzt
Wie erfolgt traditionelle Fehlerbehandlung und was ist die Kritik dahinter?
- Programm wird aus fehlerhafter Methode abgebrochen (nicht akzeptabel bei z.B. sicherheitskritischen Systemen)
- Return-Werrt, der vom Aufrufer als Fehler Code interpretiert werden soll (großer Aufwand)
- Fehlerhafte Methode setzt global lesbare Variable auf eingetretenen Fehlerstatus(Fehler wird nicht erkannt)
- Callback-Operation wird aufgerufen(machen Schnittstelle unnötig groß)
Welche Möglichkeiten und Verpflichtungen haben checked Exceptions?
Programmierer von Methode A gibt Verpflichtung an
Programmierer von Methode B vor, Compiler gibt sie weiter
Was ist Polymorphie?
Polymorphie kommt aus dem griechischen und bedeutet Vielgestaltigkeit. Dies soll darauf hinweisen, dass Methoden innerhalb einer Vererbungslinie, trotz gleicher Methodensignatur, ein unterschiedliches Verhalten aufweisen.