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. 
        
        
         
        
        
            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.
        
        
         
        
        
            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
 
        
        
            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
 
        
        
            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)
 
        
        
            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
 
        
        
            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
 
        
        
            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
 
        
        
            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
 
        
        
            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
 
        