Utilité de la POO
Bonjour a tous,
En temps que webmaster freelance(plus graphisme mais bon) je suis souvent amener a faire de code répétitif, seulement l'on ma dit que avec la POO de simple script pouvez être réutilisé plusieurs fois pour différents projets.
C'est vrai ?
Réponses apportées à cette discussion
Hello,
Oui c'est tout à fait vrai et c'est là l'un des principaux avantages de la POO. Coder avec une approche orientée objet permet de développer des composants (classes) qui peuvent être à la fois spécifiques à un projet, ou bien très génériques afin de pouvoir les réutiliser sur n'importe quel autre projet. Par exemple, il existe des ensembles de classes qui permettent de manipuler très simplement des flux RSS ou ATOM, ou bien encore des classes pour envoyer des e-mails plus ou moins complexes. Grâce à de l'OO tu fais non seulement du code réutilisable mais également du code simplifié car en développant une classe, tu écris une API unifiée (ensemble de fonctions / méthodes) qui te permettent de répondre à certains besoins techniques. En somme, grâce à l'OO, tu es capable d'encapsuler des concepts techniques complexes au sein d'une même classe qui dévoile une API plus pratique à utiliser.
Supposons par exemple que je veuille gérer la variable $_SESSION. Au fil de mon code, en procédural, j'accèderai directement à cette variable pour ajouter ou récupérer des valeurs. Ca marche très bien mais quand on relit du code, ça ne veut pas dire grand chose. Si j'écris :
<?php
session_start();
$_SESSION['toto'] = 'foo';
echo $_SESSION['toto'];
Le code me dit implicitement :
- Démarre une nouvelle session pour l'utilisateur courant,
- Enregistre une valeur 'foo' dans le tableau $_SESSION à la clé 'toto'
- Affiche moi la valeur qui se trouve à la clé 'toto' dans le tableu $_SESSION
Maintenant, je propose une classe qui me permet d'abstraire ce tableau $_SESSION et qui me dévoile une API plus lisible :
<?php
class Session
{
protected function $isStarted = false;
public function __construct()
{
if (!$this->isStarted)
{
session_start();
$this->isStarted = true;
}
}
public function read($key)
{
return array_key_exists($key, $_SESSION) ? $_SESSION[$key] : null;
}
public function write($key, $value)
{
$_SESSION[$key] = $value;
}
}
A présent, j'ai une classe à partir de laquelle je peux créer un ou plusieurs objets de type **Session **qui me permettent de manipuler les données enregistrées dans ma session :
<?php
$session = new Session();
$session->write('toto', 'foo');
echo $session->read('toto');
C'est quand même beaucoup plus explicite que le code précédent. Grâce à ma classe Session, j'ai créé un objet session sur lequel je peux appeler des méthodes **read **(lire) et **write **(ecrire). Par conséquent, mon code source est beaucoup plus facile à lire puisqu'il contient des verbes d'action sur des variables très typées (Session). Le typage fort de ma variable, son nom explicite et les méthodes que l'on appelle dessus clarifient considérablement la relecture du code.
Ce n'est pas un hasard si les frameworks comme Zend Framework ou Symfony sont entièrement développés en objet car leur code serait beaucoup trop complexe et presque inutilisable s'ils avaient été écrits en méthode procédurale.
Comprends-tu mieux l'intérêt de la POO ? As-tu commencer à lire les tutoriels POO de ce site ?
Hugo.
Salut, merci pour ta réponse très complète. J'ai belle est bien commencé les tutos sur la POO mais le blem est que si je n'avais aucune connaisances en JS je m'en sortirais pas. J'ai lue que les deux premiers chapitres et j'ai déjà quelques critiques a faire, par exemple tu utilise mais n'explique pas la pseudo variable this. Tu parle de l'opérateur double deux point mais tu passe très vite dessus.
J'ai aussi naviger parmis les chapitres et je n'est pas vue un dédier a un exemple pratique, car pour l'instant je ne voit pas trop ou crée des classes dans mon code tu me comprend ?
EDIT: Finalement il y a bien des exemples pratique :°
Dommage qu'il ni es pas la fonction éditer
Bon je comprend pas a quoi peut bien servir la POO, car tout les exemple que j'ai vue je peut le faire avec de simple fonction Oo
Si tu as du mal à comprendre la POO, tu peux partir d'exemples simples de la vie courante. Prenons, par exemple, une voiture. Une voiture peut être considérée comme un objet, qui a des propriétés (nombre de roues, puissance, puissance fiscale, motorisation) et des méthodes (accélérer, freiner). Une voiture utilitaire et une voiture de sport sont deux instances de l'objet voiture. On peut même aller plus loin, en ce sens que les propriétés et méthodes que j'ai citées sont communes à n'importe quel type de véhicule (voiture, camion, 2 roues). Dans ce cas, on peut imaginer un objet véhicule (un objet générique, si tu veux), qui regroupe les propriétés et méthodes communes à tous types de véhicule (nombre de roues, accélérer, freiner) ; auquel cas l'objet voiture peut hériter des propriétés et méthodes de l'objet véhicule, de même qu'on peut créer à un objet camion, lui aussi héritier de l'objet véhicule ; ces deux derniers objets peuvent non seulement hériter de l'objet véhicule, mais ils peuvent aussi modifier la valeur des propriétés et méthodes.
<?php
// Classe mère
class Vehicule
{
public $nombre_roues = 4;
public $nombre_portes = 0;
}
// Deux exemples de classes filles
class Voiture extends Vehicule
{
public $nombre_portes = 4;
}
class DeuxRoues extends Vehicule
{
public $nombre_roues = 2;
}
$voiture = new Voiture ();
echo $voiture -> nombre_roues; // Affiche 4
echo $voiture -> nombre_portes; // Affiche 4
$moto = new DeuxRoues ();
echo $moto -> nombre_roues; // Affiche 2
echo $moto -> nombre_portes; // Affiche 0
?>
Salut a tous,
Bon j'ai fini d'apprendre la POO, mais toujours le même problème je ne sais oas quand l'utiliser . J'ai crée des class mais elle me serve a rien ^^ .
Pourrais-tu fournir le code des classes que tu as créées ?