• Keine Ergebnisse gefunden

Übungen Programmieren in Clojure Serie 7

N/A
N/A
Protected

Academic year: 2021

Aktie "Übungen Programmieren in Clojure Serie 7"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. Burkhardt Renz TH Mittelhessen

Programmieren in Clojure Übungen Serie 7

Übungen Programmieren in Clojure Serie 7

Person +name: String

+spricht(): void „Ich heiße <name>!“

Mann Frau

Herrenfriseur +frisiert(m: Mann):void

Damenfriseur +frisiert(f: Frau):void Friseur

„Herrenfriseur <name>

frisiert Herrn <m.name>“ „Damenfriseur <name>

frisiert Frau <f.name>“

Abbildung 1: Letscherts Friseure

1. Flächenberechnung für geometrische Figuren

(a) Schreiben Sie „Factory-Funktionen“ für Rechtecke, Kreise und gleichseitige Drei- ecke, mit einer auf Maps basierenden Implementierung.

(b) Definieren Sie eine Multimethod zur Berechnung der Fläche solcher geometrischer Figuren.

2. Polymorphes Addieren

(a) Schreiben Sie eine „Factory-Funktion“ für komplexe Zahlen, basierend auf einer Implementierung als Vektor aus Real- und Imaginärteil.

(b) Schreiben Sie eine Multimethode(add x y), die zwei Zahlen oder zwei komplexe Zahlen addiert

3. Letscherts Friseure

Gegeben sei die im UML-Klassendiagramm1dargestellte Situation, in der (wie in den 1950er Jahren) Damenfriseure Damen und Herrenfriseure Männer frisieren1

Angenommen, wir programmieren die Situation in Java und wollen folgenden Code verwenden:

public static void main(String[] args) {

1Die Übung heißt Letscherts Friseure, weil Prof. Dr. Thomas Letschert in seiner Veranstaltung über objektorientiertes Programmieren ab und an dieses Beispiel verwendet, um Details des Polymorphismus in Java zu erläutern.

Wintersemester 2017/18 1

(2)

Prof. Dr. Burkhardt Renz TH Mittelhessen

Programmieren in Clojure Übungen Serie 7

Person anna = new Frau("Anna");

Person benno = new Mann("Benno");

anna.spricht();

benno.spricht();

Friseur clara = new Damenfriseur("Clara");

Friseur dirk = new Herrenfriseur("Dirk");

clara.frisiert(anna);

dirk.frisiert(benno);

}

(a) Was passiert in Java?

(b) Wie kann man die Situation in Clojure mit Multimethods bewältigen? (Hinweis:

schauen Sie in der Dokumentation von Clojure nach, wie man in Clojure Typ- Hierarchien definiert.)

4. Matrizen

Gegeben sei folgendes „Protocol“:

(defprotocol Matrix

"Protocol for working with 2d datastructures."

(lookup [matrix i j]) (change [matrix i j value]) (rows [matrix])

(cols [matrix]) (dims [matrix]))

(a) Implementieren Sie das Protokoll für Matrizen repräsentiert durch Vektoren von Vektoren.

(b) Implementieren Sie das Protokoll für Matrizen repräsentiert durch ein zweidimen- sionales Java-Array von doubles.

Rev 4.0 – 11. August 2017

Wintersemester 2017/18 2

Abbildung

Abbildung 1: Letscherts Friseure

Referenzen

ÄHNLICHE DOKUMENTE

Wenn f eine numerische Funktion und n eine positive ganze Zahl ist, dann können wir die n-fach wiederholte Anwendung von f bilden, die als Funktion von x mit dem Wert f (f(. f

(a) Schreiben Sie eine Funktion vsquare, die aus einem Vektor einen anderen Vektor erstellt, der die Quadrate der Elemente enthält.. (b) Schreiben Sie eine Funktion vinc, die aus

Verwenden Sie Folgen in Clojure, um eine Lösung dieser Aufgabe zu programmieren.. Fibonacci

(b) Programmieren Sie eine Multimethode (area ...), die die Fläche eines Recht- ecks oder eines Kreises berechnet.. Flächenberechnung mit Records

(b) Schreiben Sie eine Funktion (add-account bank account), die dem Bestand der Konten der Bank ein weiteres Konto hinzufügt.. Beachten Sie die Eindeutigkeit

Was ergeben die folgenden Ausdrücke in der Repl, eingegeben in der vorgegebenen Rei- henfolge.. Burkhardt Renz

Eine Bank bezahlt Zinsen gestaffelt nach dem Guthaben: 1% bis 1000€, 1,25% bis 2000€ und 1,5% über 2000€.. Schreiben Sie eine Funktion, die zu einem Guthaben g den Jahreszins

Programmieren Sie eine Funktion (gcd n m), die mit dem Euklidischen Algorithmus den größten gemeinsamen Teiler (greatest common divisor ) der natürlichen Zahlen n und m berechnet..