• Keine Ergebnisse gefunden

Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨ at Karlsruhe (TH)

Lehrstuhl f¨ ur Programmierparadigmen

Fortgeschr. Objektorientierung SS 2008 http://pp.info.uni-karlsruhe.de/

Dozent: Prof. Dr.-Ing. G. Snelting snelting@ipd.info.uni-karlsruhe.de Ubungsleiter:¨ Daniel Wasserrab wasserra@ipd.info.uni-karlsruhe.de Andreas Lochbihler lochbihl@ipd.info.uni-karlsruhe.de Ubungsblatt 7¨ Ausgabe: 16.6.2008 Besprechung: 18.6.2008

1. Multimethoden

Gegeben sei das folgende Programmfragment 1 c l a s s A { }

2 c l a s s B e x t e n d s A { 3 v o i d f(A x) { } 4 v o i d f(B x) { } 5 }

6 c l a s s C e x t e n d s B { 7 v o i d f(A x) { } 8 }

9 c l a s s D e x t e n d s B { 10 v o i d f(B x) { } 11 }

12 ...

13 A a= new A() ;

14 A a b= new B() ;

15 B b= new B() ;

16 B b c= new C() ;

17 B b d= new D() ;

18 C c= new C() ;

19 D d= new D() ;

20

21 b c.f(a) ; 22 b c.f(a b) ; 23 b c.f(b) ; 24 b d.f(a) ; 25 b d.f(a b) ; 26 b d.f(b) ; 27 c.f(a) ; 28 c.f(a b) ; 29 c.f(b) ; 30 d.f(a) ; 31 d.f(a b) ; 32 d.f(b) ;

(a) Nennen Sie Beispiele, in denen Multimethoden von Vorteil w¨aren.

(b) Welche Methoden werden in normalem Java und welche bei Verwendung von Multi- Methoden aufgerufen?

(2)

FOO SS 2008 Ubungsblatt 7¨ S. 2

(c) Gibt es Aufrufe, die jeweils in einer Variante eindeutig, aber in der anderen mehr- deutig sind?

(d) Machen Sie Vorschl¨age, wie man zur Laufzeit mit Mehrdeutigkeiten umgehen k¨onnte.

2. Callbacks in C++

(a) Die in der Vorlesung vorgestellten Callbacks benutzen immer genau 2 Parameter.

Kann man das System so erweitern, dass eine beliebige Anzahl von Parameter m¨oglich ist? Was muss man daf¨ur tun?

(b) Wie k¨onnte man diesen Mechanismus analog in Java implementieren? Welche Ein- schr¨ankungen bzw. Probleme k¨onnen dabei auftreten?

3. Aspekt-Orientierte Programmierung Folgendes ist Teil einer Bibliotheks-Verwaltung:

1 c l a s s U s e r {

2 S t r i n g name;

3 int y e a r o f b i r t h;

4 }

5 c l a s s B o o k { 6 S t r i n g t i t l e; 7 S t r i n g c a t e g o r y; 8 U s e r l e n d t o;

9 }

10 c l a s s L i b r a r y {

11 v o i d b o r r o w( U s e r u, B o o k b) { 12 if (b.l e n d t o!= n u l l )

13 t h r o w new E r r o r ( " u s e r " +b.l e n d t o+

14 " has to r e t u r n the b o o k f i r s t " ) ;

15 b.l e n d t o=u;

16 }

17 v o i d g i v e b a c k( U s e r u, B o o k b) {

18 if (b.l e n d t o!=u)

19 t h r o w new C o n f u s e d L i b r a r y E x c e p t i o n () ; 20 b.l e n d t o= n u l l ;

21 }

22 }

Erstellen Sie mit den M¨oglichkeiten von AspectJ, die Sie aus der Vorlesung kennen, f¨ur jeden dieser Punkte einen Aspekt:

(a) Die KlasseUser enth¨alt ab sofort eine Liste aller B¨ucher, die der Benutzer ausgelie- hen hat.

(b) Keinem Benutzer ist es m¨oglich, mehr als 3 B¨ucher gleichzeitig ausgeliehen zu haben.

(c) Kindern unter 12 ist es nicht mehr m¨oglich, B¨ucher der Kategorie “Adult” auszulei- hen.

(3)

FOO SS 2008 Ubungsblatt 7¨ S. 3

4. Visitor Pattern und Multimethoden

Sie haben eine Hierarchie mit folgenden Java-Klassen:

1 a b s t r a c t c l a s s E x p r e s s i o n { } 2

3 p u b l i c c l a s s I n t E x p r e s s i o n e x t e n d s E x p r e s s i o n { 4 int v a l u e;

5 } 6

7 p u b l i c c l a s s A d d E x p r e s s i o n e x t e n d s E x p r e s s i o n { 8 E x p r e s s i o n e1, e 2;

9 } 10

11 p u b l i c c l a s s M u l t E x p r e s s i o n e x t e n d s E x p r e s s i o n { 12 E x p r e s s i o n e1, e 2;

13 }

Nun m¨ochten Sie nachtr¨aglich eine prettyPrint()-Methode implementieren, welche eine Expression korrekt formatiert ausgibt, ohne sie direkt in die Klassen zu implementieren.

Welche Probleme entstehen dabei? L¨osen Sie dieses Problem einmal durch Anwendung des Visitor Patterns und einmal mit Multimethoden. Welche Vor- und Nachteile haben beide Ans¨atze?

Referenzen

ÄHNLICHE DOKUMENTE

Zwar ist ASCII heutzutage so gut wie ¨ uberall unterst¨ utzt, viele Sprachen ben¨ otigen aber weitere Zeichen die in ASCII nicht enthalten sind. Typische ASCII-Erweiterungen im

Es wird also anscheinend kein speziellere Datentyp f¨ ur Closures angelegt, der einen Funktionszeiger und einen Zeiger auf die Umgebung

• Nehmen Sie an die Anzahl der Register ist auf 3 beschr¨ ankt, spielt die Auswertungsreihenfolge bei den Ausdr¨ ucken jetzt noch eine Rolle. Aufgabe

Konstruieren Sie unter der Voraussetzung, dass alle nicht konstanten Operanden im Arbeitsspeicher stehen, Syntaxb¨ aume f¨ ur die folgenden Anweisungen:. 1. x = x

Skizzieren Sie Anordnung der Objekte auf dem Heap f¨ ur die Stelle nach dem Aufruf von ’A.create()’ unter der Annahme, dass beim Start der main Methode der Heap v¨ ollig leer

Semantische Analyse: Namensanalyse, Typanalyse, Operatoridentifikation, Konsistenzpr¨ ufung, Sprach- abh¨ angige Sonderaufgaben, Struktur¨ aquivalenz, Definitionstabelle,

Erstelle daf¨ ur zun¨ achst eine Tabelle mit den Gen- und Kill-Mengen der einzelnen Bl¨ ocke und f¨ uhre danach eine

F¨uhren Sie eine GOTO-Elimination f¨ur die folgende Methode durch (continue ist auch eine spezielle Form