La gestion des états en informatique

Il y a plusieurs manières de représenter des états selon le cas, nous aborderons les solutions intéressantes répondant à des besoins d’exclusivité.

Le booléen

C’est probablement le cas le plus simple, il définit 2 états pour une propriété ainsi cette propriété ne peut être que vraie ou fausse.

Exemple :
Un article sur un site internet peut être publié ou non à l’aide d’un simple booléen published, si vrai, le site affiche l’article au public sinon, il reste caché et seul un administrateur peut le voir pour l’éditer.

Le drapeau (flag)

C’est un outil intéressant qui permet de combiner plusieurs propriétés en une seule variable, elles peuvent alors être vérifiées indépendamment ou ensembles selon le besoin. On utilise pour cela un entier et cela demande une certaine maîtrise des opérateurs binaires pour pouvoir être utilisé correctement, 0 doit toujours être l’absence complète, vous devez former votre approche autour de ce principe.

Vous pouvez créer des combinaison avec l’opérateur | qui autorise ce bit ou ce bit et permet ainsi de définir que ces 2 bits peuvent valider votre vérification, selon votre choix ils sont inclusifs ou non, généralement on les utilise pour obliger ces 2 propriétés à être présentes.

Pour valider une propriété, il suffit de vérifier si elle est présente dans votre drapeau, il existe une formule pour cela: (flags & reference) == reference) avec flags l’ensemble des drapeaux à comparer à un drapeau reference. Cette formule vérifie un drapeau qu’il soit un simple bit ou une combinaison de drapeaux, on simplifie généralement son usage en en faisant une fonction.

Exemple :
À l’aide des drapeaux, on peut en arriver à gérer les permissions d’un utilisateur sur un article, s’il a les droits de lecture, d’écriture et de suppression. Pour cela on va définir 3 entiers avec un binaire glissant, on aura ainsi:

  • PERMISSION_READ = 1 (001 en binaire)
  • PERMISSION_WRITE = 2 (010 en binaire)
  • PERMISSION_DELETE = 4 (100 en binaire)

Vous voyez ainsi que la position du 1 dans l’entier doit toujours être différente car sa présence indique explicitement que cette permission y est et son absence (par 0) que cette permission n’y est pas. Concrètement, la valeur décimale ne nous intéresse pas, c’est la position du bit 1 qui est pertinente.

  • Pour combiner les permissions: PERMISSION_READ | PERMISSION_WRITE
  • Pour vérifier le droit de lecture de l’utilisateur: (user.permissions & PERMISSION_READ) == PERMISSION_READ)
  • Pour aller plus loin dans la vérification:

La machine a états

Pour une même propriété, la machine à état ou automate fini, permet d’avoir différents états ne pouvant se cumuler et s’excluant mutuellement.
Chaque état défini vers quels autres états il peut passer et si nécessaire sous quelles conditions.
Suivant les langages, il peut y avoir de très nombreuses manières de représenter un tel statut, la plus simple est probablement un tableau définissant pour chaque état vers quels autres états il peut aller.

Exemple :
Un article peut avoir différents statuts que nous allons définir précisément pour les besoins de cet exemple.
Cet article peut être en brouillon, publié, rejeté ou archivé et il ne peut être que dans un seul de ces états à la fois. Chaque état doit alors respecté le schéma suivant.

Status d'un article

 

Florent

Je suis un développeur web à mon compte et je m'intéresse à beaucoup de choses en informatique...

Aucun commentaire

Commenter