Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2011, 01h22   #1
Invité régulier
 
Mehdi Xxxx
Inscription : novembre 2009
Messages : 32
Détails du profil
Informations personnelles :
Nom : Mehdi Xxxx

Informations forums :
Inscription : novembre 2009
Messages : 32
Points : 6
Points : 6
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 :
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
Medyo4zy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 08h05   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Code :
1
2
3
 
$private ID_MEMBRE;
$private PSEUDO_MEMBRE;
Déjà, ce serait plutôt :
Code :
1
2
3
 
private $ID_MEMBRE;
private $PSEUDO_MEMBRE;
Mais j'aurais plutôt vu ça comme ceci :
Code :
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 :
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 ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 13h24   #3
Invité régulier
 
Mehdi Xxxx
Inscription : novembre 2009
Messages : 32
Détails du profil
Informations personnelles :
Nom : Mehdi Xxxx

Informations forums :
Inscription : novembre 2009
Messages : 32
Points : 6
Points : 6
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 ?
Medyo4zy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 16h25   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
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 :
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é.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 16h36   #5
Invité régulier
 
Mehdi Xxxx
Inscription : novembre 2009
Messages : 32
Détails du profil
Informations personnelles :
Nom : Mehdi Xxxx

Informations forums :
Inscription : novembre 2009
Messages : 32
Points : 6
Points : 6
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
Medyo4zy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h20   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h53   #7
Invité régulier
 
Mehdi Xxxx
Inscription : novembre 2009
Messages : 32
Détails du profil
Informations personnelles :
Nom : Mehdi Xxxx

Informations forums :
Inscription : novembre 2009
Messages : 32
Points : 6
Points : 6
Merci pour ces explications, j'essayerais de chercher des tutos ou des cours mêmes s'ils sont sont rares.
je croix qu'avec la pratique je finirais par comprendre

merci encore
Medyo4zy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h06.


 
 
 
 
Partenaires

Hébergement Web