Nach der funktionalen Abstraktion ist die Objektorientierung der nächste revolutionäre Ansatz: neben Daten (Klassen- und Instanzvariablen) werden Methoden in einer Klasse gekapselt. Ganz im Sinne des Prinzips der Lokalität erfolgt nun die Modellierung von Methoden und Daten an einem Ort – nämlich innerhalb einer Klasse. Insgesamt empfiehlt sich beim modellieren einer Klasse die folgenden Schritte:
- Überlegen Sie, welche Instanzvariablen/Klassenvariablen die Klasse unbedingt braucht. Motiviert werden die Instanzvariablen von der Anwendungsidee. Wofür ist die Klasse gut? Zum Beispiel braucht ein Klasse Kreis i.a.R unbedingt die Instanzvariabeln radius und kreisflaeche. (Darüber hinaus können natürlich auch „Hilfs-Instanzvariablen“ oder auch „Hilfs-Klassenvariablen“ zweckmäßig sein.)
- Überlegen Sie, von welchem Datentyp diese Instanzvariablen sein müssen/sein sollen. Dies ist in der Regel eine Frage der Zweckmäßigkeit. In unseren Voruebung_8_1 und Voruebung_8_2 tut es der Datentyp double für radius und kreisflaeche.
- Neben dem Datentyp muss noch festgelegt werden, ob die betreffende Instanzvariable public, private, protected oder friendly (In der Regel wird man von private ausgehen und den Zugriff auf die Instanzvariable nur mit den geeigneten Methoden zulassen.)
- Für die Instanzvarialblen brauchen Sie in aller Regel getter()– und setter()–Methoden. Diese Methoden sind gewissermaßen technisch bedingt: sie sind notwendig, um die Werte der privaten Attribute (Instanzvariablen) dem Aufrufer zu geben, bzw. den privaten Instanzvariablen Werte zuzuweisen (Jargon: „die Instanzvariablen zu setzen“). Die getter- und setter-Methoden sind public. Setter sind meist vom Typ void. Getter haben i.d.R. einen konkreten Returnwert-Typ, aber nicht zwangsweise.
- Daneben gibt es mit Sicherheit Methoden, die durch das Lastenheft/die Spezifikation vorgegeben Dies sind in aller Regel Methoden, die gebraucht werden, weil die geplante Anwendung diese Funktionalität benötigt. Diese Methoden sind ebenfalls public.
- Der erfahrenen Programmierer oder Designer wird darüber hinaus noch andere Methoden (Hilfsmethoden) einführen: diese Methoden sollen in aller Regel die Programmierung, bzw. die Verwendung der Klasse vereinfachen und sind a.R nicht public, sondern private, da sie nur klassenintern benutzt werden.
- In gewisser Weise gehören zu diesen Hilfsmethoden die Konstruktoren: Sie kapseln durch die funktionale Abstraktion die Komplexität der Objektgenerierung und die damit verbundene Inintialisierung von Instanzvariablen. Konstruktoren sind public. (Sind Beispiele für Hilfsmethoden für andere…).
- Jetzt bleiben uns noch die Destruktoren. (Wann Destruktoren notwendig sind, können Sie an anderer Stelle im Skript nachlesen.) In den oben erwähnten Vorübungen gibt’s noch keine Destruktoren.
- Abschliessend bleibt noch zu bemerken, dass bei all diesen Modellierungsüberlegungen daran zu denken ist, dass mit Hilfe der Vererbung die Mächtigkeit von Klassen erweitert werden kann. Also: es muss nicht gleich alles, was denkbar ist, in eine Klasse gepackt werden. Auf die Vererbung kommen wir in Kürze.
- Überlegen Sie, ob für die soeben gefundene Klasse nicht ein Klassen-System aus Basisklasse und Ableitungen sinnvoller ist. Fall ja, starten Sie wieder mit 1. und kümmern sich um die Vererbung (Wird auch “Ableitung” genannt.)
Im Sinne eines Gamification-Ansatzes rekonstruieren Sie die Vorübungen aus Youtube und übertragen die 10 Schritt von oben gedanklich auf Ihre Aktivitäten.