JeuWeb - Crée ton jeu par navigateur
De l'orienté objet en PHP - 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 : De l'orienté objet en PHP (/showthread.php?tid=2713)

Pages : 1 2


De l'orienté objet en PHP - Yoda54 - 05-07-2008

Bonjour,

Depuis quelques temps, je me documente par ci par là sur la programmation orienté objet; et à chaque lecture, je me pose toujours les mêmes questions: en quoi cela pourra m'être utile? Comment vais-je l'utiliser?
Et là, une sorte de grand vide se créer...
En fait, d'une façon générale, j'ai du mal à voir l'intérêt de la programmation objet dans un langage traité côté serveur car hormis le code source en lui-même, je ne vois pas bien ce qui va changer dans la façon de procéder.

Prenons l'exemple du garage que l'on retrouve assez souvent. Je vois bien la conception avec des classes moto, voiture et camion filles de la classe véhicule. Il sera alors aisé d'afficher tous les véhicules du garage sur une page et de les différencier par type de véhicule.
Admettons maintenant que je veuille tous les détails d'une voiture en particulier. En PHP procédurale, j'aurai à disposition un lien par véhicule me menant vers une autre page et à l'ouverture de cette page une requête SQL restreinte à la voiture concernée, suivi de l'affichage du résultat.
Et en OO?!? Et bien je ne vois pas bien ce qui va changer puisque pour afficher une autre page il faudra bien passer par le serveur et donc faire une nouvelle requête à la BDD avant l'affichage.


RE: De l'orienté objet en PHP - Kassak - 05-07-2008

Je ne pense pas que l'une ou l'autre manière de coder est plus ou moins efficace...

C'est un choix du programmeur, j'ai longtemps essayer de passer à la POO, mais comme toi je n'en vois jamais l'utilité, et je m'en sors très bien avec mes quelques fonctions, et mon procédural.

Je ne pourrais pas te dire clairement les avantages de la POO, peut être plus de flexibilité, moins de ligne de code etc...mais je ne l'utilise pas donc je sais pas.

Donc coder de façon procédurale, dites méthode barbare n'est pas une honte !!


RE: De l'orienté objet en PHP - emaia - 05-07-2008

Bonjour,
L'avantage de la POO c'est qu'elle est plus facile à standardiser, à transporter d'une application à l'autre, plus facile de s'en rappeler (un appel à une classe, un fichier...)
Il est aussi plus facile à lire une classe, quand il n'y en a qu'une par fichier PHP.
La classe organise mieux la présentation (facilité de lecture, de modification, de maintenance...)
Un autre avantage est de permettre de définir 2 classes différentes avec des méthodes aux noms communs mais aux comportements différents. C'est le principe du design "pattern Factory", par exemple :
Admet 3 classes "PDF", "SWF", "PTT" aux noms de méthode identiques alors tu obtiens une classe "DocumentFactory" permettant de générer soit un PDF soit un SWF soit un PPT avec le même code applicatif, simplement en changeant le nom du fichier.
En espérant t'être utile Smile
Cordialement, emaia.


RE: De l'orienté objet en PHP - Bladrak - 05-07-2008

Hello,

Il est vrai qu'au niveau performances du serveur, je suis pas certain que l'objet apporte quelque chose par rapport au procédural (il est même possible que ça soit l'inverse).

Cependant l'objet trouve son utilité (à mon sens en tout cas) dans le multi-développement (plusieurs développeurs). La répartition des tâches est plus aisée, et les autres développeurs n'auront qu'à lire les docs de tes classes pour utiliser les méthodes.

On peut comparer ça à un système de rangement de bibliothèque :
- le procédural c'est ta propre méthode de rangement, et à moins d'y passer beaucoup de temps, personne d'autre que toi ne s'y retrouver.
- l'objet c'est un rangement alphabétique (ou par genres, enfin un truc classique quoi).

Edit : grillé par emaia Tongue


RE: De l'orienté objet en PHP - Sephi-Chan - 05-07-2008

Pour ma part, j'ai longtemps été détracteur de l'OO (mais vraiment hein, je ne serais pas fier si on épluchait tous mes messages pour me montrer ceux où je crache sur l'OO) et j'ai échoué à 2 ou 3 reprises à l'apprentissage de cette méthode de programmation.

Et maintenant ben, je trouve ça carrément mieux. Tu peux te créer un genre d'API pour ton site, avec un comportement très unitaire.

Par exemple pour la connexion d'un membre, je fais :

Code PHP :
<?php 
$player
= new Player();
$player->setName($name);
$player->setPassword($password);
$player->load();

C'est on ne peut plus clair : on crée un objet Player vide, on lui file un nom de compte et un mot de passe, et on lui demande de charger les informations, le tout sans me soucier du support des informations (fichiers, BdD, annuaire, etc.), qui ne concerne pas la couche applicative.

Prenons ensuite par exemple l'édition du profil de ce joueur. J'ai juste à faire :
Code PHP :
<?php 
if($email != $player->getEmail()) $player->setEmail($email);
if(
$password == $confirmPassword) $player->setPassword($password);
$player->save();

Je stock mon objet $player en session, accessoirement. C'est plus sympa que stocker les informations dans un tableau. Wink

Et le mieux là dedans, c'est que je peux facilement utiliser ma classe Player pour un autre projet, j'ai alors juste à mettre mon fichier Player.class.php dans le dossier contenant mon application, il ne me reste plus qu'à l'appeler ensuite (et sans à avoir à inclure le fichier, grâce à l'autoload. Wink

De plus, ce comportement est le même pour toutes mes classes : on lui donne des informations puis on lui demande une action.


Sephi-Chan


RE: De l'orienté objet en PHP - Yoda54 - 05-07-2008

Merci de vos réponses qui, cela va de soi, amènent des commentaires et d'autres questions.

Tout d'abord Kassak, pour te rassurer, je ne vois pas le procédural comme une honte Big Grin
Les deux méthodes me paraissent simplement être deux approches différentes visant à résoudre le même problème.

A emaia et Bladrak, vous me confirmez ce qu'il m'avait semblez comprendre de l'intérêt de la POO. Une meilleure lisibilité du code, une transposition accrue et des facilités de développement en équipe. Mais il manque ce côté qui m'échappe jusqu'ici et qui me donne l'impression que l'on ne peut exploiter que la moitié de la POO avec PHP, c'est que je ne vois pas d'utilisation concrète aux méthodes mais simplement un réceptacle à données offrant un code source "plus lisible".

J'en viens donc à l'exemple fourni par Sephi-Chan concernant la création de son objet "Player".
Et tu mets là le doigt sur ma principale interrogation: où se situe physiquement ce morceau de code? Et de là découle une question simple: qu'y a-t-il dans la méthode load()? Car pour qu'il y ait interactivité avec un langage interprété côté serveur comme PHP, il faut qu'il y ait envoi de requête et c'est précisemment là que je bute sur l'utilisation concrète de la POO par rapport au procédural.


RE: De l'orienté objet en PHP - Bladrak - 05-07-2008

En fait le problème de la POO en PHP c'est que la plupart des développeurs en sont restés à leurs concepts de la version 4 de PHP. À savoir que sous cette version, il n'y avait pas de protection des variables. C'est arrivé avec la version 5 (les variable private, public ou protected - cette dernière étant la meilleure à mon avis).

Passer les variables des classes en privé ou protégé permet de ne les modifier que dans certains cas, et de s'assurer plus facilement que les conditions sont remplies.
Je prends un exemple avec une classe d'unité. Dans la base je vais avoir un nombre total d'unités, un nombre en défense et un nombre en attaque. Dans ma classe, ces données sont représentées par 3 variables protected (puisqu'il y a des classes héritées derrière). Admettons que je veuille permettre au joueur de de modifier le nombre en défense. Ça va passer au final par une seule méthode de ma classe, qui va s'assurer que la somme des nombres en attaque et en défense soit égale au nombre total avant d'effectuer l'opération.
Donc une meilleure gestion des bugs, liée à une centralisation des traîtements des données, et un gain de temps très appréciable en phase de débogage (notamment avec les nombreuses fonctions débug liées au classes apparues avec la version 5 de PHP Smile ).


RE: De l'orienté objet en PHP - Sephi-Chan - 06-07-2008

Voici une partie des sources de mon jeu (c'est assez sommaire encore) : Seelies - Sources. Tu y verras un peu l'architecture que j'utilise et tu pourras voir la classe Player. Wink

La POO n'apporte rien au niveau du fonctionnement, les mécanismes de communication client-serveur ne sont pas transcendées par l'OO Wink. C'est juste plus clair, plus propre et plus cohérent.


Sephi-Chan


RE: De l'orienté objet en PHP - emaia - 06-07-2008

Bonjour,
De très nombreuses pasges sont indexées, réalise-tu ton jeu en OpenSource ? Smile
Ou c'est juste pour une meilleure lisibilité pour le spersonnes avec lesquelles tu travaille ?
Cordialement, emaia.


RE: De l'orienté objet en PHP - pascal - 06-07-2008

d'autres pistes pour comprendre l'intérêt de la POO :
http://wiki.jeuweb.org/tutoprog:passage_a_la_poo

A+

Pascal