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.

OOP mit JavaScript Grundkurs

Theoretische Grundlagen des Prototyping

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
JavaScript verfügt in der aktuellen Version nicht über die Möglichkeit zur Deklaration von Klassen. Stattdessen verwendet man Prototypen. Aber mit Prototypen und Konstruktoren kann man (fast) alles machen, was in anderen OOP-Sprachen mittels Klassen umgesetzt wird. Prototypenbasierte Programmierung wird auch klassenlose Objektorientierung genannt. Objekte werden durch Klonen bereits existierender Objekte erzeugt.
07:23

Transkript

In diesem Video wollen wir uns auf einer theoretischen Ebene die Grundlagen der objektorientierten Programmierung bei JavaScript etwas mehr verdeutlichen, und zwar auf Basis von Wikipedia, wo die Begriffe, die eine Rolle spielen, ganz gut erklärt werden. Es ist relativ bekannt, dass JavaScript sogenannte "Prototypen" benutzt. Die prototypenbasierte Programmierung verzichtet ganz auf Klassen und wird daher auch als "klassenlose Programmierung" bezeichnet. Im Grunde ist dabei ein Prototyp das, was eine Klasse ist. Es wird ein Objekt aus einer Vorlage erzeugt, nur werden Objekte nicht durch die Instanziierung einer Klasse, sondern durch das Klonen bereits vorhandener Objekte erzeugt,. Das heißt, wenn wir object, image oder date betrachten, was ja die "Standardklassen" von JavaScript sind, dann sind das im Grunde Objekte und diese werden einfach geklont. Wenn Sie also einen Konstruktor hinschreiben, das heißt, eine Funktion, wo Sie mit "this." irgendwelche Eigenschaften oder Methoden implementieren, dann klonen Sie object und fügen gegebenenfalls weitere Eigenschaften hinzu. oder auch ein anderes Objekt, sofern Sie es als Basis nehmen. Wichtig: Alle bestehende Objekte können Prototypen bereits vorhandener Objekte sein. Und das heißt, wenn Sie ein Objekt so deklarieren, auch über eine Konstruktormethode oder JSON-Notation oder was auch immer Sie nehmen, um ein Objekt zu erzeugen, dann kann das wiederum eine Vorlage für ein weiteres Objekt sein worüber man wieder so etwas wie Vererbung implementieren kann. Scrollen wir ein wenig nach unten. Auch ganz interessant ist die Verbindung zwischen den Objekten, die geklont wurden. Man kann die so implementieren, dass es keine Verbindung mehr gibt. Man kann aber auch über gewisse Sprachkonstrukte eine Verbindung aufbauen, beispielsweise wie in JavaScript. Es gibt ein spezielles Attribut, das nennt sich prototype. Darüber wird die Verbindung zwischen dem Klon und seinem Prototyp, sprich der "Superklasse" zur Verfügung gestellt. Deshalb werden sich auch nachträgliche Veränderungen am Prototyp unmittelbar auf die geklonten Objekte auswirken. Objekte können auch als assoziative Arrays verstanden werden. Das ist ja etwas, das wir von JavaScript genau so kennen. So ein Klonen kann beispielsweise mit einer create-Methode durchgeführt werden, was ab ECMAScript 5 zur Verfügung steht. Aber auch all die anderen Techniken zum Erzeugen eines Objektes sind Klonvorgänge. Nun ist Ihnen die lose Typisierung von JavaScript ja bekannt. Das heißt, Sie können sowohl den Datentyp einer Variablen ändern als auch bestimmte Dinge erweitern, sprich Sie können jederzeit ein Objekt erweitern, indem Sie ein neues Attribut hinzufügen und einen Wert zuweisen. Nun taucht ein Begriff auf, der sich "Duck-Typing" nennt. Duck-Typing bedeutet, dass "der Typ eines Objektes nicht durch eine Klasse bestimmt wird, sondern durch das Vorhandensein bestimmter Methoden oder Attribute." Das heißt, wenn Sie beim Objekt eine Eigenschaft breite und form deklarieren, heißt das, dass darüber indirekt der Typ festgelegt wird, nicht dadurch, dass irgendeine Klasse existiert oder gegebenenfalls irgendeine andere Festlegung. Es ist eine implizite Festlegung des Typs. Da wir ja in JavaScript eben klassenlos arbeiten, zumindest in der aktuellen Version von JavaScript, ist dieses Duck-Typing der einzig sinnvolle Mechanismus, um überhaupt den Typ eines Objektes festzulegen beziehungsweise zu bestimmen. Der Begriff geht auf den sogenannten "Enten-Test" zurück, der ganz nett hier in Wikipedia beschrieben ist. Ich empfehle, es einmal durchzulesen, da es ganz unterhaltsam ist. Man versucht aufgrund der sichtbaren Verhaltensweisen und Eigenschaften ein bestimmtes Phänomen zu verstehen, zu analysieren und damit auch zu standardisieren. Nun gibt es noch einen weiteren Begriff, der sehr wichtig ist und Verhaltensweisen von JavaScript meiner Meinung nach sehr gut erklärt. Das ist der Begriff des sogenannten "Mixin". Allgemein wird damit ein zusammengehöriges Bündel bezeichnet, das zu einer Klasse hinzugefügt werden kann. Man kennt so etwas in der objektorientierten Programmierung, über Begriffe wie Aggregation oder Komposition. Im Grunde ist es etwas ähnliches. Nun haben wir im Sinne von JavaScript eben keine richtigen Klassen, zumindest in der aktuellen Version. Das haben wir ja in diesem Video bereits mehrfach besprochen. JavaScript benutzt aber trotzdem mixin-Technologie. Die sogenannte "generische Programmierung" kommt dabei zum Einsatz und das führt zu einem weiteren Begriff. Generische Programmierung bedeutet, auch wenn dieser Artikel hier sicher einer Überarbeitung bedarf, ist er trotzdem ganz hilfreich, sehr allgemein Definitionen von Funktionalität zu bevorzugen. Man hat zum Beispiel bei einer Methodendeklaration nicht eine einzelne Methode zu deklarieren, sondern eine Klasse oder Gruppe von Methoden, die sich beispielsweise im Typ unterscheiden können. Man legt also zum Beispiel den Rückgabetyp, Übergabetypen einer Methode oder Ähnliches nicht explizit fest. Man macht generische Typen, Templates oder auch Pattern mittels generischer Programmierung. Der entscheidende Satz ist hier: "Wesentlich bei der generischen Programmierung ist, dass die Algorithmen nicht für einen bestimmten Datentyp geschrieben werden, sondern nur bestimmte Anforderungen an die Typen stellen." Und da wir in JavaScript überhaupt keine Typen festlegen, haben wir selbstverständlich sozusagen vom Kern der Sprache eine generische Programmierung. Sie definieren eine Funktion und können beliebige Typen von Parametern übergeben. Dadurch entsteht ein polymorphes Verhalten und das ist eben auch Standard in JavaScript. Es bedarf überhaupt keiner zusätzlichen Syntax, wie in vielen anderen Sprachen, im Gegenteil, manchmal ist es sogar ein Problem, dass wir so freie Typen haben. Noch einmal kurz zurück zum mixin. In JavaScript wird mittels mixin-Technologie die Möglichkeit geschaffen, bestimmte Vererbungsvorgänge zu implementieren, beispielsweise Mehrfachvererbungen. Sie können in JavaScript auf verschiedene Arten Vererbung "simulieren" und eine davon nutzt auch diese mixin-Technologie. Was Sie in diesem Video gesehen haben, ist dass gewisse Verhaltensweisen in JavaScript, die scheinbar vom "Himmel fallen" oder auch sehr eigenartig sind, auf einem soliden theoretischen Fundament der Informatik stehen oder auf mehreren Konzepten, die auch in anderen Programmiersprachen zum Einsatz kommen.

OOP mit JavaScript Grundkurs

Sehen Sie, wie Sie mit JavaScript objektorientiert programmieren können.

3 Std. 8 min (35 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.03.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!