Chaque chronologie CER contient des propriétés importantes que vous devez connaître avant d'utiliser des chronologies dans vos jeux de règles, tests de règle CER et tout code client de CER :
- chaque chronologie CER est non modifiable (comme tous les types de données utilisés dans CER) ;
- chaque référence à une chronologie est paramétrée avec le type de valeur contenu dans la chronologie. Il peut s'agir de valeurs primitives telles que Chaîne, Date, Nombre, Booléen, etc., ou d'un type arbitrairement complexe tel qu'une classe de règles ou un autre type paramétré comme une Liste. Comme pour les autres types paramétrés dans CER, le paramètre lui-même doit être un objet non modifiable ;
- chaque chronologie CER s'étend à l'infini dans le passé et dans le futur 1. En d'autres termes, chaque chronologie CER a une valeur à n'importe quelle date, quelle que soit sa localisation dans le passé ou dans l'avenir ;
- lorsqu'une chronologie CER est créée, celle-ci est divisée en un ensemble d'intervalles, qui comportent chacun une valeur constante liée à une période comprise dans la chronologie. Les intervalles contigus présentent toujours des valeurs différentes 2 Dans le cas contraire, elles sont fusionnées en un seul intervalle. Chaque chronologie CER s'étend indéfiniment loin dans le passé et le futur ;
Il existe un certain nombre de conséquences liées à ces propriétés :
- il n'est pas possible de laisser un vide au milieu d'une chronologie : tous les intervalles d'une chronologie doivent être contigus ;
- il n'est pas possible de démarrer une chronologie à une date particulière ; dans certains cas, vous devez choisir une valeur par défaut pertinente. Par exemple, si vous créez une Timeline<Number> de revenus issus d'un emploi, ces revenus doivent être égaux à 0 à toutes les dates précédant la date de début de l'emploi ;
- il n'est pas possible de terminer une chronologie par une date particulière : la dernière valeur de la chronologie s'applique jusqu'à nouvel ordre, c'est-à-dire arbitrairement loin dans le futur ; dans certaines circonstances, vous devez choisir une valeur par défaut pertinente. Par exemple, si vous créez une Timeline<Number> de revenus issus d'un emploi, si la date de fin de cet emploi est connue, les revenus doivent être égaux à 0 à toutes les dates postérieures à la fin de l'emploi ; dans le cas contraire, s'il n'existe aucune date de fin connue pour cet emploi, les derniers revenus doivent s'appliquer jusqu'à nouvel ordre ;
- toute tentative de création d'une chronologie qui ne comporte de valeur pour aucune date échoue. En particulier, chaque chronologie doit avoir une valeur s'appliquant à partir du début de la durée, représentée par une date de début null ;
- chaque chronologie peut contenir un nombre limité de changements de valeurs. Cela constitue une limite pour les chronologies représentant des valeurs qui changent un nombre de fois arbitraire. Par exemple, vous pouvez créer une Timeline<Number> représentant l'âge d'une personne, contenant la valeur 0 jusqu'à son premier anniversaire, la valeur 1 jusqu'à son deuxième anniversaire, et ainsi de suite. Pour les personnes encore en vie, il n'est pas possible de prédire le nombre d'anniversaires à venir ; c'est pourquoi une limite pratique (par exemple, 200) doit être imposée. Dans la pratique, cette limitation ne doit pas présenter de difficultés.
2 Les valeurs identiques/différentes sont détectées par la sémantique Java
Object.equals(...). Tous les types utilisés en tant que type paramétré de chronologie doivent avoir des implémentations pertinentes des valeurs
Object.equals(...) et
Object.hashCode().