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

PHP & Base de données Discussion :

Éclaircissement à propos de L'orienté objet [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut Éclaircissement à propos de L'orienté objet
    bonsoir

    Je débute dans la programmation orienté objet, et je trouve quelques problèmes dans l'utilité des attributs !

    Prenons comme exemple une classe MEMBRE. Les caracteristiques d'un membre sont clairs , son id, pseudo,email...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Membre{
     
    $private ID_MEMBRE;
    $private PSEUDO_MEMBRE;
    ...
    functions....
    }
    Pourquoi j'aurais besoin de l'ID ainsi que le pseudo comme attributs, quelle est leur utilité?

    merci d'avance

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $private ID_MEMBRE;
    $private PSEUDO_MEMBRE;
    Déjà, ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private $ID_MEMBRE;
    private $PSEUDO_MEMBRE;
    Mais j'aurais plutôt vu ça comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Membre {
     
        private $_id;
        private $_pseudo;
     
        ... etc ...
    }
    Donc 2 choses :
    A quoi bon rajouter des _MEMBRE aux attributs vu que ces attributs appartiennent déjà à la classe Membre, comme info ça fait doublon à mon sens.


    Puis la "casse" a bien souvent une signification, disons qu'il y a des conventions ou des règles d'écritures, les respecter un minimum rendra le code plus compréhensible, plus intuitif.
    Donc par convention les constantes doivent être en majuscules (MA_CONSTANTE).
    Or, $_id et $_pseudo ne sont pas des constantes, il n'y a pas a les définir en majuscule, ça portera à confusion.

    Aussi, et toujours par convention, tout attribut private (privé) doit être précédé d'un _ (underscore), là aussi c'est pour rendre plus intuitif son code.


    Mais les conventions sont juste des conventions, on est pas obligé de les respecter, on sera d'accord.


    Mise à part cet aparté, si on crée une classe comme celle ci, une classe membre, le but final il me semble c'est de pourvoir accéder à ces attributs, comme tout banalement les afficher coté interface.
    On verrait bien tout naturellement des getter tels que :
    Membre::getId(), Membre::getPseudo(), etc ...

    Coté utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $membre = new Membre($id);
     
    echo 'Pseudo : '.$membre->getPseudo();
    Pure exemple (à faire ou à ne pas à faire, on s'en fiche).
    Ici, on prévoit que cette classe (constructeur) aura un identifiant en paramètre, ce qui permettra de récupérer/initialiser les informations (attributs) du membre en question.
    Par la suite, on peu tout imaginer.


    Disons qu'en disant les choses autrement :
    Si cette classe Membre n'a pas d'attributs id, pseudo, etc ... quelle serait sont but, que manipulerait elle comme données alors ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    par effet de vitesse, j'ai mis le dollar devant le type et non devant l'attribut ! (L'erreur est humaine );


    a part ça, si j'ai bien compris, je crois que les attributs (obligatoires) d'une class ressemblent aux paramètres d'une fonction... par exemple

    une class de traduction de texte à besoin de 3 attributs obligatoires :
    $_lang_depart | $_lang_final | $_text
    ainsi que le $_resultat (au choix).

    $traduction = new Traduction("FR","ANG","Bonjour");
    echo $traduction->getResultat(); //Hello

    ou une classe Commande à besoin de 2 attributs obligatoires : produit et quantité .

    presque vous pensez ?

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    a part ça, si j'ai bien compris, je crois que les attributs (obligatoires) d'une class ressemblent aux paramètres d'une fonction... par exemple
    Oui et non.

    Non car il n'y a aucune obligation (nulle part) que $_lang_depart | $_lang_final | $_text soient des attributs.
    Disons que si on s'arrête à ton exemple, on peu supposer (et simplement supposer) qu'il sera nécessaire de les déclarer.

    Oui dans le sens ou cette classe Traduction à un constructeur qui attends 3 paramètres (ou arguments) obligatoires.
    C'est juste les arguments qui sont obligatoire, ça n'a rien avoir avec les attributs, vois tu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Traduction {
        public function __construct($arg_1, $arg_2, $arg_3) {
            // ... etc ...
        }
    }
     
    $traduction = new Traduction("FR","ANG","Bonjour");
    Ceci tel quel ne provoquera pas d'erreur même si ici il n'y a pas le moindre attribut de déclaré.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    et si c'est comme ça, je vois pas l'utilité des attributs.
    on peut créer une classe avec juste des fonctions et des paramètres.

    Pouvez-vous me montrer un autre exemple dont les attributs sont indispensables!

    merci

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    et si c'est comme ça, je vois pas l'utilité des attributs.
    on peut créer une classe avec juste des fonctions et des paramètres.
    Tout ça dépend du but recherché, le besoin, et selon le cas, le concept réclamera obligatoirement les attributs qui sont des données que manipulera la classe.

    Dans d'autres cas, tout autre besoin, donc tout autre concept la classe n'aura pas besoin de l'ombre d'un attribut, ça existe.

    Il faut percevoir une classe dans son ensemble et surtout pas s'arrêter au constructeur ou 1 ou 2 méthodes.


    Ta classe Membre était un bon exemple où les attributs seraient obligatoires, et l'exemple que j'avais mis avec le Membre::getPseudo() en était un aussi.
    Sans cette propriété $_pseudo non seulement cette méthode getPseudo() aurait aucun sens, mais aussi il y aurait une erreur.
    Dans mon exemple getPseudo() renvoie $_pseudo, c'était 100% explicite il me semble, non ?


    Mais franchement, il n'y pas à poser cette question si les attributs sont obligatoires ou pas, ça n'a pratiquement pas de sens, c'est un détail.
    Tout est une question de concept, et c'est ça qu'il faut comprendre.
    Les concept Objets ne te sont pas encore acquis si tu te pose ce genre de questions.

    Mais on pourra difficilement t'expliquer tous les rouages de la POO comme ça sur un forum, c'est mission impossible à mon sens.
    On risque d'y passer des semaines entières ... pour finalement évoquer des aspects qui se trouvent certainement ailleurs qui plus est de bien meilleurs qualité.

    Le mieux, et ce qui me parais presque évident, c'est qu'il te faut un bouquin (sinon plusieurs) sur la POO, et prospecter les divers tutos sur le Net pour acquérir au moins les bases.
    Disons qu'il te faut de vrai support, et non pas les élucubration des gugus dans mon genre.
    Tu apprendras plus vite, et bien mieux, sans aucun doute.
    A la suite de ça, tu te rendras compte par toi même que tout ça n'est qu'un détail.
    Le plus important n'est pas là, l'intérêt de l'Objet est ailleurs.

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

Discussions similaires

  1. Stack OverFlow ou Violation d'adresse - Orienté Objet
    Par JakeGrafton dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2005, 16h34
  2. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59
  3. Réponses: 2
    Dernier message: 01/05/2005, 14h43
  4. [SGBDOO] Base de données orientée objet
    Par Jaona dans le forum Décisions SGBD
    Réponses: 19
    Dernier message: 14/04/2003, 11h07
  5. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

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