JeuWeb - Crée ton jeu par navigateur
Article Introduction à la POO - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Article Introduction à la POO (/showthread.php?tid=8210)



Introduction à la POO - Xenos - 14-09-2020

[POO] Introduction à la POO

Bonsoir à tous.
Puisque j'ai l'impression que le sujet est récurrent j'ai décidé de faire un petit tuto d'apprentissage des bases de la POO en php5.
Je sais qu'un tuto similaire existe déjà mais bon, je vais le faire à ma sauce.
Plus on est de fou plus on ris 2

Concepts génériques
  • Un objet en programmation, c'est une variable qui est composée de propriétés et de méthodes. Cet objet est régi par des règles qui sont définie dans une classe

  • Un objet en programmation c'est aussi et surtout la représentation en code d'un concept d'objet "réel", qui soit figuratif (ex: une voiture) ou non (ex:une base de donnée).

  • Les propriétés d'un objet sont en fait des variables qui lui sont attribués (ex: couleur,taille,vitesse).

  • Les méthodes d'un objet sont en fait des fonctions qui effectuent des opérations sur l'objet lui même (ex : modifications de propriétés)


Concept approfondis
  • Un objet possède deux méthode obligatoires (mais pas forcément déclaré, dans ce cas elle sont implicites et ne font rien de spécial) , le constructeur et le destructeur

  • Le constructeur est la méthode qui est éxécuté automatiquement lors de la création de l'objet dans le code.

  • Le destructeur, la même chose lorque l'objet est détruit, soit par la code, soit à la fin de l'éxecution de la page.

  • Les méthodes peuvent êtres publique , privée, protégée et statiques suivant la façon dont elle doivent être utilisée.

  • Les méthodes publique peuvent être appelée de n'importe ou dans n'importe quel cas

  • Les méthodes privée ne peuvent être appelée qu'a l'intérieur de l'objet, c.a.d une méthode publique qui fait appel à des méthode privé à l'intérieur d'elle même


Exemple

<?php
class Voiture {
public $couleur;
public $taille;
public $vitesse;
 
function __construct() {
$this->couleur = bleue; // tu l'aura remarqué, on fait appels aux propriété en faisant référence appelé à un objet appellé $this
$this->vitesse = 0;
}
 
public function avancer($vit) {
$this->vitesse += ($vit + 1);
}
 
public function couleur($col) {
$this->couleur = $col;
}
 
}
?>

Regardons maintenant comment créer une voiture 2

include 'voiture.class.php'; // il faut inclure la classe correspondante à  un objet si l'on veut en créer un
$oVoiture = new Voiture();

Un objet voiture est maintenant créé, et stocké dans la variable $oVoiture
Lorsqu'on a créé la voiture en faisant new , la fonction de construction à été appelée, la voiture est donc bleue, et à une vitesse de zéro. Par contre sa taille elle n'a pas été initialisée, elle est donc inexistante
Maintenant on va faire avancer la voiture, donc on va augmenter sa vitesse. Et puis pourquoi pas lui donner une taille aussi ça peut le faire non ?

$oVoiture ->taille = 4; // on fait appel aux propriétés de cette façon $objet->propriete
$oVoiture->avancer(5); // et aux méthodes comme ceci $objet->methode($argument)

La première ligne correspond à un changement de propriété de notre objet. Cette propriété est publique on peut donc la changer, et cela se passe de la même manière qu'avec n'importe quelle variable. Notre voiture a donc maintenant une taille de 4.
La seconde ligne correspond à l'appel d'une méthode de la classe. Elle aussi est publique et donc accessible. On peut passer des paramètres dans les méthodes objets de la même façon que dans une fonction. Si vous avez bien suivi vous savez donc que la voiture à maintenant une vitesse de 6 (voire la classe pour la façon d'augmenter la vitesse).

L'héritage

Une autre fonction très intéressante de la programmation objet est la notion d'héritage. C'est à dire qu'un objet peut "récupère" les propriété et fonctions de l'objet dont il hérite. Voici un premier exemple tout simple avec une classe camion :

<?php
class Camion extends Voiture {
public $roues;
 
function __construct() {
$this->couleur = rouge;
$this->vitesse = 1;
}
 
}
?>

Avec cette classe, nous pouvent éxecuter sans probleme ce code :

include 'voiture.class.php'; 
include 'camion.class.php';
$oCamion = new Camion();
$oCamion->taille = 8;
$oCamion->roues = 6;
$oCamion->avancer(5);

Suite à ce code, on se retrouve avec un camion rouge, qui à une taille de 8, qui possède 6 roues et qui à une vitesse de 7.
Le camion à hérité de la fonction avancer de la classe voiture, et également de ses propriétés taille,couleur et vitesse. Ainsi pas besoin de réécrire un code que nous avions déjà.
Par contre, la camion à une spécificité, son nombre de roues. On peut le spécifier pour le camion, mais c'est une propriété qui lui est exclusive, l'objet voiture lui n'en hérite pas.

C'est vraiment utile ?

Bien imaginons que cette voiture fait partie d'un jeu de voiture, ou toutes les voitures sont stockées dans une base de données. Une page de ton jeu permet disons de faire du tuning de ta voiture et de la sauvegarder. Une page comme celle ci prend normalement beaucoup de ligne, avec les requêtes mysql, les vérifications des objets passés en paramètre, la chargement de la voiture avant modifications etc. Avec une classe bien préparé, on peut arriver à ceci par exemple :

$oVoiture = new Voiture(5); // on charge les données de la voiture 5
$oVoiture->couleur = $couleur; // on change la couleur de la voiture
$oVoiture->reparationMoteur; // une fonction répare les dégats moteur de la voiture
$oVoiture->nouvelleCarosserie($taille,$options); // on en profite pour changer aussi le châssis
$oVoiture->Sauvegarde(); // et on sauvegarde toutes les modifications dans la base de données

Plutôt sympa non ?

Composé par mdcarter