Eine Variable oder Methode in einer Klasse vergessen und sie können/dürfen die Klasse nicth mehr ändern? Kein Problem, mittels Intertype-Deklaration können Sie das nachholen.
In 1Lotto findet sich die Lotto-Lösung aus dem vorigen Kapitel wieder, das nachträglich im ZusatzZahlAspect um zusätzliche Methoden und Attribute bereichert wird. Über die Ziehung-Klasse kann die Ziehung gestartet werden. Nicht wundern, wenn ein LogFactor5-Fenster hochkommt -- dies kann über die log4j.properties wieder geändert werden.
2LottoAbgeleitet ist ein Beispiel, wie man eine bestehende Lösung über Unterklassenbildung erweitert. In vielen Fällen ist dieser Ansatz gegenüber Intertype-Deklaration vorzuziehen, in Kapitel 6.1.4 "Für und Wider" finden Sie aber auch Gründe, dies nicht zu tun.
In 3KontoPersistent wird wieder das Konto-Beispiel aufgegriffen, dieses Mal um einen PersistenceAspect ergänzt, der für die dauerhafte Ablage sorgt und dazu mittels Castor die Daten als XML ablegt (die benötigten Bibliotheken finden Sie im lib-Verzeichnis). Damit die Tests in AllTests fehlerfrei ablaufen können, sollte ein Konto-Verzeichnis vorhanden sein.
Als Beispiel für die verschiedenen Erweiterungsmöglichkeiten wie konkrete oder abstrakte Methoden dient das Lotto-Beispiel in 4LottoUebersicht.
Den BibBrotherAspect und HeinzAspect zur Demonstration der Konflikt-Situationen aus Kapitel 6.5 finden Sien in 5Demo.
In 6KontoComparable befindet sich das Beispiel zu "declare parents". Her wird die KontoKlasse um die Comparable-Implementierung ergänzt. Über AllTests können die Tests gestartet werden.
In 7KontoPersistent finden sie das Konto-Beispiel mit Persistence-Interface und der Default-Implementierung in Persistence-Aspect. Um die Testfälle in AllTets zu starten, sollten Sie vorher noch ein Konto-Verzeichnis anlegen. Dieses Verzeichnis wird von der Default-Implementierung zur Ablage der Konto-Daten benötigt.
Was passiert, wenn sich verschieden Default-Implementierungen widersprechen? Diese Frage wird in 8Maultier anhand des Pferd- und Esel-Interface untersucht. Wenn Sie wissen wollen, weche gibLuut()-Methode das Maultier von sich gibt, starten Sie einfach die Maultier-Klasse. Und was macht das Kamel?
Wie lässt sich die Reihenfolge konkurrierender Advices festlegen? Mittels der "declare precedence"-Anweisung, die in 9Rabatt zum Zuge kommt. Um festzustellen, ob die Reihenfolge tatsächlich richtig eingehalten wird, starten Sie einfach die RechnungTest-Klasse.
Für das Enum-Projekt benötigen Sie mindestens Java 5, de es für die Realisierung von Alarmstufen Enums verwendet. Starten können Sie das Beispiel über die Main-Klasse.
Wie man eigene Warnungen und Fehlermeldungen definieren kann, finde Sie im aQM-Verzeichnis.
In bHistory finden Sie als Beispiel eine kleine History-Klasse zum Protokollieren von Ereignissen. Zum Testen dient der HistoryTest.