Obligement - L'Amiga au maximum

Dimanche 23 juillet 2017 - 22:34  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : C - application de la programmation orientée objet aux gadgets
(Article écrit par Batchman et extrait d'A-News (Amiga News) - avril 1989)


Comme promis le mois dernier, voici un petit exemple de programmation orientée objet. Ceux qui connaissent déjà ne seront pas très impressionnés mais ce n'est qu'un tout petit exemple de ce que l'on peut faire.

Le sujet de l'article étant les gadgets, voyons en quoi elle nous facilite la vie. Lorsqu'un gadget est activé par l'utilisateur, un message est envoyé à la fenêtre qui le contient. Le problème est de savoir de la façon la plus simple possible quel gadget est activé.

Dans le dernier exemple (du mois de décembre), on récupérait le numéro du gadget émetteur et, par un "switch/case", on déterminait l'action à exécuter.

La ruse de sioux consiste à placer dans le champ "UserData" de la structure "Gadget" l'adresse de la fonction à exécuter. De cette manière, on n'aura plus besoin de savoir quel est le gadget activé pour appeler la fonction correspondante ; on appellera directement la fonction dont l'adresse est située dans le champ "UserData". Si vous n'êtes pas convaincu, comparez le programme d'exemple avec celui du moi de décembre. C'est tout de même plus simple !

Votre compilateur (j'ai utilisé le Lattice 4.0) risque cependant de protester par un "warning". Méprisez donc cet esprit de contradiction : le programme est correct (au passage, si un lecteur éclairé trouve la conversion de type nécessaire pour éliminer ce warning, il gagnera... toute mon admiration). Maintenant, tapez le listing et essayez-le.

C
C

Mise à jour (août 1989)

Il y a donc deux lignes sur lesquelles bute le compilateur, qui rend un "warning" (alerte). Attention, ça devient compliqué : il s'agit de récupérer, à partir d'un pointeur sur un message, l'adresse d'un gadget contenant un pointeur sur une fonction retournant un entier. Ces lignes sont :

f=((struct Gadget *) Message->IAdress)->UserData;
fin=(*f)();

Avec l'aide de plusieurs lecteurs d'A-News, que je remercie au passage, voici ce qu'il fallait écrire :

fin=(*((int(*)())((struct Gadget *) Message->IAdress)->UserData))();

Il n'y a plus besoin du pointeur f qui servait d'intermédiaire. "fin" reçoit directement l'entier retourné par la fonction dont l'adresse est dans le gadget activé et dont adresse (du gadget) se trouve dans le message... Je ne vois vraiment pas où est la difficulté... Que les nouveaux venus au C ne se découragent pas, cet exemple de conversion explicite de type est un cas extrême (mais on peut faire pire, il n'y a pas de limites).


[Retour en haut] / [Retour aux articles] [Article précédent]