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

Objekte

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Objekte als Teil der Programmiersprachen-Syntax kennt man so nur von Scala. Hierbei handelt es sich nicht um die klassischen Java-Objekte, sondern um ein besonderes Konstrukt. In diesem Video erklärt Ihnen Christopher Janietz, was genau sich hinter dieser Aussage verbirgt.

Transkript

Objekte als Teil der Programmiersprachen-Syntax kennt man so nur von Scala. Das heißt, es handelt sich hierbei nicht um die klassischen Java-Objekte, sondern um ein besonderes Konstrukt, das in Scala vor allem für statische Werte verwendet wird, und ich zeige Ihnen nun, welche Einsatzmöglichkeiten das mit sich bringt. Ich habe hier also eine Applikation, die sich mit Warenkörben, Kunden und Preisen auseinandersetzt. Diese Preise werden Produkte zugewiesen, in einen Warenkorb gesteckt und auch dort von einem Kunden gekauft. Das Ganze befindet sich nun innerhalb einer Methode mit der Bezeichnung "main", die sich hier bereits auf einem "object" mit der Bezeichnung "Application" befindet. Es handelt sich hierbei also um eine statische Methode. Anders als in Java deklariert man eine statische Methode nicht mit dem Keyword "static", sondern definiert diese unterhalb eines "object"; was also der erste Anwendungsfall für "objects" innerhalb von Scala ist. Ich habe hier eine Klasse mit der Bezeichnung "OnlineShop". Diese kann Kunden erfassen, üblicherweise habe ich aber nicht mehrere OnlineShops pro Applikation. Das bedeutet, dieser Anwendungsfall eignet sich besonders gut für das Singleton-Muster. Für genau diese Singleton-Muster kann man bspw. "objects" verwenden. Ich deklariere alo eine so genannte "Companion class". So bezeichnet man ein "object", das den gleichen Titel wie die dazugehörige Klasse hat, in meinem Fall also das "object OnlineShop". Ein solches Object steht üblicherweise auch in der selben Scala-Datei wie die eigentliche Klasse. Einer der wenigen Anwendungsfälle, um tatsächlich mehr als nur ein Klassenobjekt innerhalb einer Scala-Datei zu verwenden. Wenn ich nun also eine Standardinstanz von OnlineShop erstellen möchte, könnte ich dies tun, indem ich eine Konstante erstelle, beispielsweise mit dem Titel "default". Diese erzeugt bei Erstellung ein neues Objekt vom Typ "OnlineShop". Bei diesem Singleton-Muster empfiehlt es sich üblicherweise, das Wort "lazy" vor die Konstante zu setzen. Damit verhindert man, dass auch bspw. innerhalb von Testcases solche Objekte initialisiert werden. In dem Fall werden sie also nur dann initialisiert, wenn sie tatsächlich verwendet werden. Die Nutzung dieser Object-Klasse ist für mich relativ intransparent. Das bedeutet, ich kann lediglich eine Referenz auf OnlineShop verwenden, und bekomme hier nun automatisch "default". "default" ist also nun eine Instanz des OnlineShop, und ich kann hier einen Kunden hinzufügen. Außerdem eignen sich Objekte, um Konstanten zu definieren. Beispielsweise könnte ich meinem OnlineShop nun einen Namen geben. Dieser gilt allgegenwärtig. Das heißt, ich deklariere ihn auf dem "object". Beispielsweise durch die Notation "private val SHOP_NAME=ELEKTRO-MARKT". Selbstverständlich soll der Name nun verfügbar sein, auf einer Methode der Klasse "OnlineShop". Diese nenne ich also nun "getName", und um nun auf den privaten Konstantenwert "SHOP_NAME" zuzugreifen, verwende ich die Notation "OnlineShop.SHOP_NAME". Bedingt dadurch, dass die beiden Klassen bzw. das "object" und die Klasse den gleichen Namen tragen kann die Klasse auf private Felder von OnlineShop zurückgreifen. Wie bei vielen Dingen in Scala ist es auch möglich, ein "object" unterhalb einer Klasse zu deklarieren. Beispielsweise durch "private object" und mit der Bezeichnung "Constants" könnte ich nun auch hier den Shopnamen deklarieren. In dem Fall wieder mit "ELEKTRO-MARKT". Der Zugriff ist nun ähnlich, nenne meine Methode "getName2", und der Zugriff hier ist über "Constants.SHOP_NAME". An der Stelle sei erwähnt, dass das "object" unterhalb von OnlineShop nicht so statisch ist wie das "object OnlineShop" selbst. Das bedeutet, dass ich innerhalb dieses "objects" nun auch Berechnungen machen könnte, die auf dem Inhalt der Klasse "OnlineShop" basieren. Zum Beispiel könnte ich mir die Länge der aktuellen Kundenzahlen in einer Variable speichern. Damit sollte klar sein, dass hier mit jeder Instanz eines OnlineShops dieses "object" auch neu erzeugt wird. Für Konstanten in Form von Strings spielt das im Regelfall keine Rolle, allerdings sollte man sich bewusst sein, dass die statische Natur eines "objects" innerhalb einer Klasse nicht die gleiche ist wie eines "objects", das außerhalb auf Package-Ebene steht. Ein weitere Anwendungsfall für "objects" sind Factory-Methoden. Beispielsweise habe ich hier die Klasse "Customer". Ich definiere also auch hier ein passendes "object" mit der Bezeichnung "Customer". Factory-Methoden werden in Scala üblicherweisse mit der Bezeichnung "apply" erstellt. IntelliJ IDEA ist dementsprechend schlau und erkennt, dass mein Customer also zwei Argumente nimmt, "firstname" und "lastname" und erzeugt mir automatisch die passende "apply"-Methode. An der Stelle könnte ich selbstverständlich mehrere "apply"-Methoden erstellen, mit unterschiedlichen Parametrisierungen. Bedingt durch die Benennung "apply" und dem "object Customer", kann ich nun eine besondere Notation innerhalb meiner Applikation verwenden. Ähnlich wie bei "case classes" benötige ich nun kein "new"-Keyword mehr, sondern kann Customer anhand seiner zwei Argumente erzeugen, die in der "apply"-Methode stehen. Das bedeutet an der Stelle nicht, dass Customer nun eine "case class" ist, sondern lediglich, dass ich diese kompakte Notation verwenden kann. Üblicherweise stellen Objekte keinen Typ dar, deshalb kann man sie nicht ähnlich verwenden wie Klassen, das bedeutet, dass man bspw., wenn man eine Liste erzeugen möchte, eine Objektklasse anders behandeln muss. Wenn ich also bspw. eine Liste erzeuge, kann ich das im Regelfall für einen Customer dadurch tun, dass ich seinen Typ hier innerhalb der eckigen Klammern angebe. Für das "object Application", das nun keine normale Klasse mit sich führt, kann ich das nicht so einfach, allerdings gibt es hierfür nur eine bestimmte Notation. Um den Typ der Klasse Application im Hintergrund zu bekommen, verwendet man "Application.type". Dies ist dann respektive auch für alle anderen Objekte möglich. Objekte sind also in Scala eine besondere Notation, um statisch erzeugte Objekte zu markieren. Alle Werte, die sich innerhalb eines solchen statisch erzeugten Objekts befinden, werden bei Initialisierung der Applikation bereits befüllt. Das bedeutet, Klassen können hier bspw. tatsächlich statische Werte ablegen, dabei werden Objekte oft als Companion Object verwendet. Ein solches Objekt trägt immer den selben Titel wie die passende Klasse, und unter Umständen, wie im Bespiel Customer, kann ein solches Objekt dann auch als Factory fungieren. Anders als üblicherweise empfohlen, kann man solche Objekte auch innerhalb der selben Scala-Datei deklarieren, damit auch der Zusammenhang zur entsprechenden Klasse erkennbar ist.

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!