Objektorientierung
Die Objektorientierung ist ein extrem erfolgreiches Konzept bei der Programmierung. Um es allerdings vollumfänglich nutzen zu können, müssen die Grundideen verstanden werden. Es reicht nicht aus, einfach nur Klassen zu erzeugen - sie müssen bezüglich Vererbung, Kapselung und Polymorphie auch sinnvoll geschnitten werden. In dieser Videoreihe versuche ich genau diese Grundgedanken näher zu bringen. Ich konzentriere mich bei den Ausführungen auf Java. Die wesentlichen Gedanken gelten natürlich auch für andere objektorientierte Sprachen, wobei sich Java aufgrund seiner Stringenz und dem Verzicht auf "Sonderlocken" zugunsten der Codereduktion meines Erachtens am Besten dafür eignet, die Zusammenhänge zu erkennen.
Top
Wir beginnen mit der Überlegung, warum die rein prozedurale Programmierung oftmals nicht geeignet ist, die Welt abzubilden. Das Objekt, welches Funktionalität und Informationen kapselt soll hier Abhilfe schaffen. Darüber hinaus klären wir, was der Unterschied einer Klasse zu einem Objekt ist.
Top
Nun kommen die Zugriffsmodifikatoren ins Spiel. Hierbei muss entsprechend vorher gerklärt werden, was "Vererbung" oder besser "Erweiterung" bedeutet:
  • Eltern vs. Kindklasse
  • Vererbung/Erweiterung
  • Begriff "Klasse"
  • public
  • protected
  • private
Top
Die Konzepte der Polymorphie finden sich prinzipiell in allen Videos wieder. In diesem Video gehe ich aber nochmal auf die Grundidee ein und kläre die Begrifflichkeiten:
  • Vererbung von Eigenschaften und Methoden
  • Überschreiben
  • Überladen
Top
Zu diesem Zeitpunkt haben wir die wichtigsten Kenntnisse, um den gesamten Zusammenhang beurteilen zu können. Dafür wird ein größeres "Programm" vorgestellt, in dem wir die Mechanik hinter der Polymorphie verstehen lernen. Hierbei lege ich darauf Wert, den Unterschied zwischen einem Instanztyp (also der Klasse der tatsächlichen Instanz) und einem Variablentyp (also der Klasse, welche die Variable bestimmt) zu unterscheiden:
  • Unterschied prozeduraler vs. objektorientierter Ansatz
  • Getter/Setter
  • Instanztyp vs. Variablentyp
  • Überschreiben von Methoden
  • Erkennen, welche Methoden genutzt werden (Eltern vs. Kind)
Top
Den Konstruktoren kommt in der Objektorientierung eine besondere Bedeutung zu, da sie garantieren müssen, dass ein Objekt erzeugt und sinnvoll nutzbar ist. Hierbei gehen wir auf die Beziehung zwischen Eltern- und Kindkonstruktoren ein:
  • Aufgabe des Konstruktors
  • Standardkonstruktor
  • Überladung von Konstruktoren
  • Aufruf des Superkonstruktors
Top
Wir klären in diesem Video, warum es meist nicht sinnvoll ist, alle Variablen auf "public" zu setzen um sicht nicht mit Sichtbarkeiten beschäftigen zu müssen. Dies machen wir anhand von zwei Beispielen fest:
  • Modellierung von Abhängigkeiten zwischen einzelnen Variablen
  • Paralleler Zugriff auf Instanzvariablen
Top
Das bis jetzt aufgebaute Geometriebeispiel hat noch einen Nachteil - die leeren Methoden der Elternklassen. Dieses Manko beseitigen wir nun mit Hilfe des Schlüsselwortes "abstract":
  • Abstrakte Methoden
  • Abstrakte Klassen
Top
Das Interface löst uns das Problem der fehlenden Flexibilität aufgrund der Einschränkung, dass in Java nur eine Elternklasse existieren darf. Anhand eines Beispiels im Rahmen unserer Geometrieobjekte wird dies aufgezeigt:
  • Definition eines Interfaces
  • Implementierung eines Interfaces
  • Delegation der Implementierung an Kindklassen mittels "abstract"
  • Anonyme Klassen
Top
Exceptions sind nicht nur bei der objektorientierten Programmierung wichtig. Da sie in Java aber (zwangsweise) als Klassen ausgelegt sind, habe ich sie in diese Reihe mit eingefügt. Wir klären, warum wir überhaupt soetwas wie Exceptions benötigen und wie wir sie nutzen.
  • Stack
  • Erzeugen von Exceptions
  • Werfen von Exceptions
  • Auffangen von Exceptions
Top