enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques et
sous-caractéristiques qualité tels que décrits dans la norme ISO 9126 et
qu'on sait mesurer (métrologie du logiciel).
En appliquant au maximum ce qui est dit dans ce livre et en cherchant à
bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques et
sous-caractéristiques qualité tels que décrits dans la norme ISO 9126 et
qu'on sait mesurer (métrologie du logiciel).
En appliquant au maximum ce qui est dit dans ce livre et en cherchant à
bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques et
sous-caractéristiques qualité tels que décrits dans la norme ISO 9126 et
qu'on sait mesurer (métrologie du logiciel).
En appliquant au maximum ce qui est dit dans ce livre et en cherchant à
bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
In article <487145fa$0$900$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
Tu fais référence à quoi ? "the values can be generated for you" ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
Je pense que ce qu'il veut signifier est que tu peux écrire:
enum T {a, b, c};
enum T e= 3;
(3) le checking, un réel avantage ? meilleure sécurité ?
Ben, oui, ça me paraît une évidence, non ?
Tu fais référence à quoi ? "the values can be generated for you" ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
Je pense que ce qu'il veut signifier est que tu peux écrire:
enum T {a, b, c};
enum T e= 3;
(3) le checking, un réel avantage ? meilleure sécurité ?
Ben, oui, ça me paraît une évidence, non ?
Tu fais référence à quoi ? "the values can be generated for you" ?
(2) phrase très ambiguë. Je vais quand même avoir un problème si je mets
un flottant dans une variable de type enum toto, ça le compilateur il va
le voir.
Je pense que ce qu'il veut signifier est que tu peux écrire:
enum T {a, b, c};
enum T e= 3;
(3) le checking, un réel avantage ? meilleure sécurité ?
Ben, oui, ça me paraît une évidence, non ?
(1) the values can be generated for you ?
Ça c'est autre chose.
Quand tu écris enum Jour {LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI,
SAMEDI, DIMANCHE}, c'est le compilateur qui fait l'association :
LUNDI -> 0, MARDI -> 1, etc. alors qu'avec #define, c'est toi qui donne
la correspondance.
(1) the values can be generated for you ?
Ça c'est autre chose.
Quand tu écris enum Jour {LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI,
SAMEDI, DIMANCHE}, c'est le compilateur qui fait l'association :
LUNDI -> 0, MARDI -> 1, etc. alors qu'avec #define, c'est toi qui donne
la correspondance.
(1) the values can be generated for you ?
Ça c'est autre chose.
Quand tu écris enum Jour {LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI,
SAMEDI, DIMANCHE}, c'est le compilateur qui fait l'association :
LUNDI -> 0, MARDI -> 1, etc. alors qu'avec #define, c'est toi qui donne
la correspondance.
1) Oubli du "break"
On ne doit JAMAIS oublier le "break" (même sur "default" quand celui-ci
est à la fin du switch). Si un "case" n'a pas de break, on doit
documenter pourquoi, sauf dans les cas où on a écrit (factorisation de
case) :
case MACHIN :
case BIDULE :
faire_ceci();
2) Conversions
Je ne comprends pas ta remarque. S'il y a des conversions implicites de
type c'est que le code est mal écrit.
3) Même valeur
Et bien justement, ça permet de voir qu'il y a une erreur puisque ça ne
compile plus !
1) Oubli du "break"
On ne doit JAMAIS oublier le "break" (même sur "default" quand celui-ci
est à la fin du switch). Si un "case" n'a pas de break, on doit
documenter pourquoi, sauf dans les cas où on a écrit (factorisation de
case) :
case MACHIN :
case BIDULE :
faire_ceci();
2) Conversions
Je ne comprends pas ta remarque. S'il y a des conversions implicites de
type c'est que le code est mal écrit.
3) Même valeur
Et bien justement, ça permet de voir qu'il y a une erreur puisque ça ne
compile plus !
1) Oubli du "break"
On ne doit JAMAIS oublier le "break" (même sur "default" quand celui-ci
est à la fin du switch). Si un "case" n'a pas de break, on doit
documenter pourquoi, sauf dans les cas où on a écrit (factorisation de
case) :
case MACHIN :
case BIDULE :
faire_ceci();
2) Conversions
Je ne comprends pas ta remarque. S'il y a des conversions implicites de
type c'est que le code est mal écrit.
3) Même valeur
Et bien justement, ça permet de voir qu'il y a une erreur puisque ça ne
compile plus !
Wykaaa a écrit :enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Pourquoi ?
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Heu, oui.Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Il suffit qu'on lui ait enseigné. C'est pas difficile une fois qu'on
vous l'a expliqué.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques
et sous-caractéristiques qualité tels que décrits dans la norme ISO
9126 et qu'on sait mesurer (métrologie du logiciel).
Une norme qui mesure la beauté, quelle horreur !!!
En appliquant au maximum ce qui est dit dans ce livre et en cherchant
à bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
Alors, justement, regardons ce qui est dit sur les enum :
Il dit que
enum couleurs {bleu, blanc, rouge} a, b;
équivaut à déclarer
const int bleu=0, blanc =1, rouge =2;
int a,b;
Il ne recommande pas d'initialiser soi-même les constantes d'une
énumération.
Concernant les casts, il dit :
règle : "expliciter les conversions inévitables par des forçages de type"
et il donne ceci en exemple (page 215):
--------------------------------------
enum gamme_do {do, re, /* etc */} n1, n2;
int i;
i=(int)n1;
n1=(enum gamme_do)((int)n2-1);
--------------------------------------
Des réactions ?
Wykaaa a écrit :
enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Pourquoi ?
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Heu, oui.
Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Il suffit qu'on lui ait enseigné. C'est pas difficile une fois qu'on
vous l'a expliqué.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques
et sous-caractéristiques qualité tels que décrits dans la norme ISO
9126 et qu'on sait mesurer (métrologie du logiciel).
Une norme qui mesure la beauté, quelle horreur !!!
En appliquant au maximum ce qui est dit dans ce livre et en cherchant
à bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
Alors, justement, regardons ce qui est dit sur les enum :
Il dit que
enum couleurs {bleu, blanc, rouge} a, b;
équivaut à déclarer
const int bleu=0, blanc =1, rouge =2;
int a,b;
Il ne recommande pas d'initialiser soi-même les constantes d'une
énumération.
Concernant les casts, il dit :
règle : "expliciter les conversions inévitables par des forçages de type"
et il donne ceci en exemple (page 215):
--------------------------------------
enum gamme_do {do, re, /* etc */} n1, n2;
int i;
i=(int)n1;
n1=(enum gamme_do)((int)n2-1);
--------------------------------------
Des réactions ?
Wykaaa a écrit :enum {VRAI, FAUX};
Ceci est à bannir de toute façon !
Pourquoi ?
Tu voulais dire la grammaire sous forme de BNF (Backus-Naur Form) ?
Heu, oui.Ceci dit, j'estime que tout programmeur (quel que soit le langage dans
lequel il code) doit comprendre la notation BNF d'un langage de
programmation. Ça fait partie des connaissances de base de son métier.
Il suffit qu'on lui ait enseigné. C'est pas difficile une fois qu'on
vous l'a expliqué.
Ce n'est pas la concision qui fait du beau code.
Du beau code c'est du code facilement maintenable, testable,
réutilisable, facile à faire évoluer, etc.
Du beau code, c'est du code qui répond aux facteurs, caractéristiques
et sous-caractéristiques qualité tels que décrits dans la norme ISO
9126 et qu'on sait mesurer (métrologie du logiciel).
Une norme qui mesure la beauté, quelle horreur !!!
En appliquant au maximum ce qui est dit dans ce livre et en cherchant
à bien s'imprégner des exemples, on ne peut qu'écrire du meilleur code C
Alors, justement, regardons ce qui est dit sur les enum :
Il dit que
enum couleurs {bleu, blanc, rouge} a, b;
équivaut à déclarer
const int bleu=0, blanc =1, rouge =2;
int a,b;
Il ne recommande pas d'initialiser soi-même les constantes d'une
énumération.
Concernant les casts, il dit :
règle : "expliciter les conversions inévitables par des forçages de type"
et il donne ceci en exemple (page 215):
--------------------------------------
enum gamme_do {do, re, /* etc */} n1, n2;
int i;
i=(int)n1;
n1=(enum gamme_do)((int)n2-1);
--------------------------------------
Des réactions ?
In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
In article <487145fa$0$900$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
Marc Espie, le 07/07/2008 a écrit :In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
J'ai certainement en d'autres temps écrit la même chose. Il faut dire
que j'étais alors déçu en découvrant le switch du C après avoir pratiqué
celui de Pascal (Delphi). Puis j'ai mis de l'eau dans mon vin (pouah).
J'ai d'abord constaté que c'était quand même assez pratique, lisible,
main,tenable, en utilisation tout à fait standard, sans originalité, en
association systématique avec justement une enum. Et les outils de 2008
- et depuis longtemps - permettent de maîtriser une syntaxe que je
trouvais effectivement un peu piquante.
Et puis je me suis un jour rendu compte que le switch...case était un
"goto label" à peine déguisé. Et, de fil en aiguille, que si
généralement on peut remplacer le switch...case par un if...else
if...else if...else, les deux algorithmes n'étaient tout simplement pas
du tout les mêmes. En rapport avec "deux fois la même valeur".
Le switch...case est un branchement selon valeur. Il peut être sans test
et à nombre de cycles constant quelque soit l'aiguillage. Ceci d'autant
plus facilement qu'on utilise l'enum en bon père de famille, c'est à
dire en laissant le compilateur affecter les valeurs de 0 à N, et
pourquoi pas en type compatible avec une adresse ou un offset. Je vous
fais grâce de la structure du code machine que j'ai en tête, c'est
évident. Je dois avouer que sur un seul essai trop rapide et avec juste
une paire de cas, je n'ai pas mis ce truc en évidence. Mais il faudrait
refaire soigneusement des essais, avec plusieurs compilateurs et surtout
un aiguillage sur quelques centaines de messages.
A l'opposé, dans un aiguillage par un if...else if...else if...else,
vous imposez un ordre de traitement. Ça permet de hiérarchiser, et donc
de traiter "deux fois la même valeur". Ça peut être intéressant si on a
un cas qui se présente statistiquement "presque toujours". Si bien sûr
on en tient compte, ce qui est quand même la moindre des choses.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
Effectivement, ce contexte n'est pas adapté au switch...case, qui est
parfaitement défini. D'autant que ceci:
switch(x){
case 1:
case 2:
case 1:
/* etc. */
ne compile pas, alors que "ça pourrait".
Marc Espie, le 07/07/2008 a écrit :
In article <487145fa$0$900$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
J'ai certainement en d'autres temps écrit la même chose. Il faut dire
que j'étais alors déçu en découvrant le switch du C après avoir pratiqué
celui de Pascal (Delphi). Puis j'ai mis de l'eau dans mon vin (pouah).
J'ai d'abord constaté que c'était quand même assez pratique, lisible,
main,tenable, en utilisation tout à fait standard, sans originalité, en
association systématique avec justement une enum. Et les outils de 2008
- et depuis longtemps - permettent de maîtriser une syntaxe que je
trouvais effectivement un peu piquante.
Et puis je me suis un jour rendu compte que le switch...case était un
"goto label" à peine déguisé. Et, de fil en aiguille, que si
généralement on peut remplacer le switch...case par un if...else
if...else if...else, les deux algorithmes n'étaient tout simplement pas
du tout les mêmes. En rapport avec "deux fois la même valeur".
Le switch...case est un branchement selon valeur. Il peut être sans test
et à nombre de cycles constant quelque soit l'aiguillage. Ceci d'autant
plus facilement qu'on utilise l'enum en bon père de famille, c'est à
dire en laissant le compilateur affecter les valeurs de 0 à N, et
pourquoi pas en type compatible avec une adresse ou un offset. Je vous
fais grâce de la structure du code machine que j'ai en tête, c'est
évident. Je dois avouer que sur un seul essai trop rapide et avec juste
une paire de cas, je n'ai pas mis ce truc en évidence. Mais il faudrait
refaire soigneusement des essais, avec plusieurs compilateurs et surtout
un aiguillage sur quelques centaines de messages.
A l'opposé, dans un aiguillage par un if...else if...else if...else,
vous imposez un ordre de traitement. Ça permet de hiérarchiser, et donc
de traiter "deux fois la même valeur". Ça peut être intéressant si on a
un cas qui se présente statistiquement "presque toujours". Si bien sûr
on en tient compte, ce qui est quand même la moindre des choses.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
Effectivement, ce contexte n'est pas adapté au switch...case, qui est
parfaitement défini. D'autant que ceci:
switch(x){
case 1:
case 2:
case 1:
/* etc. */
ne compile pas, alors que "ça pourrait".
Marc Espie, le 07/07/2008 a écrit :In article <487145fa$0$900$,
Wykaaa wrote:- Les enum doivent être utilisés conjointement avec switch.
Marrant, j'ai tendance a bannir switch de mon code.
- il n'y a rien que fasse switch qui ne se fasse pas a coup de
if
else if
else if
else
- si on oublie un break, on est dans la merde
- les conversions de type sont non triviale
- si on met deux fois la meme valeur, ca ne compile plus.
J'ai certainement en d'autres temps écrit la même chose. Il faut dire
que j'étais alors déçu en découvrant le switch du C après avoir pratiqué
celui de Pascal (Delphi). Puis j'ai mis de l'eau dans mon vin (pouah).
J'ai d'abord constaté que c'était quand même assez pratique, lisible,
main,tenable, en utilisation tout à fait standard, sans originalité, en
association systématique avec justement une enum. Et les outils de 2008
- et depuis longtemps - permettent de maîtriser une syntaxe que je
trouvais effectivement un peu piquante.
Et puis je me suis un jour rendu compte que le switch...case était un
"goto label" à peine déguisé. Et, de fil en aiguille, que si
généralement on peut remplacer le switch...case par un if...else
if...else if...else, les deux algorithmes n'étaient tout simplement pas
du tout les mêmes. En rapport avec "deux fois la même valeur".
Le switch...case est un branchement selon valeur. Il peut être sans test
et à nombre de cycles constant quelque soit l'aiguillage. Ceci d'autant
plus facilement qu'on utilise l'enum en bon père de famille, c'est à
dire en laissant le compilateur affecter les valeurs de 0 à N, et
pourquoi pas en type compatible avec une adresse ou un offset. Je vous
fais grâce de la structure du code machine que j'ai en tête, c'est
évident. Je dois avouer que sur un seul essai trop rapide et avec juste
une paire de cas, je n'ai pas mis ce truc en évidence. Mais il faudrait
refaire soigneusement des essais, avec plusieurs compilateurs et surtout
un aiguillage sur quelques centaines de messages.
A l'opposé, dans un aiguillage par un if...else if...else if...else,
vous imposez un ordre de traitement. Ça permet de hiérarchiser, et donc
de traiter "deux fois la même valeur". Ça peut être intéressant si on a
un cas qui se présente statistiquement "presque toujours". Si bien sûr
on en tient compte, ce qui est quand même la moindre des choses.
Le dernier cas est particulierement subtil et vicieux, combien de fois
suis-je tombe sur du code qui faisait des switch(errno)... en oubliant
allegrement que certaines valeurs sont identiques sur certains OS.
Effectivement, ce contexte n'est pas adapté au switch...case, qui est
parfaitement défini. D'autant que ceci:
switch(x){
case 1:
case 2:
case 1:
/* etc. */
ne compile pas, alors que "ça pourrait".
Tient. Et tu crois que c'est programmé en quoi un avion ?
Tient. Et tu crois que c'est programmé en quoi un avion ?
Tient. Et tu crois que c'est programmé en quoi un avion ?
Marc Espie a écrit :
Des fonctions locales sont, en générale, des fonctions qui servent à
"implémenter" la fonction dans laquelle elles sont définies mais on ne veut
pas qu'un "utilisateur" les voit (encapsulation). En C++, on pourrait les
déclarer dans a partie privée d'une classe.
Marc Espie a écrit :
Des fonctions locales sont, en générale, des fonctions qui servent à
"implémenter" la fonction dans laquelle elles sont définies mais on ne veut
pas qu'un "utilisateur" les voit (encapsulation). En C++, on pourrait les
déclarer dans a partie privée d'une classe.
Marc Espie a écrit :
Des fonctions locales sont, en générale, des fonctions qui servent à
"implémenter" la fonction dans laquelle elles sont définies mais on ne veut
pas qu'un "utilisateur" les voit (encapsulation). En C++, on pourrait les
déclarer dans a partie privée d'une classe.