Was ich noch nicht ganz kapiere ist der Zusammenhang Field-Objekt mit FieldText-Objekt.
Wie ich das sehe:
Das Field-Objekt ist ein Auto.
Das FieldText-Objekt ist der Reifen vorne Links.
falsch.
das ist Vererbung.
Field ist ein Auto.
FieldText ist ein Sportwagen.
FieldRTF ist ein Kombi.
FieldNumbers ist ein Jeep.
Alle sind Autos und alle haben was gemeinsam. Aber bei speziellen Dingen unterscheiden sie sich.
Bei unseren Feldern wäre z.B. eine Gemeinsamkeit, dass alle eine Wert vor und einem nach dem Speichern haben können.
Das Spezielle ist, dass jede Feld-Art den Unterschied zwischen Vor- und Nachher anders "berechnet".
Was ich gesehen habe wird das Auto kursiv in den UML-Diagrammen dargestellt. Ich glaub ich kann dann auch das Auto-Objekt nicht direkt erzeugen. Ich fange beim Reifen an.
Wie sind denn hier die Zusammenhänge? Und: Warum ist das Auto "kursiv"? Warum mache ich nicht ein normales Auto-Objekt, welches dann auch Objekte wie Reifen vorne links und Fahrersitz enthält?
Auto ist kursiv, weil es das nicht wirklich gibt. Es gibt nur Jeeps, Cabrios, Kombis, Limousinen, etc.
Auto ist der Oberbegriff für alle.
Feld ist kursiv, weil es kein allgemeines Feld bei uns gibt (wir erinnern uns: kursiv bedeutet abstrakte Klasse, d.h. von dieser Klasse kann keine Instanz erzeugt werden, weil es die ja gar nicht geben kann.)
Ein schönes Beispiel aus "Head First Java" (frei übersetzt):
Es gibt eine Klasse "Tier"
Von dieser erben die Klassen "Canidae" und "Felidae".
Von "Canidae" erbt "Hund", "Wolf"
Von "Felidae" erbt "Katze", "Löwe"
Es macht Sinn, Objekte der Klasse "Hund", "Wolf", "Katze" und "Löwe" zu erstellen.
Aber was genau ist ein "Tier"-Objekt??
Welche Form hat es? Welche Frabe, Größe, Anzahl an Beinen...
Wenn du versuchst, ein "Tier"-Objekt zu erstellen, dann ist das wie ein verheerender Transporterunfall in StarTrek. So einer, wo bei Beam-Vorgang irgenwas schlimmes mit dem Puffer (der, in dem die Transportmuster sind) passiert.
Du brauchst aber trotzdem eine Klasse, die Gemeinsamkeiten vererben kann. Um zu vermeiden, dass Objekte einer Klasse erstellt werden, für die das keinen Sinn macht, machst du die Klasse abstrakt.
Zumindest in Java. In LotusScript gibt es keine abstrakten Klassen, ich tue aber so, als ob.