I/Introduction
Tout ça part d'une incompréhension qu'on a eu Pascal (Jankowski) et moi-même... juste sur le comment présenter une QR (prérequis du lecteur) ...
Une grosse réflexion intérieure s'en est suivie, je vous la livre ici.
En fait, en essayant de me remémorer toutes les étapes que j'ai pu franchir depuis mes premières lignes en BASIC dans les années 80, j'en suis arrivé au constat que, d'une technologie à l'autre en matière de programmation, je me suis heurté aux difficultés suivantes :
Du PRINT "BONJOUR" aux POKE et PEEK sauvages :
--> comments les données sont elles représentées en mémoire (notion d'adresse)
--> Grace à un parallèle avec PEEK et POKE du BASIC je me suis rapidement senti à l'aise avec les pointeurs (en Pascal et C) et leurs opérateur (
@ et
^ pour le pascal,
* et
& pour le C. Je vous assure que le parallèle est immédiat... Si je n'avais pas eu cette référence, j'aurais bien ramé avec les liste chaînées !!!
Du BASIC au PASCAL :
--> notion d'unités : "du code dans plusieurs morceaux mais qu'est-ce que ce bins !".
Les soucis des débutants en Delphi/Pascal sur ce sujet sont par exemple :
- Comment appeller ma fiche Form2 à partir de ma fiche Form1
- Problèmes de références circulaires
--> notions de procédures, fonctions
Auterement dit la programmation par "blocs", les apppels à ces blocs, etc
- Passage des paramètres :
- par référence, par variable
- paramètres particuliers : pointeurs, tableaux, sans types
- Pour les procédures elles même :
- Utiliser un pointeur pour accéder à une procedure, puis...
- Notion de variable procédurale.
A noter que cette notion devrait être abordée à ce stade pour faciliter la compréhension des évènements en POO. J'y revient plus loin.
--> le type énuméré
--> le type enregistrement
--> le type ensemble
De Pascal A Delphi :
--> Notion de classes avec dans l'ordre d'apprentissage les propriétés, les méthodes, puis le gratin du grand saut, les évènements.
--> suit ensuite dans une moindre mesure les notions de visibilité (publique, privé, protégé, publié)
--> l'héritage.
-->le typecast de classes ou de certaines variables (ex: TColor() )
--> Enfin, mais pas essentiel pour l'utilisateur lambda, c'est la notion de blocs protégés (try...finally/except...end);
Les évènements, à partir du moment ou on a compris que c'est une propriété de type variable procédurale, ça devient facile (on ose changer leur nom, on crée ses propres évènements TNotifyEvent, etc...), mais entre temps c'est l'enfer si on est jamais passé par cette case.
Je trouve que ces la notion la plus difficile à comprendre, en tout cas ça l'a été pour moi, pour les raisons avancées juste avant.
Ensuite, une fois qu'on a commencé à comprendre comment coder son évènement de base, on peut commencer à toucher aux messages Windows, les callbacks et autres joyeusetés.
_____________________________________________________________
II/Voilà où je veux en venir...
Bon, j'entre pas dans les détails, j'ai même du en oublier, mais nul besoin de préciser que ça correspond au "manque" que tout le monde ressent en matière de tutoriels...
Je ne pense pas me tromper si je dis que pour vous aussi, parfois, vous vous êtes heurtés à la compréhension de certaines de ces notions.
Le gros problême dans notre FAQ, c'est que lorsqu'on doit rédiger une QR qui fait appel à l'une ou l'autre de ces notions. Jusqu'où remonter au niveau des explications pour être sur que le lecteur la comprenne bien et l'assimile ?
Ca pourrait être pas mal de faire, au fil de l'eau, un inventaire "d'apprentissage chronologique" de toutes ces notions qui sont quasi inexplicables en deux lignes, surtout quand nous même on les a intégrées, digérées et assimilées.
Question : C'est quoi une roue ? Ca sert à quoi ?
Réponse : Ben, c'est évident !
Ben non, demandez donc à un homme préhistorique.
Eleve : Monsieur, j'ai pas compris
Prof (donnant l'explication classique qui fait avancer le Schmilblick parce que coincer pour donner une explication) :
Ben, c'est évident !
etc...
J'ai souvent remarqué, qu'il était hyper important pour expliquer ces notions, de commencer par donner une explication imagée, même fausse, quitte à revenir dessus un peu plus tard pour rectifier et expliquer le "comment ça marche vraiment".
Pour info, je vous renvoi à la QR que j'avais écrit sur les pointeurs pour illustration :
Quid des pointeurs
j'y raconte plein d'aneries :
(morceaux choisis)
Quand la valeur de l'adresse contenue dans le pointeur est égale à zéro, alors ça se traduit en Delphi par UnPointeur =
nil
Autrement dit nil=0 - La mémoire, ce sont des "cases"
un pointeur est une variable
ça choque souvent, mais c'est vrai...
Il y avait eu débat avec Hauwke sur le post à propos du nil=0 où j'étais intervenu à l'époque , et qui a conduit à cette QR :
http://www.developpez.net/forums/sho...ight=pointeurs
Bref, c'est un très gros chantier si on veut pouvoir expliquer tout ça clairement et simplement. En plus ça peut facilement être étoffé.
Sinon, j'ai souvent remarqué :
- que les cours d'informatiques (Pascal et C) à la FAC ou en école d'ingé n'abordaient JAMAIS cette notion de variable procédurale.
- que les bouquins sur l'initiation à Delphi, C, etc sont souvent très très mauvais (même ceux réputés très très bons
) puisqu'il brillent souvent par l'absence d'explications sur ces notions. Il tentent suvent d'expliquer par l'exemple d'un petit programme écrit pas à pas (un bouton sur une fiche qui affiche "Hello World") sans vraiment décrire le mécanisme qu'il y a derrière
- dérouler du code au pas à pas est souvent pratique pour comprendre un mécanisme, surtout en POO, avec les évènements.
Le seul bon bouquin que j'ai vu pour l'instant (j'en ai pas lu beaucoup en informatique), limpide, clair, c'est le bouquin d'un certain
Gérard LEBLANC : Turbo/Borland C++ (
Eyrolles je crois).
C'est une mine d'or pour le développement en MS-DOS, surtout associé à la "Bible du PC".
Il manque quelque chose d'aussi bon, clair et complet sous windows...
peut-être de futures QR en perspective
III/La proposition (enfin)...
Donc je propose d'ouvrir ici, ou en "sticky" une rubrique consacrée dans un premier temps un inventaire de QR "à faire" qui seraient placées dans une nouvelle catégorie "
Notions fondamentales" qui servirait de rappel à tous les visiteurs, débutants ou experts.
Vici la structure que je propose ainsi que les quelques QR (derniers niveaux de l'arboresences) auquelles j'ai pu penser :
Notions fondamentales pour le Delphiste
- Architecture d'un programme Delphi
- Application console
- Le programme principal (le fichier .dpr)
Program, Interface, Implementation, Initialization, Finalization - Les unités (fichiers .pas)
Le fichier .dcu
Comment eviter les références circulaires
- Application Windows
- Le programme principal (le fichier .dpr)
Le fichier de resource .res, l'outil Editeur d'image - Les unités avec fiche associée
le fichier .dfm
Comment appeller ma fiche Form2 à partir de ma fiche Form1 - Un peu plus loin (fichiers .cfg et .dof)
- DLL (Library)
- Etc...
- Notions fondamentales issues du Pascal
- Break/Exit/Continue,Terminate/Halt
- Types et structures particulières
- Tableaux dynamiques, déclaration et utilisation (SetLength)
- Types énumérés
- Ensembles
- Type enregistrement
- Partie variable d'enregistrement
- Pointeurs : Mémoire, Adresse, Opérateurs et fonctions, Opérations sur les pointeurs
- Transformer un type en un autre :
En vrac : Typecasting (exemple de TColor() ), utilisation des pointeurs, Type enregistrement avec partie variable, fonction SizeOf, Nombres-->chaînes (ex : fonction Format()), et Chaînes-->Nombres,PChar/String, byte/char/string, ord/chr, fonctions Move et Copy (un rappel à ces fonctions peut servir d'intro aux TStream) - SizeOf avec le type string (différence entre string et string[10]
- Variants (variables et tableaux)
- Variables entières : manipulations bit à bit avec les opérateurs logiques, shr et shl
- Les réels :
- Erreurs d'arrondi
- Trunc/round/floor/cell
- Formattage - TDate/TDateTime (Réel/entier)
- conversion avec TimeStamp Windows - constantes NAN (not a number), Infinity et NegInfinity
- Fonctions et procedures
- Passage des paramètres
- par référence, par variable
- paramètres particuliers : pointeurs, tableaux, sans types, tableaux dynamiques (fonctions Low et High)
- Paramètres par défaut
- TVarArgs
- Mettre une procédure ou une fonction dans une variable :
- Utiliser un pointeur pour accéder à une procedure...
- Variable procédurales
- Notions propres à Delphi (POO)
- Classes et Objets
- Introduction avec une video de Borland qui explique les Objets et la POO en prenant exemple sur une voiture et un camion (classe dérivée), la couleur de la carosserie (propriétés), la panne d'essence (évènement). Si quelqu'un la retrouve...
- les propriétés
- les méthodes
- 2 types de méthodes particulières (constructeur/ destructeur, Create()/Free)
- Les évènements
(Retour sur les variables procédurales) - Visibilité (publique, privé, protégé, publié)
- L'héritage :
- Création d'une classe dérivée
- Changement de visibilité
- Mot-clé Override
- retour sur les paramètres des procedure et fonction (Classes virtuelles) :
- paramètre TStream pour passer un TMemoryStream ou un TFileStream
-TControl pour TWinControl/TGraphicControl
-TStrings pour TStringList
- Le typecast de classes, opérateurs is et as
- Classes particulières
- Celles qu'on voit : Qu'est-ce que la VCL ?
- Celles qu'on ne voit pas
- TPersistent et TComponent
- TStreams (TMemoryStream,TFileStream)
- TRegistry
- TStrings (TStringList)
- TControl (TWinControl et TGraphicControl)
- Différences entre WinControl et GraphicControl
- TColor,TFont,TBrush
- TCanvas
- TControlCanvas, PaintTo
- TBitmap
Introduire ScanLine ? - Utiliser TPaintBox
- Technique avancées :
- ComponentCount, FindComponent
- Rendre publique
une variable privée,une méthode protégée
- Blocs de protection (try...finally/except...end)
- Création d'évènements (TNotyfyEvent et plus)
- if Assigned(MaProcedure) then MaProcedure() --> notion d'alias
- Delphi et Windows :
- API Windows :
- Handle, Device Context
- Un TWinControl est une fenètre
- Fonctions et Procedures liées aux fenètres
- TCanvas et Graphisme windows :
- TColor et RGB
- Polyline,Polygon,Paths, Regions
- Les messages : structure d'un message
- Callbacks (stdcall)
- Création d'évènements Delphi avec les Messages Windows
- Déviation de la procédure WindowProc d'un contrôle fenêtré grace à la propriété TControl.WndProc (où l'art de se passer de l'écriture d'une classe descendante)
- Assembleur Inline :
- Dans quel registre se trouve le paramètre de ma fonction
Exemple sur les opérateurs bits à bits (j'ai eu une super initiation là-dessus de la part de mon parrain ) - Ecriture entre crochets d'une valeur immédiate (Kécecé ? --> mal expliqué dans l'aide delphi)
- Etc...
- Base de données et Delphi :
- L'arborescence fondamentale : (TDatabase-->(TSession-->))TDataSet-->TDataSource-->TDBComponent
- TTable
- TQuery
- méthodes Add,Insert,Edit et Post (y compris avec TQuery)
- Locate/Lookup
Qu'en pensez vous ?
Partager