Download Masterarbeit Timo Meinen - Meinen, Timo
Download Masterarbeit Timo Meinen - Meinen, Timo
Download Masterarbeit Timo Meinen - Meinen, Timo
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
5.1. EVALUATION DER FALLBEISPIELE<br />
Die Accessor-Methoden sind mit @Friendship annotiert und ihre Aufrufe werden<br />
damit durch das Framework kontrolliert. Alle Spezialisierungen der Klasse Visitor<br />
haben durch die Option friendClasses = Visitor.class und inheritanceAccess<br />
= true Zugriff. Auf die Methode getSaldo(...) kann durch ihren<br />
Eintrag in friendClasses auch die Klasse BankKunde zugreifen, beispielsweise um<br />
im OnlineBanking den Kontostand anzeigen zu können.<br />
Durch diese Konfiguration hat der FeeVisitor aus Listing 5.2 die Möglichkeit<br />
die Kontoführungsgebühr vom Konto abzubuchen (über die Methode setSaldo(...)).<br />
Es wird keine etwaige Dispo-Überprüfung durchgeführt, stattdessen<br />
kann der Visitor direkt die Attribute ändern.<br />
Listing 5.2: Der FeeVisitor erhebt Kontoführungs-Gebühren<br />
1 public class FeeVisitor implements Visitor {<br />
2 public void visit(BankKonto b) {<br />
3 b.setSaldo(b.getSaldo() − 5);<br />
4 }<br />
5 }<br />
Im Gegensatz zu den Besuchern, die allesamt von Visitor erben, erhält der Bankautomat<br />
aus der Klasse Cashpoint in Listing 5.3 keinen Zugriff. Das Framework<br />
fängt den Zugriff auf die Methode setSaldo(...) ab und da keine Ausnahme<br />
definiert ist, die dem Bankautomaten Zugriff gewähren würde, quittiert das Framework<br />
den Aufruf mit einer FriendshipAccessException. Dies führt dann zu<br />
einem Programmabbruch.<br />
Listing 5.3: Der Bankautomat hat keinen Zugriff auf die Accessor-Methoden<br />
1 public class Cashpoint {<br />
2<br />
3 public void notCorrect(BankKonto konto, int betrag) {<br />
4 // Aufruf wird verweigert<br />
5 konto.setSaldo(konto.getSaldo() − betrag);<br />
6 }<br />
7<br />
8 public void correct(BankKonto konto, int betrag) {<br />
9 // Richtiger Aufruf: Die Geschäftsmethode wird verwendet<br />
10 if (!konto.hebeAb(betrag))<br />
11 System.out.println(”Es wird kein Dispo gewährt!”);<br />
12 }<br />
13 }<br />
97