-------------------------------------------------------------------------------------- la POO par croqmort H=EDM² (www.hacknow.com.bi) vous me connaissez peut etre deja, je fait des articles pour h=edm² le mag le plus déjanté du monde :), si vous avez lu mes articles, vous avez sûrement remarqué que dans l'informatique 3 choses m'interressent : la programmation, le cracking et tetrinet (/!\ tetrinet c'est pire que de la drogue, une fois qu'on y a joué on peut plus s'arrêter !) dans cet article je vais essayer de vous apprendre une des choses les plus importantes en programmation de nos jours, la programmation orienté objet ! Ouais, je confirme, tetrinet c bien une drogue! M'enfin bon, j'en profite au passage pour dire que cybz est nul, vous vous en foutez, c clair mais lui il va mourir de honte. ouai mais bon comme tu le dis si bien on s'en fout ;) je vais essayer de faire un article simple tout en etant le plus complet possible ! je me suis servi pour la premiere fois à fond de la poo dans mon programme appelé "Next World",il tourne sous dos en 320x200,c'est un jeu de vaisseau style "xenon 2" (ça me refait penser a la belle époque de l'amiga !) c'est pour ça que les exemples de cet article seront en rapport avec des vaisseaux, des bonus etc ... "Next World" est encore sûrement à l'heure ou vous lirez ceci encore en dévelopement, car ce jeu est en dévelopement permanent ! faut dire que c'est tellement facile une fois que l'on a fini les principaux objet, d'en créer de nouveaux grâce à l'héritage ! peut être un jour je mettrai en ligne le code ! en attendant vous pouvez toujours me demander une version exécutable (en ce moment le jeu fait a peu prés 200 ko non compacté) note pour plus tard: quand on parle d'heritage, surtout faut penser à définir ce que c'est trés vite. enfin moi ce que j'en dis... Nan cybz, c'est pas un oncle d'amérique que file des sous... I. INTRODUCTION __________________ - a l'ère primaire de la programmation, l'asm régnait en maître absolu, les programmes etaient mal organisés et il était difficile de les ameliorer une fois fini Faut tout faire ici: pour les neuneus, l'asm, c l'Assembleur. Quand vous compilez un prog, aprés c'est (en gros) 'état dans lequel il se retrouve pour que l'ordi y capte des trucs. C'est un langage de prog dis de bas niveau. c'est à dire qu'il aut tout lui dire, il connait rien de base. Oui, je vois que vous avez compris puisque j'entends des :" Un peu comme cybz..." C pas faux mais pas trés gentil! - puis vint l'ère de la programmation structurée, avec le pascal, le basic et bien entendu le C, les programmes etaient mieux organisés, mais les modifications etaient encore un parcours du combattant ! (où ça des cons battants ?) - enfin, une nouvelle ère arriva vers 1990, une ère très importante : l'ère de la POO ! et les l4g, ça sent le pathé? Les l4g, c leslangages de 4éme génération. en gors, tu leur dis de dessiner une fenêtre et il la font. pas à se prendre la tête quoi la POO c'est la programmation orientée objet, pour expliquer ce qu'est la programmation orientée objet, je vais d'abord vous montrer ce qu'est la programmation structurée : dans la programmation structurée, on utilise des fonctions regroupant les suites d'instructions les plus utilisées, de plus on regroupe les variables, exemple : struct fenetre{ int x,y,w,h } dans la programmation orientée objet on va regrouper dans la structure fenetre, des fonctions en rapport avec la fenetre exemple : struct fenetre{ int x,y,w,h void deplace(int a,int b) } mais attention ce que je viens de marquer est faux car dans ce cas on utilise plus "struct" mais class ! class fenetre{ public: fenetre(); int x,y,w,h; void deplace(int a,int b); } les avantage de la poo, c'est l'organisation, la simplicité, la puissance de l'héritage, etc .... La sécurité aussi avec les concepts de privé et public mais je pense que ça en cause aprés blablabla... public...blablabla....concept...blablablaclasse...blaprivé.. II. COMMENT CREER UN OBJET ? _______________________________ on va prendre comme exemple un vaisseau d'abord il faut déclarer notre objet vaisseau : Bientot en kiosques dans Warning : Comment fausser votre declaration d'objet ! class vaisseau{ } que va-t-on mettre à l'intérieur ? d'abord il faut savoir ce que sont les mots clé : "public :" , "privated :" et "protected :" lorsque l'on declare des variables ou des fonctions après "public :" elles sont utilisables partout aussi bien dans la class que en dehors lorsque l'on declare des variables ou des fonctions après "privated :" ou "protected :" elles sont utilisables seulement dans la class pour la difference entre "privated :" et "protected :", on verra ça plus tard Quand je vous disait qu'il allait en causer de ça... donc là pour l'instant les variables que l'on veut déclarer on va les mettre en "public :" class vaisseau{ public : int x,y,w,h; } Ho le porc le porc le porc!!! maintenant les fonctions : on va avoir besoin d'une fonction pour faire bouger le vaisseau : class vaisseau{ public : int x,y,w,h; void bouge(); } maintenant, il faut se creer des fonctions qui seront appelées dès la création d'un vaisseau : class vaisseau{ public : vaisseau(); int x,y,w,h; void bouge(); } et maintenant il faut un "destructeur" c'est a dire une fonction qui sera appelée lors de la destruction du vaissseau : class vaisseau{ public : vaisseau(); ~vaisseau(); int x,y,w,h; void bouge(); } maintenant tout ça c'est bien bo mais qu'est ce que j'en fais ? là on a en fait juste déclaré comment va se présenter notre objet, maintenant il faut créer l'intérieur, càd mettre les instructions dans "bouge();" par exemple ! pour cela on va d'abord enregistrer ce qu'on vient de faire dans un fichier "header" , un ".h" ou ".hpp" personnelement j'utilise toujours ".hpp" on va enregistrer dans "vaisseau.hpp" : #ifndef __vaisseau_hpp__ #define __vaisseau_hpp__ class vaisseau{ public : vaisseau(); ~vaisseau(); int x,y,w,h; void bouge(int a,int b); } #endif maintenant creons un fichier "vaisseau.cpp" d'abord il faut "lié" le .hpp au .cpp : #include "vaisseau.hpp" maintenant ajoutons la 1er fonction, c à dire le l'initializer : vaisseau::vaisseau(){ x = 0; y = 0; w = 0; h = 0; } ensuite le destructor : vaisseau::~vaisseau(){ } et notre fonction "bouge" void vaisseau::bouge(int a, int b){ x=a; y=b; } voilà notre objet est fini ! maintenant pour s'en servir, il faut d'abord ajouter au début du fichier dans lequel on veut créer un vaisseau : #include "vaisseau.hpp" ensuite il faut ajouter "vaisseau.cpp" en tant que node au projet (dans borland vous cliquer avec le bouton droit sur le projet (dans la fenetre projet) et vous sélectionnez "add node") pour créer un vaisseau : 2 solution : avec ou sans pointeur : sans pointeur : vaisseau vs // vs est declarer comme etant un vaisseau avec pointeur : vaisseau *vs // vs est delarer en tant que pointeur de type vaisseau vs = new vaisseau ... delete vs c bien beau de causer de pointeurs mais les gens un peu simple d'esprits (oui comme cybz, tout à fait) y savent pas ce que c un pointeur si? enfin pour répéter ce qui doit être aillerus mais que g pas vu, un pointeur, c une variable qui pointe (ça alors!!) sur une adresse mémoire (au lieu de contenir des données classiques). pour creer plusieur vaisseau dans le meme pointeur : vs = new vaisseau[5] pour s'en servir c'est simple il suffit de faire (index correspondant au vaisseau que vous voulez utilisez): vs[index]->bouge(10,10); mieux vaut utiliser les pointeurs ! A vous de jouer ! Sur l'exemple du projet Athena original créez la classe Ulysse avec les fonctions suivantes : - Glander (man sleep) - Dormir (voir Glander, attention au piege ne declarez pas deux fois la meme fonction !) - Emmerder_le_monde (man talk) - Monologue (man echo) Conseil evitez d'utiliser trop les "public" ça peut devenir dangereux, et au passage... je ne serais en aucun cas reponsable de toute degradation psychologique suite a la compilation de cet exercice. III. L'HERITAGE __________________ l'heritage c'est le fait d'aller d'une notion générale, à une chose de plus en plus précise, exemple : Objet | ------------------------------------------------------------- | | | Tir Bonus Vaisseau | | | -------------- --------------- --------------- | | | | | | | Laser Boule Missile Bvie BTir Vami Vennemi maintenant on va voir ça en C++ : class objet { public : int x,y,w,h; unsigned char far *dessin; void dessine(); } maintenant, un vaisseau, c'est un objet mais un objet qui bouge et qui tire ! class vaisseau : public objet { public : int puissancedetir; void bouge(int depx, int depy); bool fire(Tir *ptir) } même chose pour un tir : class Tir : public objet { public : void bouge(int depx, int depy); void touch(vaisseau *vs) } maintenant nous voyons que nous avons 2 fois bouge mais si on fait : objet *obj; obj = new objet; obj->bouge(10,10); ça marche pas ! solution ? : class objet { public : int x,y,w,h; unsigned char far *dessin; virtual void bouge(int depx, int depy); void dessine; } et maintenant : objet *obj; obj = new objet; obj->bouge(10,10); mais ça marche pas car objet a des classes virtual on ne peut donc pas créer un objet, on doit créer quelque chose de plus précis et pointer dessus : objet *obj; Tir *ptir; Tir = new ptir; obj = Tir; obj->bouge(10,10); IV. ENCAPSULATION & POLYMORPHISME ___________________________________ là on va prendre des exemples dans la vie quotidienne pour expliquer ces termes, si vous comprenez rien c pas grave car ces 2 termes sont inutiles, on fait de l'encapsulation et du polymorphisme sans s'en rendre compte ! encapsulation : quand vous utilisez un chauffage, qu'il soit au fioul, au charbon, à l'electricité ou au plutonium (très économique :)), le résultat sera le même, le chauffage va chauffer (étonnant non ?) C'est comme avec ulysse en fait, quoi qu'il dise on s'en fout polymorphisme : vous avez 2 pistolets ils sont pareil, mais l'un tire un petit drapeau où il est marqué "BANG" et l'autre il sort des balles encapsulation : les objet sont différents mais ils font la même chose polymorphisme : les objet sont similaires mais ils font des choses différentes ! V. ORGANISATION _________________ poo ça rime avec organisation (enfin, ça rime pas mais c pas grave !) car grâce à la poo, vous n'aurez pas des listing de 10 mo où on ne sait pas où ça commence et où ça finit et que lorsque il y'a par exemple un crochet qui manque quel que part, vous avez plus qu'à abandonner votre programme ! donc faîtes des objets et surtout mettez par exemple les trucs relatifs au graphisme et à la mémoire dans un fichier à part ! de plus si on sépare bien tout si plus tard on veut adapter son programme à un autre système d'exploitation, exemple linux, on aura la tâche simplifiée, on devra juste modifier quelques trucs mineurs ! ouais pis aussi ce qui est top c'est que pour faire des copier coller de code aprés, on reprend juste un fichier contenant l'objet qui nous plait et c plus mieux. Pour résumer, le programmeur de base est feignant, le bon programmeur l'est encore plus et le programmeur en poo est le pire des 3. La poo, c l'art de la feignatise... VI. ME CONTACTER ___________________ si vous voulez me contacter, vous avez le choix : E-MAIL : croqmort@ifrance.com compactez les fichiers joints et ne m'envoyez pas de fichier plus gros que 500 ko ! ICQ : 35295109 je suis souvent là très tard le soir ou très tôt le matin (en ce moment je vais souvent sur internet de 3h00 à 3h30 mais c'est parce que je programme à fond en ce moment, en temps normal, je suis là à minuit !) IRC : irc.kewl.org #h=edm² on as quelque probleme avec les ircops donc on va peut etre partir, mais pour l'instant, J'Y SUIS ! S'Y RESTE ! SITE : www.hacknow.com.bi ou si le redirecteur meurt : www.multimania.com/magedm2 le site est remis à jour tout les ... tous les quand j'ai envie ! (en moyenne tous les 2 mois :)) effectivement, le redirecteur est mort. M'enfin c normal quand on sort 1 zine 1 an aprés que tous les articles ont étés bouclés aussi... et n'oubliez pas d'aller télécharger H=EDM² (j'avoue que les 3 premier mag font pitié :))