Pacorabanix
3142Messages postés
23 août 2007Date d'inscription
24 mai 2012Dernière intervention
26 nov. 2009 à 00:35
voici un exemple peut-être plus concret.
Tu as compris l'intérêt de décomposer ton programme en sous-programmes qu'on appelle fonctions et/ou procédures ?
C'est très bien car ça donne plus de clarté et surtout ça permet d'éviter de devoir recopier plusieurs fois la même chose.
Ensuite imagine que tu as toutes sortes de fonctions, certaines écrites par toi-même, certaines écrites par d'autres (des collègues ou prise sur internet, ou même achetées à des entreprises). Et imagine que tu conçois, à l'aide d'une équipe de programmeurs, un jeux vidéo.
Ton programme sera énorme. Avec toutes les nombreuses fonctions que tu utilises, créer correctement le programme devient un casse-tête.
Selon comment tes collègues programment, et selon ce que tu fais toi et de ce que tu as compris de leur programme, lorsqu'il faudra modifier une certaine fonction, il faudra toujours faire attention à toutes les autres qui les appellent. Pour un jeu, il y a du code pour l'affichage, du code pour la gestion du clavier et de la souris et des manettes, du code pour le scénario, du code pour sauvegarder dans un fichier, du code pour l'intelligence artificielle, etc...
La décomposition en objets permet d'encore plus séparer le programme que simplement en diverses fonctions. On décompose le programme en modules "autonomes" qui savent comment se comporter et qui sont très clair sur la façon de les utiliser.
Ainsi, ton programme sera décomposé en objets divers et variés. Des objets plutôt abstrait par exemple pour s'occuper de l'affichage du jeu ainsi que des menus, un autre pour l'intelligence artificielle... et aussi des objets plus concrets qui te servent par exemple à créer de nouveaux "types" de données plus faciles à manipuler : un type "Personnage". Ce type servira à représenter tout type de personnage dans ton jeu. Cet objet aura des méthodes et des propriétés. Une méthode comme "JouerSon()" qui fera jouer un certain son propre à chaque personnage. Ce sont peut-être un fichier que la méthode va ouvrir, un son préenregistré, de différent format selon l'humeur de votre équipe de programmation... Il y a plein de possibilités de changement. Mais vous aurez bien défini que de toute façon il faudra appeler cette méthode "JouerSon()" de l'objet : vous avez défini son interface publique.
Après, comment exactement est programmé le détail de cette méthode, quel algorithmes, quelles fonctions du système est utilisée, ça c'est à l'équipe qui travaille dessus de voir. Dans tous les cas ceux qui auront besoin de faire appel à cette méthode (par exemple ceux qui programment le scénario) savent très clairement comment l'appeler, et ainsi les choses deviennent beaucoup plus "propres", plus lisibles pour toute l'équipe.
Ensuite, la programmation objet utilise aussi le principe de l'héritage pour réutiliser le code déjà fait : certains personnages particuliers auront besoin de plus de méthodes que celle, basiques, du type "Personnage" de base. Pas de problème ! Au lieu de faire copié-collé le code et de refaire autre chose, on peut créer une classe spécialisée (Ex : Monstre, Marchand, Compagnon de jeu, Joueur) qui auront toutes en commun d'avoir certaines propriétés et méthodes (comme JouerSon() ), mais qui auront d'autres choses plus spécialisées propres à eux, qui n'auraient pas de sens pour les autres. Les "Monstres" par exemple auraient une méthode CalculerValeur() qui renvoie ce qu'on gagne si on les tue. Les "Marchands" auraient une méthode AfficherListeObjets() qui permet de voir ce qu'ils ont à vendre.
Je ne sais pas si mon exemple était parlant.