Article Passer d'un code procédural à la programmation orientée objet (POO) - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Article Passer d'un code procédural à la programmation orientée objet (POO) (/showthread.php?tid=8211) |
Passer d'un code procédural à la programmation orientée objet (POO) - Xenos - 14-09-2020 Passer d'un code procédural à la programmation orientée objet (POO) Ce tutorial est grandement basé sur les échanges de ce sujet du forum : [special thanks aux participants pour leurs questions et à ceux qui ont pris le temps de répondre] Objectifs Ce tutorial a pour objectifs de :
On ne parlera pas en détail de :
Le but est de motiver à la POO, la technique se trouvera dans d'autres tutoriaux. Introduction On entend souvent parler de la POO en termes positifs :
Facile à dire, mais concrêtement , comment on fait ? La première étape est l'utilisation de fonctions. Utiliser des fonctions C'est quoi une fonction ? Une fonction est un petit bout de programme, avec un nom, que l'on peut utiliser et réutiliser dans un programme. On doit définir la fonction, ensuite on peut l'utiliser. exemple :
Pourquoi et quand utiliser une fonction ? On va utiliser les fonctions pour simplifier le code : DRY ( Don't Repeat Yourself, ne recopie pas ton code ) : Si on utilise un bout de code à plusieurs endroits d'une page, oubien sur plusieurs pages, alors on peut utiliser une fonction. Les avantages sont :
Raccourcir le code : Même si un code n'est pas répété à plusieurs endroits, créer une fonction est intéressant. Si vérifier les données pour un formulaire d'inscription prend 100 lignes, puis que l'on fait l'inscription ou un formulaire d'erreur selon le résultat, avec les 100 lignes de départ, on n'aura pas une vue d'ensemble du script. Script sans fonctions, peu lisible car on a du code sur plusieurs écrans :
Script avec fonctions, lisible car on a le script en quelques lignes, avec des noms de fonctions compréhensibles :
Le code avec des fonctions est plus court et plus lisible que le code sans fonctions. On a une vision globale du script. Pour rentrer dans le détail, il faut consulter le fichier fonctions/inscription.php, qui contient le code technique des fonctions. Le code avec fonctions ressemble fortement au pseudo code, traitant la logique du script :
Avec les fonctions, on obtient 2 niveaux de débuggage :
Plus loin, plus beau que les fonctions : la POO Modifier un code avec des fonctions : problèmes... Avec les fonctions, on rend les scripts plus courts, plus lisibles, le code technique est centralisé, on corrige les bugs plus facilement. Un problème se posera lorsqu'on fera évoluer le script. Continuons sur le script d'inscription : On gère les informations suivantes :
On a fait des fonctions qui marchent bien, aux noms parlants :
On veut passer à la V2, et ajouter des races, à choisir à l'inscription. On doit modifier les fonctions :
C'est facile, tout est dans le fichier fonctions/inscription.php . Mais on doit aussi modifier le script utilisant les fonctions : on doit ajouter partout $race aux arguments. C'est facile si tout se trouve dans un seul script, mais :
On a un code technique facile à corriger : les bugs sur la fonction sont à un seul endroit. Mais le code est embêtant à faire évoluer : il faut parcourir tous les fichiers pour trouver toutes les utilisations de la fonction et les modifier à chaque fois. Pas très pratique… Ca serait pratique de faire disparaitre les arguments des fonctions lorsqu'on les utilise, comme ça on ne devra pas modifier tous les scripts. C'est faisable grâce à la POO & l'encapsulation. Faire "disparaître" les arguments des fonctions L'idée derrière la POO & l'encapsulation, c'est de relier les données/ les variables et les fonctions. Reprenons les fonctions d'inscription :
Concernant les données, on a :
Ces données constitueront les membres ( ou attributs ) de la classe. Les membres d'une classe sont des variables qui stockent des valeurs.
Les fonctions seront des méthodes dans la classe. Elles utiliseront les valeurs stockées dans les membres à la place des arguments. on aura donc :
Comment les méthodes accèdent-elles aux membres ? En utilisant le $this :
Il manque un point important : l'initialisation des membres. Comment attribuer des valeurs aux membres ? Via une méthode spéciale : le constructeur. Une première approche est :
Mais ça ne va pas : si on doit ajouter encore un membre à la classe, par exemple la date de naissance ou le pays, il faudra modifier les scripts partout où le constructeur est utilisé… on en revient au même qu'avec les fonctions. La deuxième approche est l'utilisation d'un tableau pour initialiser les membres : chaque index de tableau portera le nom d'un membre :
Cette fois-ci, l'ajout d'un membre ne modifiera pas l'utilisation du script. On a gagné ! Pour l'ajout d'une donnée à l'inscription, on aura donc les modifications suivantes à effectuer :
et c'est tout ! Le script de traitement ne changera pas :
Quelques pistes pour débuter en POO
Tout ceci constitue une première approche de la POO. On peut faire des choses plus poussées, des constructions spécifiques permettant de modifier et de faire vivre un code encore mieux que ce qui est présenté ici, mais c'est une autre histoire… Quelques liens utiles
écrit par Pascal, sur la base des éléments proposés par les camarades de jeuphp |