1Werden finale Felder in Java-Clone richtig kopiert? (Shallow Copy)
Ja
2Werden finale Felder mit Copy Ctor richtig kopiert?
ja, sie können richtig initialisiert werden
3Werden finale Felder bei Java Reflection kopiert?
Nein, sie dürfen nicht vorkommen
4Es wird eine Deep Copy erstellt a) bei Java clone und/oder b) mit Copy Ctor
muss bei beiden selbst implementiert werden
5Wie wird bei a) Java-Clone und b) Copy Ctor mit zyklischen Strukturen / Alias-Referenzen umgegangen?
Sie müssen selbst korrekt aufgelöst werden
6Werden Strings in einer Shallow Copy richtig kopiert?
nein, also bei java clone per default nicht
7Werden finale Felder bei Java Serialization richtig kopiert?
ja
8Reflection kopiert automatisch deep, richtig oder falsch?
richtig, keine Kontrolle
9Serialization kopiert automatisch deep, richtig oder falsch?
richtig, beschränkte Kontrolle
10zyklische Strukturen werden sowohl bei Reflection, als auch Serialization automatisch aufgelöst.
richtig
11ordne Java-Clone, Reflection, Copy Ctor und Serialization nach Effizienz
1) Java clone und Copy Ctor, 2) Reflection, 3) Serialization
12Strings werden bei Reflection kopiert
falsch, sie sind als immutable registriert
13String werden bei Serialisierung kopiert
richtig
14Reflection braucht als einzige Methode einen nicht parametriesierten Konstruktor,
richtig, um neue Instanzen erstellen zu können
15alle Kopiermethoden ausser der Serialisierung kompilieren mit java.lang.Cloneable
nein, alle ausser dem Copy Ctor
16Was sollte für Information Hiding kopiert werden?
alle veränderbaren Objekte beim Herausgeben und Reinkommen
17Was ist in Sachen Information hiding sicher?
primitive Datentypen und immutable Objects (String, Color...)
18Was ist eine unveränderliche Klasse?
Klassen, deren Instanzen nicht verändert werden können
19Was sind die Vorteile unveränderlicher Klassen?
einfacher zu Implementieren und zu Benutzen, sicherer und weniger fehleranfällig
20Welche Schritte, um Klasse immutable zu machen?
1) keine Methoden zur Verfügung stellen, die den Zustand des Objekts verändert
2) Klasse als final deklarieren
3) alle Felder final deklarieren
4) alle Felder sind private
5) Zugriff auf alle veränderlichen Komponenten muss exklusiv sein
21unveränderliche Objekte sind...
- einfach, können nur einen Zustand haben
- threadsicher
- brauchen nie defensive Kopien
- auch Interna von unveränderlichen Objekten können gemeinsam genutzt werden
- gute Bausteine für andere Objekte und Keys von Maps
- vorübergehende Inkonsistenz ist ausgeschlossen
22Nachteil unveränderlicher Objekte
erfordern für jeden Wert ein eigenes Objekt -> kann zu Performance Problemen führen
23alternative zu final Klassen?
Alle Konstruktoren private oder protected machen & öffentliche statische Factory Methoden einrichten
24Decorator Objekte haben den gleichen Supertyp wie die dekorierten Objekte?
richtig
25Das ........ Muster erweitert ein Objekt dynamisch um weitere Verantwortlichkeiten. Es bietet eine flexible Alternative zu Subklassen für die Erweiterung der Funktionalität.
Decorator
26Vorteile Decorator Pattern
- können Verhalten zu Objekten hinzufügen
- können zur Laufzeit hinzugefügt werden
27Decorator Klassendiagramm
28Beispiel: Dekoratoren ineinander verpacken
Beverage b = new Whip(new Mocha(new Soy(new Houseblend(Beverage.SIZE.VENTI))))
29Decorator Sequenzdiagramm
30Welche Bedingung muss erfüllt sein, wenn ein Decorator zusätzliche Methoden enthält?
Der Decorator muss am Anfang der Ketter stehen
31Decorator vs. State/Strategy
Decorator fügt Verhalten hinzu und verändert Objekt Identität,
State/Strategy ändert das Verhalten des Objekts komplett
32Das ....... Muster verkapselt einen Auftrag von einem Objekt und ermöglicht es dadurch, andere Objekte mit verschiedenen Aufträgen zu parametrisieren, Aufträge in Warteschlangen einzureigen oder zu protokollieren oder das Rückgängigmachen von Operationen zu unterstützen.
Command
33Klassendiagramm Command
34allgemeine Form der Factory Method
abstract Product factoryMethod(String tye)
35Unterschied Abstract Factory und Factory Method
Abstract = Komposition
Method = Vererbung
36Welche Probleme kann Vererbung verursachen?
- Methoden, die in Subklassen überschrieben werden, könnten zukünftig anders funktionieren & super-calls funktionieren nicht mehr
- Sicherheitslücken (nur neue Methoden ist viel sicherer)
- neue Methoden könnten zufälligerweise die gleiche Signatur haben wie zukünftige neue Methoden in der Parent-Klasse & dann nicht mehr funktionieren
37Wie löst man die Probleme mit Vererbung?
Komposition
38Wie funktioneirt Komposition?
Klasse hält Instanz der "parent" Klasse und ruft in den Methoden die jeweilige Methode auf der Instanz auf. (Method forwarding)
39Wann ist Vererbung sinnvoll?
Wenn Klasse B tatsächlich logisch eine Subklasse von Klasse A ist.