Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Scala Grundkurs

Implizite Methoden

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Implizite Methoden erlauben es, andere Klassen um eigene Funktionen und Zustände zu erweitern, ähnlich der Systematik von Wrapper-Klassen.

Transkript

Oft kommt man beim Programmieren in die Verlegenheit, Klassen zu benutzen, die man selbst nicht entwickelt hat. Das passiert vor allem dann, wenn man beispielsweise Bibliotheken anderer nutzt, oder auch beispielsweise Klassen oder Methoden aus dem Java Development Kit. Diesen Klassen fehlen dann oft Funktionalitäten, die man aber für den eigenen "use case" dringend bräuchte. Das Resultat davon ist, dass man sich oftmals Wrapper-Klassen schreibt und viele Funktionalitäten, die schon ursprünglich definiert wurden, nochmal nachimplementieren muss, beziehungsweise über komplexe Weiterleitungen an die ursprüngliche Klasse schickt. Scala löst dieses Problem mit den sogenannten impliziten Methoden. Damit ist es mir also möglich, Methoden auf Klassen zu definieren, die mir selbst nicht gehören. Und anhand eines Beispiels demonstriere ich Ihnen nun, wie das funktioniert. Ich befinde mich nun in meiner Applikation. In dieser Applikation gibt es Kunden, einen Warenkorb, Produkte, Preise, einen Online-Shop, wo man dann diesen Warenkorb beispielsweise bestellen kann. Aktuell gibt der Kunde hier sein Bankkonto an; in Form einer IBAN. Diese IBAN wird mithilfe einer PaymentAPI überprüft. Innerhalb dieser PaymentAPI nutze ich eine Klasse des Java Development Kit. ganz konkret die httpURLConnection. Diese resultiert daraus, dass ich eine URL angebe Und auf Basis dieser URL eine "connection" öffne. Nichtsdestotrotz erwische ich mich oft, dass ich viel Boilerplate-Code schreiben muss, um diese URL-Connection so zu nutzen, wie ich es gerne hätte. Im Normalfall interessiert es mich eigentlich nur, einen Post-Befehl zu starten und den Inhalt mitzugeben. Hier handelt es sich also um einen optimalen Fall, um die Funktionalität der httpURLConnection, um eigene Methoden zu erweitern, so dass ich nicht in mehreren Klassen eine solche PostToURL-Funktion bauen muss. Um das Ganze nun zu tun, erstelle ich zunächst einmal ein "object". Dies tue ich unterhalb des "packages", "utils". Das "object" bezeichne ich nun mit "httpURLConnectionExtensions". Damit ist also einem Verwender dieses "objects" auch klar, wofür dieses "object" tatsächlich genutzt wird. Innerhalb dieses "object", definiere ich nun also eine Wrapper-Klasse Diese bezeichne ich relativ einfach als: "httpURLConnectionExtension", da ich nur eine einzige habe. Der Name ist hier an und für sich unerheblich. Er wäre nur relevant später, falls man auf eine "stacktrace" stößt. Wie üblich könnte ich also nun eine Wrapper-Klasse bauen. Wie ich es auch beispielsweise in Programmiersprachen wie Java tue. In dem Fall würde ich also eine "connection" als Argument übergeben und das Ganze ist dann vom Typ "httpURLConnection". Um also die Nutzung relativ einfach zu machen, definiere ich also hier eine Funktion mit der Bezeichnung "post". Diese nimmt beispielsweise "content" entgegen, der an einen Web-Endpunkt zu posten wäre, in Form eines Strings. Und das Ganze resultiert auch wiederum in dem "content", der vom Server zurückgegeben wird, auch in Form eines Strings. Als Nächstes kopiere ich nun einen Großteil der Implementierung, die ich bereits geschrieben habe. Soweit so üblich. Jetzt kann ich nun beispielsweise die Implementierung hier entfernen und meine "connection" nun innerhalb einer "httpURLConnectionExtension" abbilden. Dann wiederum habe ich nun also den Post zur Verfügung und kann hier den "content" übergeben. So würde ich es normalerweise tun. Allerdings habe ich nun das Problem, dass auch auf diesem httpURLConnectionExtension-Objekt viele der Methoden der ursprünglichen Klasse nicht mehr sichtbar sind. Lediglich die von mir definierte Funktion "post". Mit Scala kann ich das Ganze deutlich vereinfachen. Ich entferne also nun diese Wrapper-Klasse Als Nächstes importiere ich alles unterhalb des "object" httpURLConnectionsExtension. Dafür verwende ich hier den "underscore". Nun muss ich lediglich vor meine Klasse, die hier ein einziges Argument entgegennimmt, also genau diese httpURLConnection, das Wort "implicit" schreiben. Insofern ich genau diese Schritte durchgeführt habe, bekomme ich nun die Möglichkeit, zum einen die üblichen Methoden und Funktionen der httpURLConnection zu nutzen, als auch die von mir selbst definierte Funktion "post". Das heißt, auch an anderen Stellen innerhalb meiner Applikation könnte ich nun genauso mit einer httpURLConnection verfahren. Das Besondere ist natürlich, dass ich das Ganze innerhalb von einer Klasse abgebildet habe. Das bedeutet auch, dass ich beispielsweise innerhalb dieser Klasse eigenen "state" verwalten kann, der dann also pro httpURLConnection-Instanz auch mir zur Verfügung steht. Mithilfe von impliziten Methoden ist es also möglich, bestehende Klassen um Methoden oder Funktionen zu erweitern. Ich verfahre an der Stelle ähnlich, wie ich es auch in anderen Programmiersprachen tun würde, indem ich eine Wrapper-Klasse erstelle, die einen einzigen Parameter entgegennimmt. Beispielsweise das Ursprungsobjekt. Allerdings deklariere ich innerhalb von Scala eine "imlicit class". Und dies tue ich im Regelfall innerhalb eines Objekts, damit ich dann beispielsweise an anderen Stellen genau den Inhalt dieses Objekts importieren kann. Und dann beispielsweise die zusätzlichen, von mir definierten Methoden und Funktionen zur Verfügung gestellt bekomme. Besonders daran ist auch, dass ich neben dem Bereitstehen von Funktionen und Methoden auch eigene Zustände innerhalb meiner Klasse verwalten kann. Und selbstverständlich lässt sich diese Klasse auch mit den üblichen Scala-Mechanismen wie beispielsweise "traits" kombinieren.

Scala Grundkurs

Entdecken Sie die Möglichkeiten und Eigenschaften der modernen Programmiersprache Scala.

4 Std. 44 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:12.04.2017

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!