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] Pourquoi utiliser les classes ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut [POO] Pourquoi utiliser les classes ?
    Bonjour à tous,

    Je vois maintenant des classes partout et je ne comprend pas leurs avantages.
    Il doit bien en avoir un puisque tout le monde l'utilise.
    Voici un exemple utilisant les classes (la syntaxe est sans doute mauvaise, je n'ai jamais écrit de classes, mais ce n'est pas le propos)

    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
     
    <?php
      class porte {
        function GetColor() {
          return $this->color;
        }
        function SetColor($color) {
          $this->color = $color;
        }
      }
    ?> 
     
    <?
    	$porte_garage = new porte();
    	$porte_garage -> SetColor('rouge');
    	echo $porte_garage->GetColor();
    ?>
    Maintenant le contre exemple sans utiliser les classes.

    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
     
    <?php
    	function GetColor($porte) {
    		return $porte['color'];
    	}
    	function SetColor($porte, $color) {
    		$porte['color'] = $color;
    	}
    ?>
     
    <?
    	$porte = new array();
    	SetColor($porte_garage,'rouge');
    	echo GetColor($porte_garage);
    ?>
    Donc ma question est: Pourquoi l'utilisation des classes dans un tel cas ? Et dans quel cas c'est mieux ?
    Je doit louper quelquechose d'évident sans doute....

    Merci à tous !

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Salut,

    Parce qu'avec ta classe, ta porte je la transforme en une porte vitrée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class PorteVitree extends porte
    {
     
    }
    Bon l'exemple est pas idéale.. Vu qu'on ne dessine pas de porte en php je sait pas trop quoi etendre :s

    Mais avec un produit.
    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
     
    class ProduitGenerique{
    private $Ref;
    private $Prix;
    private $Nom
     
    public function __get($prop)
    {
    switch($prop)
    {
    case "prix":
    return $prix*TVA/100 + $prix;
    break;
    ect..
    }
    }
    public function __set($prop , $value)
    {
    ect ...
    }
    }
    Maintenant je veux en faire des choux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Choux extends ProduitGenerique{
    public $Couleur;
    public $Fraicheur;
    ect..
    }
    ou bien encore des casquettes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Casquette extends ProduitGenerique{
    public $Couleur;
    public $Taille;
    public $Marque;
    ect..
    }
    Voila deja un interet des classes.
    En effet avec une base commune on peut créer un tas d'objet.
    Ici l'exemple est un pau ballo et le gain de temps n'est pas immense, mais sur de plus gros projets c'est surement plus interessant.

    Le passage par référence (avec les bons et les mauvais cotés).
    Qui permet d'éviter la facheuse copie par valeur, je pense notemment au tableaux qui des fois prennent des dimensions disproportionnées :/
    Avec une classe ton tableau, si il est encapsulée dans un objet bien sur, est passé par référence donc plus de soucis de perf.

    Une autre chose que j'apprécie beaucoup avec les classes et le faits de sentir mon code plus proche de mon modèle conceptuel.
    Et puis il faut dire que je ne me perds plus dans mes 250 fonctions...
    Une fonction est rattachée à un contexte, elle se retrouve plus rapidement et je perds moins de temps.

    Voila pour moi les différentes choses que m'ont apportées le passage à l'orientée objet.
    Je ne cites pas ici les design patterns et ce qu'ils permettent, je pense ici au singleton que je me voie mal implémenter sans une classe...
    C'est peut être possible mais ce n'est pas la question, et puis ce sujet est trop nouveau pour moi pour que je m'étende la dessus je préfère laisser la parole à d'autres.

    Bon ceci dit il faut pondérer tout cela car en effet le passage ne se fait pas sans quelques douleurs, et puis pour tiré aux mieux parti de ces possibilités il est necessaire de connaitre la théorie avant de se lancer dans la pratique...
    Car sinon on passe à coté de monstre de possibilités qui pourrait faciliter la vie !

    Fin voila, j'espère que tu trouveras quelques réponses dans ce post.

    Bye

  3. #3
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Salut, ce débat a déjà eu lieu il y a pas très longtemps.
    Je te laisse aller lire le sujet qui en parle.
    Les avis sont partagés.
    J'espère que ça te permettra de mieux comprendre les pours et les contres. Et pourquoi pas continuer le débat si tu veux.
    a+

  4. #4
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Merci epox pour ta réponse détaillé et merci nako pour ton lien pour le moins détaillé également.

    En tous cas, ce que je vois, c'est que les avis sont en effet partagés, avec quand même quelques points d'avance pour les classes.

    Mais bon, comme je suis asser curieux de nature, je vais me lancer tranquilement dans une refonte de quelques unes de mes librairies...

    Et puis j'ai cru comprendre qu'une fois qu'on y avait gouté, on ne pouvais plus s'en passer, alors...

    Merci encore et bonne continuation !

  5. #5
    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
    Tu peux lire un article visiblement intéressant pour toi sur wikipedia =>
    http://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Citation Envoyé par GregPeck
    Et puis j'ai cru comprendre qu'une fois qu'on y avait gouté, on ne pouvais plus s'en passer, alors...
    $reponse = new Reponse();
    $reponse->dire("ah bon ?");
    $reponse->dire("même pas vrai que je suis accro a la poo");
    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

  7. #7
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    Un autre interet que j'y trouve :
    Avant j'ecrivais des fonctions. Certaines d'entre elles devaient me renvoyer plusieurs valeurs (par exemple une fonction surface_et_volume_cube qui me renverrait la surface d'une face et le volume du cube en fonction de l'arete).
    Classiquement, je lance :
    surface_et_volume_cube($longueur_arete);
    Probleme 1 : une fonction ne renvoie qu'une valeur, il faut donc faire une bidouille qui me renvoie un tableau avecmes deux valeurs
    Probleme 2 : 6 mois plus tard, je decide que je veux la meme chose mais pour un volume rectangulaire (sait plus le nom !) quelconque et en prime recuperer la longueur de l'arete d'un cube pour obtenir ce meme volume. Ca m'oblige a modifier ma fonction qui devient :
    surface_et_volume_cube($longueur_arete1,$longueur_arete1,) en plus de me retourner un tableau avec de nouvelles valeurs.
    Il faudra donc aussi modifier le code qui utilise cette fonction.

    La solution : les classes
    - Renvoie autant de valeurs que l'on veut, avec des noms explicites
    - Creation de nouvelles fonctions dans la classe, je n'ai donc pas besoin de retoucher le code existant si je ne souhaite pas l'ameliorer.

    Bref, depuis que j'utilise les classes, j'ai du mal a m'en passer !
    Sohnic
    http://www.noctinfo.fr/

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
    (")-(")

  8. #8
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Merci à tous pour toutes ses infos...

    Je vais m'y mettre donc vous aurez peut être bientôt de mes nouvelles pour des problèmes....

    @ ploutch !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  2. [POO] Problème avec les classes
    Par peypey dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 15h05
  3. [débutante]utiliser les classes css pour surligner des liens
    Par Mitaka dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/01/2006, 09h37
  4. [POO] projet ->soutirer les classes objets
    Par .:dev:. dans le forum C++
    Réponses: 10
    Dernier message: 14/06/2005, 23h05
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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