La protection en programmation objet

Comme nous l'avons vu, un objet a des attributs (une ampoule a un attribut état qui est allumé ou éteind.).

Imaginons un objet température (qui mémorise une température).
On veut pouvoir utiliser la température en dégrés Celcius (°C) et en degrés Kelvin (°K).

Pour passer des degrés Celcius aux degrés Kelvin, on ajoute 273.

L'objet température aura donc 2 attributs : TempC et TempK:

classe Température:
  attributs: TempC
             TempK
La classe Température et ses attributs

 

Maintenant, on créé un objet X de type Température:

objet X de type Température:
  attributs: TempC = 21
             TempK = 294
Un objet X avec ses attributs

Pour connaître la valeur de la température X en degrés Kelvin, on écrit X.TempC, ce qui donne 21.

Si on veut modifier la température, on peut mettre 33 dans TempC en tapant X.TempC=33.

Mais là on a un problème : la température en °K (TempK) ne correspond plus !

objet X de type Température:
  attributs: TempC = 33
             TempK = 294
Il y a une erreur : TempK ne correspond plus à TempC.

Notre objet X n'est plus dans un état correct : il ne fait plus la bonne correspondance entre °C et °K !
Il faut empêcher n'importe qui d'aller modifier TempC et TempK pour ne plus avoir ce problème.

Les langages objets sont capable de protéger certaines données contre des modifications intempestives:

classe Température:
  attributs: private TempC
             private TempK
La classe Température et ses attributs

Le mot "private" signifie que c'est une donnée privée : seul l'objet Température lui-même peut aller modifier ces données. Ainsi, il est maintenant interdit d'écrire X.TempC=21.

On va écrire une méthode dans la classe Température qui permettra de modifier la température:

classe Température:
  attributs: private TempC
             private TempK
  méthodes:
    réglerTempC(n):
           TempC = n
           TempK = TempC + 273

    lireTempK:
           renvoyer TempK
La classe Température avec ses attributs et ses méthodes

Maintenant, pour modifier la température, on fera X.réglerTempC(33). On est sûr que l'attribut TempK correspondra toujours bien à TempC.

On peut lire TempK en faisant X.lireTempK.

On peut protéger ainsi tous les attributs que l'on veut ! Tous les attributs qui ne sont pas indiqués comme "private" sont considérés comme publiques ("public") et tout le monde peut aller les modifier.

Pour ceux qui veulent en savoir plus : Il est même possible de déclarer "private" des méthodes: ce sont alors des méthodes internes à l'objet que seul l'objet lui-même a le droit d'utiliser.

"private" permet de protéger un objet pour éviter qu'il ne soit modifié n'importe comment.

 

Pour poursuivre:

Le contenu de cette page est placé sous les termes de la licence suivante : CC Attribution-Noncommercial 4.0 International
h t t p : / / s e b s a u v a g e . n e t