Décidément, le sujet n'en finit pas de faire fonctionner les claviers et je vais me permettre d'ajouter mon grain de sel.
Alors merci pour cette excellente analyse et surtout le "c'est quand même difficile !" qui me remet un peu sur les rails
On ne peut pas laisser dire que c'est difficile. C'est juste une façon d'appréhender le problème que le programme est censée résoudre. Il ne faut pas non plus être dogmatique et vouloir à tous prix tout faire en objets. Des fois c'est vraiment beaucoup mieux et d'autre fois absolument pas nécessaire (voir tout simplement pas possible).
La question n'est pas "c'est difficile ou pas", la question est, cela peut t'il m'aider à traiter le problème plus facilement ou pas, cela simplifie t'il la rédaction ou pas, les performances ou pas, la maintenance et/ou la distribution du programme ou pas ?
Il faut s'y mettre, tout simplement, comme pour tout et je t'assure qu'avec une certaine maîtrise on se demande pourquoi on faisait autrement et que l'on regrette bien de ne pas s'y être mis avant.
Tu cherches des exemples concrets. La programmation orienté objet s'appelle justement comme cela car elle cherche à s'inspirer des objets concrets. En modélisme ferroviaire, les objets sont donc formidablement pertinents pour programmer avec des aiguillages, des servos, des capteurs, des signaux lumineux etc... etc.. Des objets bien concrets donc.
Commences déjà à utiliser
les structures en C qui sont des objets et crois moi, il ne faudra pas longtemps pour que tu sois convaincu.
Voici un exemple que je n'ai pas voulu trop simpliste tout de même. En l'analysant un peu je crois que tu vas vite comprendre l'intérêt d'adopter un paradigme objet. Et dis moi surtout si c'est plus difficile de raisonner comme ceci.
#define NB_AIGUILLAGES 21 // nombre d'aiguillages à piloter
#define START_PIN 22 // Première des pins affectées aux servos
typedef struct { // Déclaration d'une structure "Aiguillage"
uint8_t id;
uint8_t outPin;
uint16_t minPosition;
uint16_t maxPosition;
uint16_t currPosition;
} Aiguillage ;
Aiguillage aig[NB_AIGUILLAGES]; // Création d'un tableau d'aiguillages (aig[ ]) à partir de la structure "Aiguillage"
Servo myServo[NB_AIGUILLAGES]; // Création d'un tableau d'objets servos à partir du constructeur Servo
void setup() {
for (int i = 0; i < NB_AIGUILLAGES; i++) {
aig[i].id = i;
aig[i].outPin = START_PIN + i;
aig[i].minPosition = 1200;
aig[i].maxPosition = 1700;
aig[i].currPosition = 1200;
myServo[i].attach(aig[i].outPin);
myServo[i].write(aig[i].currPosition);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Une fois que tu as compris les structures, tu n'es plus bien loin de faire des Classes qui ne se distinguent fondamentalement des structures que par les méthodes que tu peux associer aux objets et le caractère privé que l'on peut donner aux membres évitant ainsi des modifications accidentelles. Bon, là je simplifie un peu...
Donc, c'est comme tout, ça s'apprend. On se fait aider par les autres et puis voilà. Pas difficile !
Sur ce, bon réveillon à tous !
Christophe