JavaScript - OOP mit JavaScript
1. Vorwort
Ein wichtiger Hinweis
Mittlerweile bin ich gerade dabei, dieses Tutorial komplett zu überarbeiten, da es doch etliche Schwächen hat. Das wird allerdings noch ein paar Wochen in Anspruch nehmen. Seht daher die aktuelle Fassung erst mal nur als ersten Einstieg an, der sich besonders mit der Datenkapselung beschäftigt. Auch wenn das so nicht ganz korrekt ist. Übt euch also ein wenig in Geduld.
2. Für den ersten Einstieg
Wer noch keine Ahnung von OOP hat, sollte sich vielleicht mal meine mittlerweile recht bekannte Einführung in OOP mit PHP5 ansehen. Allerdings weise ich euch direkt darauf hin, dass das dort Gesagte hier nur sehr begrenzte Gültigkeit hat. Trotzdem kann es nicht schaden, da ich die grundsätzlichen Begriff hier nicht noch mal erkläre.
3. Der feine Unterschied
Wer schon mit dem OOP-Konzept anderer Sprachen wie Java, C++ oder PHP5 in Berührung gekommen ist, wird beim Einstieg zu diesem Thema in JavaScript erst einmal gucken wie eine Kuh, wenn's donnert. Es gibt keine echten sondern nur Pseude-Klassen, Datenkapselung lässt sich nur über Umwege erreichen und die Vererbung läuft über so genannte Prototypen.
Eben wegen dieser zum Teil großen Unterschiede gibt es seit Jahren einen fürchterlichen Streit darüber, ob JavaScript nun objektorientiert oder nur objektbasiert ist. Ich persönlich tendiere eher zu Letzterem, da es im Vergleich zu anderen Sprachen etliche Dinge nicht gibt. Auch ist die Art der Implementierung doch reichlich gewöhnungsbedürftig und wirkt hier und da auch recht krude.
4. Das Prinzip
JavaScript gehört zu den Prototypenbasierten Sprachen. Dabei wird bewusst auf eine starre Modellierung mittels Klassen verzichtet, um eine größere Flexibilität zu erreichen. Das geht dann leider zu Lasten der Wartbarkeit des Quellcodes, da die einzelnen Programmierer sehr viele Freiheiten haben und es leicht zu Unstimmigkeiten kommen kann. Ich möchte jetzt keine Diskussion über die Vor- und Nachteile anfangen. Daher weise ich euch nur darauf hin, dass es in JavaScript viele Dinge nicht gibt, die in anderen Sprachen gang und gäbe sind. Das erklärt wohl auch, warum der Abschnitt OOP bei vielen JavaScript-Wälzern so klein ist. Anbei eine kurze und zugegebenermaßen unvollständige Übersicht:
| Konzept | Klassisches OOP-Modell | OOP-Modell JavaScript |
|---|---|---|
| Entwurfsmuster | Klasse | "Konstruktorfunktion/Pseudoklasse" |
| Objekt wird erzeugt aus | Klasse | "Konstruktorfunktion/Pseudoklasse" |
| Objekt benötigt Klasse | Ja | Nein |
| Vererbung | Über Klassen | Über Prototypen |
| Methoden | Ja | Ja |
| Eigenschaften | Ja | Ja |
| Sichtbarkeitsstufen für Methoden und Eigenschaften |
private protected public |
private public (mit Einschränkungen) |
| Statische, finale, abstrakte Klassen/Methoden/Eigenschaften Interfaces, etc... |
Ja | Nein |
5. Ein wichtiger Hinweis
Bei den nun folgenden Abschnitten solltet ihr viel von dem vergessen, was ihr über Objektorientierte Programmierung wisst. Das ist eher hinderlich und führt euch oft genug in eine Sackgasse. So wie mich beim Schreiben dieses Tutorials, das es mittlerweile in der vierten überarbeiteten Auflage gibt.