Auteur Sujet: Je suis nul en programmation !!!  (Lu 1760 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1723
  • 100% Arduino et N
    • Voir le profil
Je suis nul en programmation !!!
« le: décembre 24, 2018, 04:13:42 pm »
Citer
Je suis nul en programmation et je ne comprends pas mais ayant acheté un Arduino Uno et quelques accessoires, j'aimerais l'utiliser quand même.
Si quelqu'un avait la charité pour me donner un code valide je lui en serais très reconnaissant.

Je ne cite personne en particulier, mais le fait est que l’on peut lire ça de temps en temps  :-\

Je trouve dommage qu’un modéliste ferroviaire qui trouve envie de réaliser un automatisme à base d’Arduino, parte ainsi SANS ESPOIR sur un projet et fasse preuve d’un tel manque de confiance en soi, alors que nous tous, à Locoduino, faisons tout pour partager nos expériences : peut-être faudrait-il commencer à chercher des éléments de réponse dans le site éditorial et dans le forum. Cela nous éclairerait bien qu’on nous dise ce qui manque.

L’Arduino, c’est comme le loto : tous ceux qui ont réussi leur projet ont tenté leur chance et se sont enrichis !


Qu’en pensez-vous ?

msport

  • Hero Member
  • *****
  • Messages: 678
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #1 le: décembre 24, 2018, 10:19:16 pm »
100% d'accord et comme dit le proverbe "aide toi et le ciel t'aidera"
Sans se prendre pour le bon Dieu, on a quand même plus envie d'aider si on ressent une motivation en face, et c'est d'autant plus facile qu'on sait ce qui ce qui a déjà été compris et entrepris, voire réussi.

Ce qui se traduit par aidez nous à vous aider.

Et avant  même Locoduino et son site éditorial, le site arduino.cc et son playground, l'IDE et ses exemples, les instructables sont le moyen de démarrer en douceur, tout en choisissant son sujet et le modifiant à son gout.

Mais peut-être ceux qui ont été aidés peuvent dire ce qui les a vraiment aidés, et ce qu'ils ont moins aimé, voire posé problème.
Cordialement

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Re�: Je suis nul en programmation !!!
« Réponse #2 le: décembre 26, 2018, 12:52:57 pm »
Mais peut-�tre ceux qui ont �t� aid�s peuvent dire ce qui les a vraiment aid�s, et ce qu'ils ont moins aim�, voire pos� probl�me.

En voila une bonne idée Michel (une de plus).

Alors je me lance, quitte à m'attirer les foudres de certains  :-[ ,cette réponse est forcément personnelle et n'engage que moi.

Que ce soit les rubriques Atelier, Matériel ou Programmation, toutes m'ont énormément aidées à progresser et surtout données envie de creuser plus loin.
Il n'y a qu'un sujet avec lequel je suis fâché et cela me désole profondément, c'est "Le monde des objets".

Bien sûr, je n'ai à m'en prendre qu'à moi-même si je n'y arrive pas, mais le soucis c'est que la plupart des projets récents (et de plus en plus) sont axés autour de ces objets et du coup, ceux qui ne les intègrent pas comme moi n'ont aucune chance d'y accéder, dommage. Ce serait d'ailleurs bien d'avoir une idée du nombre de participants à ce forum qui sont dans mon cas, non ?

Je comprends très bien ce choix car c'est lui qui permet de donner toute la puissance à C++ (du moins si si j'ai bien compris) et je n'ai aucune solution à proposer, ce message devient du coup purement informel, mais c'était peut-être une partie de la proposition de Michel.

Ou alors peut-être un "tutoriel miracle" pour les cerveaux > 70 ans qui sont forcements un peu plus "saturés" ?

En toute cordialité
Antoine   
     
 

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1723
  • 100% Arduino et N
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #3 le: décembre 26, 2018, 01:02:47 pm »
Je te comprends, Antoine, j’ai aussi galèré avec le C++, en lisant très souvent les articles de Thierry et de Pierre59, en aussi en lisant des Mooc et des cours en pdf trouvés sur la toile.

Si tu en veux, je peux t’envoyer des références.

MAIS C’est un mal nécessaire : le C++ est plus simple que le C standard dans pas mal de situations. C’est comme tout il faut commencer par des choses simples.  Et nous n’avons pas besoin de devenir des experts.

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #4 le: décembre 26, 2018, 01:53:50 pm »
Merci Dominique,

aussi bien pour mes soucis de programmation de décodeurs que mes lacunes en "objet".
Je veux bien tenter l'apprentissage avec des liens sur des cours que tu me proposes.


msport

  • Hero Member
  • *****
  • Messages: 678
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #5 le: décembre 26, 2018, 10:01:41 pm »
Et pourquoi pas un petit article sur le site éditorial :
bien sur, pas un article formation comme il y en a de très réussis, mais simplement un recueil de liens à la manière de "Où acheter" qui n'est pas une formation d'acheteur mais qui dit où trouver ce qui est utile pour notre passion.
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1440
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #6 le: décembre 27, 2018, 11:27:55 am »
Bonjour,

La POO n'est pas liée à un langage en particulier et je pense que l'attaquer par le biais d'un cours ou un langage est central, C++ en l'occurrence, n'est peut être pas le meilleur moyen, en tout cas ce n'est pas un moyen universel qui convient à tout le monde.

Ce qui marchera le mieux dépend de la manière dont tu « vois » les choses. J'ai lu il y a un paquet d'années le bouquin de Seymour Papert « Jaillissement de l'esprit  : ordinateurs et apprentissage » dont le sujet n'est absolument pas la POO, c'est un livre de pédagogie à propos du Logo. Mais un passage m'avait frappé. Il explique qu'enfant il jouait au mécano et que ça avait structuré sa pensée pour réfléchir à un problème.

On peut en dériver le fait que la POO est une méthode pour réfléchir à un problème et que cette méthode est différente de la programmation impérative classique. Apprendre le C++ ne donnera pas explicitement les clés pour ça. Apprendre les mécanismes du langage : héritage, surcharge, etc ne donnera pas non plus de clés.

L'avantage principal de la POO de mon point de vue est que c'est une façon formidable de structurer et de modulariser. Quand je réfléchis à une applis, je fais naturellement un diagramme d'architecture logicielle, des boites avec des flèches, dans ma tête ou sur le papier si je ne travaille pas seul. Assez naturellement une boîte est un objet. Si tu ne réfléchis pas de cette manière et si tu n'as pas déjà une démarche d'architecture modulaire, la POO ne sera pas naturelle.

Pour ma part, j'ai joué aux Lego quand j'étais petit :). Côté informatique, j'ai commencé classiquement par le Basic (1981) puis le Pascal, le Forth, le C, l'assembleur, le C++ (1992), etc. Je n'ai pas de souvenir précis de l'avant et l'après POO, c'est venu assez naturellement mais évidemment ça s'étale sur une dizaine d'années.
Cordialement

Pierre59

  • Full Member
  • ***
  • Messages: 145
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #7 le: décembre 28, 2018, 11:51:57 am »
Bonjour

Je suis tout à fait d'accord que la POO n'est pas liée à un langage particulier, mais pour pratiquer ou pour communiquer des exemples il faut bien choisir un langage. En ce sens C++ n'est pas le meilleur choix, il offre trop de possibilités dans les passages de paramètres et les résultats (par valeur, référence, pointeurs, …), il y a aussi des contraintes dans l'ordre des déclarations, des difficulté pour gérer la mémoire (free, destructeurs, …) … ce qui conduit à prendre en compte des problèmes techniques pas toujours simples à résoudre. Si on veut faire de la POO en C++, je pense que le plus simple est d'utiliser systématiquement des pointeurs sur les objets et se restreindre au minimum nécessaire. Je sais que les pointeurs peuvent effrayer certains, mais c'est indispensable pour profiter pleinement du polymorphisme.

Je rappelle que la POO est basée sur trois principes essentiels : l'encapsulation, l'héritage et le polymorphisme et que c'est le polymorphisme qui donne toute sa puissance à la POO (malheureusement je n'ai jamais trouvé un exemple simple pour illustrer le polymorphisme) :

- l'encapsulation c'est le regroupement de variables et des bouts de programme manipulant ces variables (sous forme fonctions) sous forme d'objets. Elle donne aussi des types aux objets permettant au compilateur des faire pas mal de contrôles et au programmes de les manipuler facilement.

- l'héritage permet de récupérer des objets existants en les adaptant à de nouveaux besoins, pour former de nouveaux objets, cela a aussi l'énorme avantage de factoriser des parties communes de plusieurs objets  évitant ainsi les duplications de parties de programme, donc facilitant l'écriture et la maintenance. L'héritage à un autre effet il donne plusieurs types simultanés aux objets, les objet sont ainsi polymorphes (ils ont plusieurs types, plusieurs formes) et cet état de fait est très courant dans les applications.

- le polymorphisme est un mécanisme essentiel, utilisant l'aspect polymorphe d'objets, permettant de mettre un objet à la place d'un autre avec adaptation automatique aux particularités des objets. C'est ce mécanisme qui fait toute la puissance de la POO. Malheureusement ce mécanisme n'est pas trop mis en valeur dans les cours de POO, où on se contente souvent d'encapsulation, avec un saupoudrage d'héritage. Mais comme je l'ai évoqué avant il faut d'assez gros exemples pour saisir toute la puissance conceptuelle de ces mécanismes.

Un langage plus adapté que C++, peut être Processing (ou directement Java) qui a été conçu pour faire de la POO, contrairement au C++ où la partie objet a été rajoutée par la suite. Mais quand on connait bien un langage il est peut être plus facile de partir de ce langage pour passer à la POO. Moi qui suis habitué à Java,  j'ai toujours un peu de mal à repasser au C++ à cause des petits problèmes de syntaxe, mais conceptuellement cela ne change pas.

Pierre

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1440
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #8 le: décembre 29, 2018, 01:38:37 pm »
Un exemple simple et petit de polymorphisme se trouve dans SlowMotionServo.

La classe de base, SlowMotionServo est une classe abstraite qui contient toute la machinerie sauf les trajectoires : méthodes slopeUp et slopeDown qui sont des virtuelles pures. Un objet SlowMotionServo ne peut donc pas être instancié.

3 classes concrètes sont fournies : SMSLinear, SMSSmooth et SMSSmoothBounce. Chacune hérite de SlowMotionServo et apporte sa trajectoire en définissant slopeUp et slopeDown.

SlowMotionServo maintient une liste (via un SlowMotionServo  *) des objets qui est remplie quand on instancie un SMSxxx. Cette liste sert à itérer sur les objets pour mettre à jour leur position.
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 503
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #9 le: décembre 29, 2018, 05:09:09 pm »
Il y a aussi le Satellite, avec sa classe de base 'Objet' dérivé en Detecteur, Aiguille et Led qui fournissent leur setup() et loop() .

Pierre59

  • Full Member
  • ***
  • Messages: 145
    • Voir le profil
Re : Re : Je suis nul en programmation !!!
« Réponse #10 le: décembre 30, 2018, 04:35:17 pm »
Bonjour

Un exemple simple et petit de polymorphisme se trouve dans SlowMotionServo.
C'est certes écrit tout à fait comme il faut vis à vis de la programmation objet, mais cela ne peut pas vraiment servir comme exemple simple dans un cours. Il y a bien les bonnes bases, une classe abstraite, au moins une classe dérivée et une utilisation d'objets polymorphes. Mais j'y vois de gros inconvénients :

- c'est beaucoup trop compliqué, car "pollué" par beaucoup de code non en rapport avec la POO et laborieux à expliquer.

- c'est pas vraiment convaincant vis à vis de l'héritage et du polymorphisme. Cela s'écrit trop facilement sans héritage avec un simple "switch", alors pourquoi faire l'effort de passer à la POO (c'est quand même difficile !). Un bon exemple devrait montrer l'intérêt de la POO en évitant de nombreux tests un peu partout dans le code.

- cela ne montre pas le fait que l'on puisse rajouter facilement des objets sans retoucher au reste du programme.

- …

J'ai des exemples qui conviennent mieux et qui sont plus abordables, mais il faut une page de programme, donc ce n'est pas vraiment simple.

Amicalement

Pierre

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1440
    • Voir le profil
Re : Re : Re : Je suis nul en programmation !!!
« Réponse #11 le: décembre 30, 2018, 04:54:40 pm »
- c'est pas vraiment convaincant vis à vis de l'héritage et du polymorphisme. Cela s'écrit trop facilement sans héritage avec un simple "switch", alors pourquoi faire l'effort de passer à la POO (c'est quand même difficile !). Un bon exemple devrait montrer l'intérêt de la POO en évitant de nombreux tests un peu partout dans le code.

- cela ne montre pas le fait que l'on puisse rajouter facilement des objets sans retoucher au reste du programme.

2 items parfaitement contradictoires ...

Non on ne peut pas faire un simple switch car la bibliothèque n’est pas limitée aux 3 classes fournies. On peut définir ses propres classes en héritant de SlowMotionServo et en définissant seulement slopeUp et slopeDown pour donner la trajectoire voulue tout en héritant de tout le comportement.

Amicalement
« Modifié: décembre 30, 2018, 04:56:23 pm par Jean-Luc »
Cordialement

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Re : Re : Je suis nul en programmation !!!
« Réponse #12 le: décembre 30, 2018, 04:56:17 pm »
Cela s'écrit trop facilement sans héritage avec un simple "switch", alors pourquoi faire l'effort de passer à la POO (c'est quand même difficile !). Un bon exemple devrait montrer l'intérêt de la POO en évitant de nombreux tests un peu partout dans le code

Bonjour Pierre,

je suis ce fil depuis le début mais je rame, je rame.

Alors merci pour cette excellente analyse et surtout le "c'est quand même difficile !" qui me remet un peu sur les rails  ;) .
Si tu cherches un bon exemple dans lequel la POO aurait été très très très... utile, édite mon sketch de la souris sans fil, mais bon courage.

Amicalement
Antoine


bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 362
  • HO avec DCC++
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #13 le: décembre 31, 2018, 05:11:04 pm »
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
 
« Modifié: décembre 31, 2018, 05:26:18 pm par bobyAndCo »

Pierre59

  • Full Member
  • ***
  • Messages: 145
    • Voir le profil
Re : Je suis nul en programmation !!!
« Réponse #14 le: décembre 31, 2018, 06:29:37 pm »
Bonjour

On peut même mettre des méthodes dans les structures. Mais pas de protections ni d'héritage possibles.

Pierre