• Keine Ergebnisse gefunden

Übung 05: Functional Interfaces & Lambdas

N/A
N/A
Protected

Academic year: 2022

Aktie "Übung 05: Functional Interfaces & Lambdas"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übung Softwareentwicklung 2 SS 2018

Übung 05: Functional Interfaces & Lambdas

Abgabetermin: 26. 4. 2018, 10:15

Name: Matrikelnummer:

Informatik:  G1(Prähofer)  G2(Weninger)  G3(Prähofer)  G4 (Weninger)  G5(Löberbauer)  G6 (Aumayr) WIN:  G1 (Khalil)  G2 (Hummel)  G3 (Khalil)  G4 (Löberbauer)

Aufgabe Punkte abzugeben schriftlich abzugeben elektronisch korr. Punkte

Übung 5 24 Java-Programm,

Ausgabe eines Testlaufs

Java-Programm

Übung 05: E-Bike-Ladestation (24 Punkte)

In dieser Übung sollen Sie die generische ArrayList von Übung 4 (welche als Download bereitgestellt wird) um die typischen höheren Funktionen map, filter, reduce und foreach erweitern, welche die funktionalen Interfaces aus dem Package java.util.function (siehe Anhang) verwenden.

Diese Klasse soll dann genutzt werden, um die Sonneneinstrahlungsintensitäten einer E-Bike-Ladestation zu analysieren.

Höhere Funktionen: (16 Punkte)

Die Klasse ArrayList ist abstrakt und enthält vier Methoden, die von Ihnen noch zu implementieren sind. Schreiben Sie die Klasse HigherOrderArrayList und implementieren Sie folgende generische höheren Funktionen:

 <R> List<R> map(Function<? super T, ? extends R> mapper)

Die map Methode transformiert jedes Element in sein entsprechendes Zielelement.

List<String> l = new HigherOrderArrayList<>();

l.add("A");

l.add("AA");

l.add("AAA");

l.map(s -> s.length())

Im obigen Beispiel wird für jeden String-Wert der Liste dessen Länge ermittelt. Das Ergebnis ist damit eine neue Liste mit den Integer-Werten {1, 2, 3}.

 List<T> filter(Predicate<? super T> predicate)

Die Methode filter wird genutzt, um eine neue Liste zu erzeugen, die nur die Elemente der Liste enthält, die ein gegebenes Kriterium erfüllen.

List<Integer> l = new HigherOrderArrayList<>();

l.add(1);

l.add(2);

l.add(3);

l.add(4);

l.filter(i -> i % 2 == 0)

Im obigen Beispiel erfüllen die Elemente 2 und 4 das Kriterium i % 2 == 0. Das Ergebnis ist damit eine neue Liste {2, 4}.

(2)

Übung Softwareentwicklung 2 SS 2018

 T reduce(T idenity, BinaryOperator<T> accumulator)

Die Methode reduce führt eine Reduktions-Operation auf die Elemente der Liste durch. Ausgehend von einem Initialwert identity wird mit der Funktion accumulator für jedes Element der Liste ein neues Teilergebnis berechnet, das wiederum über der Funktion accumulator mit dem nächsten Werte kombiniert zu einem nächsten Teilergebnis kombiniert wird.

List<Integer> l = new HigherOrderArrayList<>();

l.add(1);

l.add(2);

l.add(3);

l.add(4);

l.reduce(0, (a, b) -> a + b)

Im obigen Beispiel wird mit reduce und dem Initialwert 0 jedes Element zum aktuellen Teilergebnis addiert.

Insgesamt wird damit die Gesamtsumme der Elemente berechnet. Das Ergebnis ist also 10.

 void forEach(Consumer<? super T> action)

Die Methode forEach wird genutzt, um durch die Elemente der Liste zu iterieren und dabei für jedes Element eine Consumer-Funktion anzuwenden.

l.forEach(s -> System.out.println(s))

Im obigen Beispiel wird jedes Element mit System.out.println ausgegeben.

Test: (8 Punkte)

Um die von Ihnen entwickelte Datenstruktur zu testen, entwickeln Sie folgendes Testprogramm:

 Lesen Sie die Integer-Werte in der Datei SunMeasurements.txt ein und speichern Sie diese in einer HigherOrderArrayList.

o Die Werte simulieren die Ergebnisse einer minütliche Helligkeitsmessungen über einen Tag. Die einzelnen Werte reichen dabei von 0 (komplett dunkel) bis hin zu 100 (maximale Helligkeit), d.h. je höher der Wert, desto heller ist es zur gegebenen Minute.

o Verwenden Sie zum Einlesen die In-Klasse, mit ihren Funktionen open und readInt.

 Geben Sie dann die Anzahl der dunklen, mittelhellen und hellen Minuten aus. Ein Helligkeitswert zählt als dunkel, wenn sein Wert 30 oder weniger beträgt, als mittelhell, wenn sein Wert größer 30 und kleiner gleich 70 ist, und höhere Werte gelten als hell. Verwenden Sie die Methode filter.

o Beispielausgabe:

Dunkel: 500 min Mittel: 800 min Hell: 100 min

 Nutzen Sie die reduce-Funktionalität, um den Wert der hellsten Messung zu berechnen.

o Beispielausgabe: Maximum: 81

 Die E-Bike-Station kann Räder nur laden, wenn die Helligkeit mindestens 50 erreicht. Dies soll visualisiert werden, indem Sie für jede Helligkeitsmessung entweder das Zeichen „C“ (für Charge) oder „N“ (für No Charge) ausgeben.

o Beispielausgabe:

Ladung möglich: ... NNNNNNNNNCCCNCNCCNNCCCCNN ...

o Verwenden Sie für diese Aufgabe nicht die Methode forEach, sondern reduzieren Sie die einzelnen Zeichen zu einem Gesamtstring, der dann anschließend ausgegeben wird.

 Wie bereits erwähnt, kann die Ladestation nur Räder laden, wenn der Helligkeitswert 50 oder mehr beträgt.

Zu allen anderen Zeitpunkten schaltet sich das Ladegerät nicht ein, und es wird nicht geladen. Läuft das

(3)

Übung Softwareentwicklung 2 SS 2018

Ladegerät, wird die Batterie in jeder Minute um den Wert L geladen, mit 𝐿 = (0.01 ∗ ℎ)2Amperestunden, wobei h dem Helligkeitswert zu der jeweiligen Minute entspricht. Eine Ladung findet aber nur statt, wenn L den Wert 0.5 nicht übersteigt. Ist dies nämlich der Fall, sperrt die Batterie des Fahrrades (zur Vereinfachung kann angenommen werden, dass immer genau ein Fahrrad geladen wird) aus Überladungssicherheitsgründen den Lademechanismus und es findet in der jeweiligen Minute keine Ladung statt. Ihre Aufgabe besteht darin, in einer Kette von verknüpften höheren Funktionen die Gesamtladeleistung der E-Bike-Station auszurechnen, d.h.

o zuerst werden die Helligkeitswert >= 50 gefiltert

o dann werden für die gefilterten Werte die Ladewerte L berechnet o diese werden wieder gefiltert, dass sie 0.5 nicht übersteigen o diese Werte werden dann noch mit reduce summiert.

Für die Testdaten ergibt sich eine gesamte Tages-Strom-Produktion von 135 Amperestunden.

 Um die forEach-Funktionalität zu testen, geben Sie für jeden Helligkeitswert, der den Wert 80 übersteigt, folgende Zeile aus: „Extremer Helligkeitswert: <WERT>“

o Beispielausgabe:

Extreme Helligkeit: 80 Extreme Helligkeit: 80 Extreme Helligkeit: 81 Extreme Helligkeit: 80

(4)

Übung Softwareentwicklung 2 SS 2018

Anhang: Wichtige Interfaces

Aus Package java.util.function

@FunctionalInterface

public interface Function<T,R> { R apply(T t);

...

}

@FunctionalInterface

public interface Predicate<T> { boolean test(T t);

...

}

@FunctionalInterface

public interface Consumer<T> { void accept(T t);

...

}

@FunctionalInterface

public interface BinaryOperator<T> { T apply(T t, T u);

...

}

Referenzen

ÄHNLICHE DOKUMENTE

Um eine variable r¨ aumliche Aufl¨ osung zu erm¨ oglichen, wird die Methode der finiten Elemente verwendet.. Das Modellgitter ist unstrukturiert und als Elemente werden

dem Verstände und ausgezeichnetem Gedächtniss gewesen. Er erklärt das Syrische durch das Syrische ; nur selten bedient er sich des Arabischen bei seinen Erklärungen. Oft bririgt

[r]

Bei indizierten Arrays werden als Schlüssel die Index-Nummern ausgegeben (0, 1,

Einführung in die Programmierung: by André Karge,Übung - Enum, Foreach, Recursion, Listen Bauhaus-Universität

• starke Kohäsion: alle Elemente sind nötig für die.. Funktionstüchtigkeit der anderen internen

Die Elektrolyse von Natriumchlorid wird technisch sowohl in der Schmelze als auch in wässriger Lösung durchgeführt. Formulieren Sie für beide Prozesse Elektrodenreaktionen

&lt;S&gt;&lt;/S&gt; mit Bindestrich daran ohne Spatium, S.. Reihen etc.) spielen insofern keine Rolle, da sie über die Stücktitelaufnahme sowieso auch indirekt mit dem