IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] langage objet et php. [Tutoriel]


Sujet :

Langage PHP

  1. #1
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut [POO] langage objet et php.
    Bonjour,

    Je programme en php depuis plusieurs années. Etant programmeur débutant/inité je n'ai toujours pas ressenti le besoin (en ce qui concerne les applications web courantes), d'utiliser la programmation objet comme on le fait couramment en java (débutant également) ou en C++.
    J'aimerais avoir votre avis sur l'utilisation de la programmation orientée objet en php :
    : Est ce un réel gain de temps en programmation ?
    : dans quel cas la notion d'objet est indispensable ?
    : pour quel type d'application ?

    Merci.

  2. #2
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    bonjour,

    regarde deja ce topic, je pense que tu trouveras quelques reponses
    http://www.developpez.net/forums/viewtopic.php?t=416036
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Bonjour,

    Je peux répondre à la question, mais je pense que tu auras plus de réponses sur le forum dédié à la modélisation/conception.

    Pour répondre donc à ta question, pour ma part, il est essentiel de programmer en objet à partir du moment où on peut définir un ensemble d'objets.

    La programmation objet apporte beaucoup de notions interessantes :
    - L'encapsulation permet d'avoir des objets "autonomes" en quelque sorte, qui se gère eux mêmes. C'est excellent, car dans ce cas, les mecanismes liés à l'objet lui même lui sont propres, et donc il est très facile de savoir où modifier son code, ou bien où ça cloche. En plus, ça simplifie beaucoup la programmation : un objet complexe ayant beaucoup de mecanismes internes peut être utilisé très simplement, sans avoir à manipuler la complexité de l'objet; seul les parties "visibles" sont accessibles pour les elements extérieurs, et donc ça rend tout beaucoup plus simple.

    - Le polymorphisme et l'héritage permettent de manipuler des objets, sans se soucier de leur type. Ainsi, par exemple, tu peux utiliser la méthode "afficher()" d'un objet, sans avoir à connaitre ce que fait cette méthode : l'objet lui le sait, et en fonction de son type, il peut faire différents traitements, l'exemple classique, est un programme qui affiche des objets à l'écran, chaque objet a une forme, une couleur propre, et se dessinne différement, mais dans le programme global, tu feras appel à la même methode "dessinerObjet()". C'est très puissant... L'héritage permet de factoriser les notions communes entre les classes. C'est une notion plus difficilement utilisable efficacement dans les projets web ( je trouve ) mais il y a des cas où c'est très interessant, car ça permet de voir un ensemble d'objets différents comme des objets d'une même "famille", ayant donc des propriétés communes. Ca factorise le code, le rend plus propre, par exemple au lieu de redéfinir à chaque fois 50 propriétés qui sont déjà définies pour la famille de l'objet, tu ne peux définir que celles qui sont necessaires pour ce type d'objet particulier; le code qui représente la classe de cet objet est donc beaucoup plus petit et lisible, c'est un peu ce qu'on fait dans lavrai vie, quand on analyse des objets, on detecte leurs familles, pour ensuite comprendre leurs fonctionnements : si dans notre tête on avait une distinction forte entre un téléphone analogique et un téléphone numérique par exemple, on aurait un problème pour stocker tous les types différents de téléphones qui peuvent exister

    Le gain en temps de programmation est discutable : c'est en propreté et en possibilité d'évolution que tu vas gagner; on te demandera une modification sur un truc précis ? Facile, il suffit de reperer l'objet correspondant, et de modifier les lignes qui vont bien, et partout où cet objet sera utilisé, la modif sera prise en compte automatiquement : imagine sans objet, la galère ! Puis l'exemple que j'ai donné, des formes qui se dessinent toutes seules, imagines ça sans objet c'est à se tirer une balle !
    K

  4. #4
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par KiLVaiDeN
    C'est une notion plus difficilement utilisable efficacement dans les projets web ( je trouve ) mais il y a des cas où c'est très interessant, car ça permet de voir un ensemble d'objets différents comme des objets d'une même "famille", ayant donc des propriétés communes.
    merci de ta réponse.

    Que ce soit clair, pour moi, étant débutant je ne remettrais pas en cause la notion de programmatino orientée objet qui est irremplaçable dans certains cas comme tu l'as dis précédemment !
    Mais tu confirmes un peu ce que je pense, en php (destiné essentiellement pour des applications web), c'est plus difficilement utilisable. En général, ce que l'on demande à un code php s'est d'effectuer une tâche (calcul, insertion bdd, manipulation de fichier) qui dépend peu de ce que tu viens de faire précdemment, l'interaction avec l'utilisateur se résumant à quelques clics, il me semble que la conception d'objets demande beaucoup d'efforts en php pour "peu de choses", elle reste cependant très intéressante j'imagine pour la conception de forum, où des structures en "arbre" sont indispensables :
    forum.title.topic.repondre();
    forum.title.topic.nouveau();
    forum.title.topic.supprimer();

    Un exemple où je me demande comment appliquer la notion d'objet :
    j'ai réalisé un test en html/php/mysql, les seules tâches que je demande à php sont :
    faire une boucle pour afficher les questions du test (20 lignes grosso modo)
    faire un boucle pour enregistrer les réponses utilisateurs (20 lignes g modo)
    faire un boucle pour comparer les réponses utilisateurs avec les réponses du test (20 lignes aussi)

    Comme dans beaucoup de cas me semble-t-il php permet d'effectuer une tâche bien précise, point c tout (et c'est ça aussi qui le rend si pratique).
    Il me semble que le fait que les objets php n'aient qu'une durée de vie égale à celle de l'execution du script, rend difficile (laborieuse) la prog objet. non ?

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    non car tu peux les mettre en session voir meme les serialiser sur fichier ou base.
    la session les serialise de toute maniere.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    Je ne savais pas que l'on pouvait passer des objets en session, ce qui donne plus d'intérêt à la programmation objet effectivement, je vais me pencher dessus je crois. En revanche serialiser sur un fichier ou une base me semble être fou d'un point de vue de l'efficacité de l'application !!!

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    oui enfin ca depend, quand tu as une base de données et que tu fais un dev objet avec des objets metiers, ton mapping objet/bd c est un peu comme de la serialisation quand meme.
    (un peu j'ai dis, j ai pas envie de me faire achever par des puristes)
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  8. #8
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    je ne suis pas sûr de bien comprendre. Si tu as une application compte en banque, tu utilises une base de données me semble-til de façon naturelle (ta structure est toute faite, utilisation de jointures...), tu vas quand même pas créer des objets via php pour les insérer dans une base de données ou un fichier ?
    Il me semble que ta notion d'objet est très "statique", ça s'apparante plutôt à du stockage structuré de données plutôt qu'à de la programmation orientée objet. il ya une belle perte d'efficacité ici !

    Ce que tu disais sur les variables de session me paraît bien mieux pour faire de la POO avec php.

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    on s'est pas compris,
    quand je te parle d objet metiers, ce sont des objets qui te permettent de t affranchir de la maniere dont sont stockée les données.
    Toi tu demande a voir un onjet compte en banque point.
    Qu il aille chercher ses infos en xml, sql ou autre peut importe.

    Tes objets vont te permettre de manipuler les données en memoire.
    Apres faudra bien a un moment ou a un autre rebalancé les infos sur ton mode de persistance.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    A partir du moment où l'application est vouée à évoluer, il faut penser à la modulariser un maximum, pour qu'une modification de fond ou de forme n'impacte pas 50 fichiers : c'est là l'interet majeur.

    Pour des petites applications, il est inutile et lourd de faire de l'orienté objet : ton appli avec des questions c'est un exemple d'application qui ne necessite pas d'objets : une évolution de cette application écrite en objet, ou en procédural, ne changera pas grand chose au niveau temps ( même si dans le cas d'une application objet ça prendrait quand même moins de temps ! )

    L'objectif de la programmation objet est la factorisation, je pense que c'est LE point à retenir : d'autres te diront que le modèle est plus propre, qu'il est beau de programmer en objet, mais il faut une raison, et la raison c'est la factorisation : plus tu écris de lignes pour faire un même programme, plus t'es exposé aux problèmes liés aux évolutions et aux changements. Et je parle pas des répétitions de code, qui sont encore plus terrible !

    Pour revenir à ce dont parle siddh, c'est une architecture dite "multicouche", où chaque couche est accessible via une interface, et donc quand tu decides que tu veux voir "tous les comptes pour le client 28", pof, tu interroges la couche "applicative", qui contient les objets métiers et les fonctions metiers, tu fais un truc du genre "coucheApplicative.getComptes(28)" et la couche applicative te retourne un objet, de type "liste de compte", qui n'a pas forcément grand chose à voir avec la structure de ta bdd. C'est en ça qu'on différencie les objets métiers des objets entreprises, qui eux, sont normalement des répliques table par table de la strucrure, mais qui ne sont pas forcément interessant au final..
    K

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    +1 8)

  12. #12
    Inscrit Avatar de sanosuke85
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 206
    Points : 179
    Points
    179
    Par défaut
    Oyo à tous,

    Euh je me permets de poser une question car je lis les postes sur les classes et objets php afin de mieux cerner leur utilisation (j'ai déjà développé en objet pour créer un forum moi-même (oui je sais phpbb etc mais bon pour moi c'est comme ça qu'on apprend ^^)). Et j'ai toujours du mal à cerner le réel intérêt.

    Ce qui m'interpèle beaucoup : c'est qu'on peut faire dessiner des formes différentes tout seul... Euh j'aimerai qu'on puisse m'expliquer un peu plus ce concept si possible (voir un petit exemple de code si c'est possible toujours bien sur ^^)

    Merci d'avance !

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    alors imagine que tu as codé une classe utilisant gd par exemple,
    tu pourras faire un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $triangle = new Triangle();
    $triangle->setRectangle(true);
    $triangle->setDimensions(3,4,5);
    $triangle->dessinesToi();
    En partant du principe que tu as fais une classe Forme, toutes tes formes en hériteront et pourront surcharger la méthode dessinesToi
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class Forme {
       function dessine() {}
    }
     
    class Cercle extends Forme {
       function dessine() {
          return "cercle";
       }
    }
     
    class Carre extends Forme {
       function dessine() {
          return "carré";
       }
    }
     
    $mes_formes = array();
    $mes_formes[] =& new Cercle();
    $mes_formes[] =& new Carre();
     
    foreach($mes_formes as $forme) {
       echo $forme->dessine();   //Tu n'as pas à te soucier du type
    }
    edit: grilled mais plus complet

  15. #15
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  16. #16
    Inscrit Avatar de sanosuke85
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 206
    Points : 179
    Points
    179
    Par défaut
    Merci à vous deux

    Je vais étudier vos deux codes sources pour mieux comprendre leur fonctionnement, faire des tests et analyser tout ça

    Merci encore mes Seigneurs hehe

Discussions similaires

  1. [POO] Cours sur le PHP orienté objet
    Par gforce dans le forum Langage
    Réponses: 12
    Dernier message: 06/11/2006, 09h20
  2. [POO] Sérialisation d'objet en PHP
    Par Invité(e) dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2006, 15h37
  3. [POO] Orienté Objet en PHP
    Par Amine_sas dans le forum Langage
    Réponses: 1
    Dernier message: 15/08/2006, 18h56
  4. Réponses: 14
    Dernier message: 23/05/2006, 19h44
  5. [POO] Programation objet en php
    Par ldcarpathes dans le forum Langage
    Réponses: 5
    Dernier message: 24/01/2006, 00h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo