Jede CER-Zeitlinie besitzt einige wichtige Eigenschaften, die Sie kennen sollten, bevor Sie in Ihren CER-Regelwerken, Regeltests und Client-Code von CER mit Zeitlinien arbeiten:
- Jede CER-Zeitlinie ist (wie alle in CER verwendeten Datentypen) unveränderlich.
- Jeder Verweis auf eine Zeitlinie ist mit dem Typ des in der Zeitlinie enthaltenen Wertes parametrisiert. Der Typ kann ein primitiver Typ wie "String", "Date", "Number", "Boolean" usw. oder ein beliebiger komplexer Typ wie eine Regelklasse oder ein anderer parametrisierter Typ (z. B. eine Liste) sein. Auch der Parameter selbst sollte, wie bei anderen parametrisierten Typen in CER, ein unveränderliches Objekt sein.
- Jede CER-Zeitlinie erstreckt sich unendlich weit in die Vergangenheit und unendlich weit in die Zukunft.1 Anders ausgedrückt enthält jede CER-Zeitlinie für jedes beliebige Datum einen Wert (unabhängig davon, wie weit das Datum möglicherweise in der Vergangenheit oder in der Zukunft liegt).
- Wenn eine CER-Zeitlinie erstellt wird, wird die Zeitlinie in eine Reihe von Intervallen aufgeteilt, bei der jedes Intervall einen konstanten Wert für einen Zeitraum innerhalb der Zeitlinie enthält. Aufeinander folgende Intervalle besitzen immer unterschiedliche2Werte, da sie andernfalls in einem einzigen Intervall zusammengeführt werden würden. Jede CER-Zeitlinie erstreckt sich unendlich weit in die Vergangenheit und in die Zukunft.
Diese Eigenschaften haben eine Reihe von Konsequenzen:
- Innerhalb einer Zeitlinie sind keine "Lücken" möglich, denn alle Intervalle in einer Zeitlinie folgen kontinuierlich aufeinander.
- Es besteht keine Möglichkeit, dass eine Zeitlinie an einem bestimmten Datum beginnt. Unter bestimmten Umständen muss ein sensibler Standardwert ausgewählt werden. Wenn beispielsweise eine Zeitlinie des Typs "Timeline<Number>" für das Einkommen aus einer Beschäftigung vorhanden ist, sollte dieses Einkommen für alle Datumsangaben vor dem Startdatum der Beschäftigung 0 sein.
- Es besteht keine Möglichkeit, dass eine Zeitlinie an einem bestimmten Datum endet. Der letzte Wert in einer Zeitlinie gilt immer "bis zu einer anderslautenden Mitteilung", also beliebig weit in die Zukunft hinein. Unter bestimmten Umständen muss ein sensibler Standardwert ausgewählt werden. Wenn beispielsweise eine Zeitlinie des Typs "Timeline<Number>" für das Einkommen aus einer Beschäftigung vorhanden ist, sollte bei einem bekannten Enddatum für diese Beschäftigung das Einkommen für alle Datumsangaben nach der Beendigung der Beschäftigung 0 sein. Ist kein Enddatum für die Beschäftigung bekannt, gilt andernfalls das letzte Einkommen bis zu einer anderslautenden Mitteilung.
- Jeder Versuch, eine Zeitlinie zu erstellen, die nicht für jedes Datum einen Wert enthält, schlägt fehl. Insbesondere muss jede Zeitlinie einen Wert enthalten, der ab dem Startzeitpunkt (angegeben durch das Startdatum Null) gilt.
- Jede Zeitlinie kann eine endliche Anzahl von Wertänderungen enthalten. Dies stellt eine Einschränkung für Zeitlinien dar, mit denen Werte dargestellt werden, die sich beliebig oft ändern. Beispiel: Mit einer Zeitlinie des Typs "Timeline<Number>" wird das Alter einer Person dargestellt. Sie enthält den Wert 0 bis zum ersten Geburtstag der Person, den Wert 1 bis zu ihrem zweiten Geburtstag usw. Bei noch lebenden Personen kann nicht vorausgesagt werden, wie viele Geburtstage noch erfolgen werden. Aus diesem Grund muss eine praktikable Begrenzung (z. B. 200) vorgenommen werden. Diese Einschränkung führt jedoch in der Praxis für gewöhnlich nicht zu Problemen.
1 Bitte beachten Sie, dass jede Zeitlinie zwar einen unbegrenzten Zeitraum abdeckt, jedoch nur eine endliche Zahl von Datumsangaben enthalten kann, an denen sich ihre Werte ändern.
2 Identische/unterschiedliche Werte werden durch die Semantik der Java-Methode
Object.equals(...) erkannt. Alle als parametrisierter Typ für eine Zeitlinie verwendeten Typen müssen sensible Implementierungen von
Object.equals(...) und
Object.hashCode() haben.