• 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!
2
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 4¨ Ausgabe: 26.5.2008 Besprechung: 28.5.2008

1. Verhaltenskonformanz bei reelen und komplexen Zahlen

Betrachten Sie zwei Klassen Real und Complex mit den Methoden void plus(Complex c) und void square(). Ist die Standarddefinition der Mathematik (“eine reelle Zahl ist eine komplexe Zahl”) verhaltenskonformant? Wie sieht es mit der Umkehrung aus? Begr¨unden Sie Ihre Argumentation anhand von Klasseninvarianten und Methoden-Vor- und Nach- bedingungen.

2. Generische Klassen und Vererbung

Verwendet man generische Klassen f¨ur Container, m¨ochte man nat¨urlich auch generische Klassen f¨ur Iteratoren verwenden:

(a) Erstellen Sie die Signatur einer generischen Klasse N ode<A>, in der jeder Knoten eine Liste von<A>enth¨alt. Weiterhin soll jeder Knoten eine Liste von Vorg¨anger und Nachfolge-Knoten enthalten, auf die nur ¨uber Iteratoren zugegriffen werden darf.

(b) Erstellen Sie die Signatur einer Klasse SpecialN ode, die von N ode<Integer> erbt und weiterhin die Methode void f oo() undvoid bar() beinhaltet.

(c) Schreiben Sie den Code f¨ur die Methodebar. Sie soll f¨ur alle Nachfolger des aktuellen Knotens die Methodef oo aufrufen. Welches Problem entsteht dabei? Sehen Sie eine M¨oglichkeit, es zu umgehen?

3. Generische Typanpassung in C++

Es gibt eine generische MatrixklasseMatrix<A>, von der eine eigene Matriximplementie- rung abgeleitet ist, die Eintr¨age des Typs double besitzt:

1 t e m p l a t e < c l a s s A> c l a s s M a t r i x { 2 A* e l e m e n t s;

3 ...

4 };

5

6 MyMatrix : c l a s s Matrix < double > {

7 ...

8 d o u b l e e n t r y = ...

9 ..

10 };

(a) Sie wollen nun Ihre Implementierung so ¨andern, dass in M yM atrix die Eintr¨age vom Typ float sind. Welche Anpassungen m¨ussen Sie machen? Welches Problem gibt es dabei?

(2)

FOO SS 2008 Ubungsblatt 4¨ S. 2

(b) C++ bietet hierzu jedoch eine elegante L¨osung an. Welche?

4. Bounded Polymorphism

Geben Sie je ein Beispiel an, das zeigt, dass es sinnvoll sein kann, (a) zwei Typschranken f¨ur einen Parameter

(b) zwei verschiedene Typparameter mit verschiedenen Schranken haben zu k¨onnen.

5. Probleme mit Typcasts bei Generics in Java Betrachten sie folgendes Java-Codefragment:

1 p u b l i c i n t e r f a c e B o a r d {

2 ...

3 B o a r d c l o n e () ;

4 ...

5 }

6

7 p u b l i c c l a s s S u d o k u B o a r d S o l v e r 8 i m p l e m e n t s S u d o k u S o l v e r {

9 ...

10 p r i v a t e <B e x t e n d s Board > L i n k e d L i s t <B>

11 b a c k t r a c k(B b o a r d) {

12 ...

13 B newBoard = (B) b o a r d. c l o n e () ;

14 ...

15 }

16 ...

17 }

Der Java Compiler liefert standardm¨aßig folgende Bemerkung:

Note: sudoku/SudokuBoardSolver.java uses unchecked or unsafe operations.

Bei Verwendung des Parameters-Xlint:unchecked erh¨alt man folgende Meldung:

sudoku/SudokuBoardSolver.java:86: warning:

[unchecked] unchecked cast found : sudoku.Board

required: B

B newBoard = (B) board.clone();

^ 1 warning

(a) Wieso tritt diese Meldung auf? ¨Uberlegen Sie sich, was intern in der JVM passiert.

(b) Kann man dies verhindern? Wenn ja, wie, wenn nein, warum nicht.

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