Dokumentation zum Parameterkonzept von ControlElement
=====================================================

Parameter im Zusammenhang mit dem ControlElement sind eben Einstellungen für die Funktion, z.B.
bei "Gehen" die Anzahl der Schritte und die Geschwindigkeit. Grundsätzlich werden alle Parameter,
egal welchen Datentyp sie in Wirklichkeit haben, als String gespeichert. Das hat folgende Gründe:

 - Übertragen wird gemäß dem Übertragungsprotokoll sowieso nur ein ASCII-String, daher werden
   Integer sowieso als String benötigt und nicht binär übertragen.
 - Die Parameter sind durch Klassen-Instanzen realisiert, auch hier gibt es Vererbung, deswegen
   muss der Datentyp in dem der Wert gespeichert wird bei allen Arten/Typen von Parametern
   gleich sein.
 - Auch die Eingabe der Werte ist durch dieses System bei jedem Typ von Parameter gleich: es
   wird immer ein String angegeben.

Jetzt aber weiter von Anfang an:

Es gibt die Grundklasse Parameter, von der alle anderen Parameter mit speziellen Datentypen abge-
leitet sind. Parameter hat die Felder key, name, description, value - alle vier Strings, die im
Konstruktor gesetzt werden. Dazu kommen Getter und ein Setter für value, der Letzte ist aber nur
im selben Package verfügbar. Das hat einen wichtigen Grund: Wenn man den Wert des Params direkt
ändern könnte (public setValue()), würde das Steuerelement nichts mitbekommen und könnte seine
Listener nicht informieren.

Parameter kann also noch alle beliebigen Strings als Wert annehmen.
Parameter enthält aber zusätzlich eine Methode public boolean checkInput(String value), die in
Subclasses überschrieben werden kann/soll. checkInput() gibt true zurück, wenn das Argument
gültig ist und ist bereits in der Klasse Parameter in public boolean setValue(String value)
eingebaut! setValue() setzt also den Wert nur, wenn er gültig ist und gibt ansonsten selbst
auch false zurück.

Um jetzt eben speziell Integer, Float oder andere Datentypen zu ermöglichen, wird in den Subclasses
die Methode checkInput() überschrieben, so dass sie nur true zurückgibt, wenn der Wert gültig ist,
also z.B. bei IntegerParameter der String-Wert ohne Fehler in einen Integer umgerechnet werden kann.

Auf diese Weise lassen sich Parameter für beliebige Datentypen implementieren, auch etwas wie
enums oder structs/records, bei denen die Felder mit irgendeinem Trennzeichen getrennt werden...