39
« le: avril 08, 2025, 05:07:20 pm »
Je vais vous présenter ici la démarche habituellement uitilisée par la programmation objet. Cette démarche est indépendante du langage utilise (C++,Processing(Java)).
Quand on programme en programmation objet, il faut commencer par identifier les objets possibles.
Prenons un de ces objets, généralement il y a plusieurs variantes possibles de cet objet, cela s’appelle du polymorphisme (la programmation objet c’est de l’encapsulation, de l’héritage et du polymorphisme).
Bien évidemment il n’est pas question de traiter les variantes avec des si/sinon (if/else) en programmation objet on procède completement différemment.
On commence par écrire une classe de base ayant le nom de l’objet, cette classe peut être une classe abstraite (on ne fait généralement pas d’instance de cette classe, mais cet aspect est secondaire), cette classe sera remplie par la suite en fonction des besoins (variables et fonctions (méthodes)).
Ensuite pour chaque variante on crée une sous-classe (il faut trouver un nom en rapport avec l’objet) qui hérite de la classe base, ou d’une autre sous-classe héritant directement ou indirectement de l’objet).
Voila le schéma général d’’écriture. Maintenant il fait remplir la classe et les sous-classes.
Prenons un exemple avec les signaux SNCF. Il faut réfléchir aux actions que l’on peut faire sur un signal, c’est la partie la plus difficile du processus ( et ce n’est pas lié au fait que l’on soit en programmation objet ), faut pas chercher de complications mais plutôt de la synthèse et ne pas chercher à trouver tout tout de suite. De façon synthétique un signal on peut l’ouvrir et le fermer (indépendamment de qui l’ouvre ou le ferme), cela fait deux actions pour l’instant.
On va coder ces deux actions sous forme de fonctions (méthodes) : void ouvrir() {…} et void fermer(){…}, c’est le signal qui saura ce qu’il faut faire.
Dans le programme objet utilisant ces signaux une variable de type signal sera typée Signal et non SignalCarre, Carré, Avertissement, … Pour que cela se passe bien( à la compilation ) il faut que la classe de base Signal contienne les deux fonctions (méthodes), mais sous une forme dégradée car la classe Signal ce n’est pas un vrai signal (on ne sait pas comment l’ouvrir ni le fermer) : void ouvrir() {} et void fermer() {}.
Ecrivons une variante, la plus simple CarreViolet. On a tout d’abord besoin d’une variable pour mémoriser le feu d’un signal, une énumération du genre : enum Feu={Vl,A,S,C,Cv,M,…}; convient très bien, mais dans quelle classe il faut la mettre, elle va servir pour tous les signaux, donc il faut la mettre dans la classe de base Signal.
Les deux fonctions (méthodes) peuvent donc s’écrires : void ouvrir() { feu=M; } et void fermer() { feu=Cv; } .
On a donc pour l’instant :
Classe Signal {
enum Feu={Vl,A,S,C,Cv,M,…};
void ouvrir() {}
void fermer() {}
}
Classe CareViolet hérite de Signal {
void ouvrir() { feu=M; }
void fermer() { feu=Cv; }
}
Bien évidemment il manque les autres variantes de signaux.
Voila la démarche standard de la programmation objet, c’est généralement toujours la même démarche.
Je vous laisse digérer cette démarche, et me poser toutes les questions nécessaires..
Cordialement
Pierre59