Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Das Functional Interface

Testen Sie unsere 1983 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
An sich stellt ein sogenannter Lambda-Ausdruck das Kernstück der funktionalen Programmierung mit Java dar. Allerdings wird dabei stets ein Interface vorausgesetzt, das über eine einzige, abstrakte Methode verfügt. Der Fachausdruck lautet Functional Interface. In diesem Video lernen Sie, wie man ein Functional Interface programmiert.

Transkript

Der Ursprung der funktionalen Programmierung stammt aus der Mathematik. Dort war es einst der sogenannte Lambda-Calculus, der benutzt wurde, um Logik höherer Stufen darzustellen. Diese graue Theorie werde ich Ihnen ersparen. Denn am einfachsten wird es, wenn Sie die funktionale Programmierung anhand eines einfachen Beispiels kennenlernen. Als Beispiel werde ich wieder das BMI-Programm zur Berechnung des BMI der Katze Pinki verwenden. Hierzu verwende ich wieder eine Klasse, ich gehe auf File New, dann auf Class, gebe dem ganzen einen Namen. Die Klasse soll App heißen. Dann brauche ich noch einen Package-Namen de.java2enterprise.bmi. Dann klicke ich auch noch auf die Checkbox public static void main, die brauche ich auch, und bestätige mit Finish. In der Main-Methode werde ich wieder den Konstruktor aufrufen und jetzt brauche ich auch noch einen Konstruktor. Hier drin werden wir dann arbeiten. Einer der wichtigsten Kernbestandteile der funktionalen Programmierung ist der sogenannte Lambda-Ausdruck, und ein Lambda-Ausdruck ist nichts anderes als eine anonyme Klasse mit einer einzigen Methode, nur dass die Syntax etwas minimaler ausfällt. Es ist aber so, dass eine anonyme Klasse ein Interface voraus setzt, beziehungsweise auf Basis eines Interfaces implementiert wird und genauso ist es bei einem Lambda-Ausdruck, nur dass wir hierbei dann von einem Functional-Interface sprechen. Auf die Besonderheiten eines Functional-Interfaces werde ich gleich noch zurückkommen. Aber zunächst erzeuge ich Ihnen ein Interface, um Ihnen die Theorie anhand der Praxis zu erklären. Ich gehe also im Hauptmenü auf File New Interface und das Interface nenne ich BMIRechner. Und dann bestätige ich mit Finish. Innerhalb des Interfaces BMIRechner, werde ich eine abstrakte Methode mit dem Namen Rechner einbauen, die abstrakte Methode Rechner mit zwei Parameter des Datentyps Double entgegennehmen und der Rückgabewert ist ebenso vom Typ Double. Also, public, auf den Modifier Abstract kann ich ja verzichten, da ich mich ja in einem Interface befinde und dort ohnehin dann davon ausgegangen wird. Der Rückgabewert ist double. Dann schreibe ich den Namen der abstrakten Methode hin, füge ein ; hinzu. Wir haben ja nur mit einem Rumpf zu tun und dann brauche ich die beiden Übergabe-Parameter, die sind vom Typ Double und den ersten nenne ich groesse und den zweiten nenne ich gewicht. Unser Interface BMIRechner hat also nun genau eine einzige abstrakte Methode. Und genau das zeichnet ein Functional Interface aus. Denn das Functional Interface darf nur eine einzige abstrakte Methode enthalten. Ein anderer Fachbegriff für solch ein Interface lautet SAM-Interface oder SAM-Interface für Single Abstract Method. Der Begriff Functional Interface ist aber gängiger. Empfehlenswert ist es auch das Interface mit der Annotation Functional Interface zu versehen, also hier oben. So, jetzt hat unser Interface die Annotation FunctionalInterface und jetzt ist es so, dass der Compiler dann überprüft, ob das Interface nur wirklich über eine einzige abstrakte Methode verfügt oder nicht. Wenn ich jetzt beispielsweise folgendes schreiben würde: addiere, dann hätten wir jetzt zwei abstrakte Methoden im Interface und dann erhielten wir die Meldung Invalid '@FunctionalInterface' annotation; BMIRechner is not a functional interface. Also entferne ich die zweite Methode wieder und dann stimmt es wieder. Nebenbei gesagt, neben den abstrakten Methoden darf ein Functional Interface aber auch Default-Methoden und Klassen-Methoden enthalten, aber die sind ja auch nicht abstrakt und müssten von der anonymen Klasse beziehungsweise dem Lambda-Ausdruck nicht überschrieben werden. Auf diesem kommen sie uns in der Umsetzung der funktionalen Programmierung auch nicht in die Quere. Kommen wir nun zurück zur Implementierung des Lambda-Ausdrucks. In der Startklasse erzeugen wir nun erstmals eine Variable des Interfaces BMIRechner. Genauso hätten wir es ja auch bei einer anonymen Klasse gemacht und dabei hätte ich jetzt ein Objekt mit Hilfe des Interfaces BMIRechner erzeugt,also so. new BMIRechner. Und dann hätte ich die abstrakte Methode Rechner mit einer gleichbenannten Methode überschrieben. Ich werde jetzt erstmal hingehen und mir von Eclipse helfen lassen und zwar halte ich die Strg-Taste gedrückt, drücke dann auf die Leertaste. Und dann öffnet sich dieses Kontext-Menü und hier klicke ich doppelt auf BMIRechner. Und dann sehen Sie, dass mir Eclipse geholfen hat und ich nun die überschriebene Methode Rechner erhalte. Und innerhalb der Methode setze ich die Formel der BMIRechnung ein und zwar ist es ja so, dass ein BMI-Wert das Gewicht / die Groesse zum Quadrat ist. So das speichere ich ab. Und um sicher zu gehen, dass ich nichts falsch gemacht habe, kann ich das Ganze auch nochmal testen und zwar würde ich dann hier unten mal mir den BMI-Wert ausrechnen lassen. Hierfür rufe ich die Methode rechner der anonymen Klasse BMIRechner auf, beziehungsweise der Variable rechner Und als Werte uebergebe ich einmal die Groesse der Katze, die ist 51 cm lang, also 0,51 m und das Gewicht ist 6,1 Kg. Und ganz zum Schluss werde ich jetzt auch noch das Ergebnis ausgeben. BMI: %.1f, das wird mir eine Nachkommastelle liefern und dann setze ich die Variable hier so noch hinzu. So das probiere ich mal aus. Hier habe ich noch einen Fehler. So jetzt habe ich die Groesse zum Quadrat in Klammern gesetzt und führe das Programm einmal aus und dann sehen Sie, dass ich hier 23,5 erhalte. In diesem Video haben Sie gelernt, wie man ein Functional Interface programmiert. Ein Functional Interface ist in der funktionalen Programmierung mit Java von Bedeutung, weil auf seiner Basis ein Lambda-Ausdruck programmiert werden kann, der das Kernstück der funktionalen Programmierung mit Java darstellet.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Steigen Sie tiefer in die Java-Programierung ein und lernen Sie den Umgang mit generischen Typen, Lamda-Ausdrücken, DAtenströmen und mit Datums- und Zeitberechnung.

5 Std. 24 min (47 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.10.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!