19.11.2013 Aufrufe

Download Masterarbeit Timo Meinen - Meinen, Timo

Download Masterarbeit Timo Meinen - Meinen, Timo

Download Masterarbeit Timo Meinen - Meinen, Timo

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!