La programmation orientée-objet en PHP, à l’attention des débutants

> Introduction

Généralement les tutoriaux sur la programmation Orientée-Objet est un bourbier avec de grandes et longues théories, des mots compliqués comme encapsulation, héritage et abstraction. Tout ceci peut rebuter un débutant qui désire tout simplement débuter la programmation avancée en PHP.

Nous allons explorer dans ce tutorial, une approche simple avec des termes simples, qui vous permettrons de débuter rapidement cette approche dans vos projets, et en tirer les bénéfices. Ce qui ne doit pas pour autant vous empêcher d’approfondir plus tard la programmation avancée et orientée-objet.

> La boîte magique (Objets)

Imaginez une boîte. Elle peut être de n’importe quel type que vous désirez… une petite boîte à bijoux, une boîte en bois, en plastique, grande ou petite, large ou longue…

Maintenant, imaginez-vous placer quelque chose dans cette boîte… un rocher , un million d’euros, etc…

Ne serait-il pas pratique si nous pouvions nous pencher sur cette boîte, et lui demander de nous dire ce qu’il y a à l’intérieur d’elle sans l’ouvrir ? Et bien c’est possible!

<?php
$maBoite = new Boite("Malice");
echo $maBoite->direContenu();
?>

Ici la variable $maBoite représente notre boîte magique, et qui est ce qu’on appelle un objet au sens informatique du terme, et qui est créé par l’instruction new (considérons-la comme la plus petite équipe de construction du monde). Nous voulons placer la « Malice » à l’intérieur de la boîte à sa construction. Quand nous voulons demander à la boîte ce qu’elle contient, nous utiliserons la fonction de $maBoite qui s’appelle direContenu().

Mais le code ne fonctionnera pas tout seul comme ça, car nous n’avons pas indiquez à l’instruction new la direction à prendre pour lui et son équipe dans la construction de notre « boîte » et PHP ne sait pas ce que la fonction direContenu () est censée faire.

> Les classes

Une classe est une représentation abstraite d’un ensemble de données. C’est un plan qui permet de construire notre boîte, un mode d’emploi. Il est fait d’un ensemble de variables et de fonctions qui permet à notre boîte d’exister et d’interagir. Avec ce « plan » nous pouvons construire notre boîte avec les spécifications précises que nous désirons.

<?php
class Boite
{
var $contenu;
function Boite($contenu) {
$this->contenu = $contenu;
}
function direContenu() {
return $this->contenu;
}
}
$maBoite = new Boite("Malice");
echo $maBoite->direContenu();
?>

Regardons de plus près notre « plan » : Il contient la variable $contenu qui est utilisée pour se remémorer le contenu de la boîte. Il contient aussi deux fonctions, Boite() et direContenu().

Quand la boîte est créée, PHP cherchera et exécutera la fonction qui portera le même nom que la classe elle-même. C’est pourquoi notre première fonction a le même nom que la classe. Et si nous regardons encore plus attentivement, nous noterons que le rôle de Boite () est d’initialiser le contenu de la boîte, en le lui passant en paramètre. C’est ce qu’on appelle un constructeur.

$this est utilisée pour signaler à Boite() que le contenu est une variable qui est rattachée à l’ensemble de la classe, et n’est propre et spécifique à la fonction Boite(). $this->contenu est une variable définie comme un élément de la classe, elle lui est propre.

La fonction direContenu() retourne la valeur stockée dans la variable régissant le contenu de la boîte $this->contenu.

Quand le script PHP est exécuté, la classe Boite() est définie, new construira un objet Boite et transmettra le paramètre « Malice » à sa fonction d’initialisation (constructeur) qui porte le même nom que la classe elle-même, et stockera cette valeur qui sera accessible à toutes les fonctions définies comme appartenant à la classe.

> Les méthodes

Pour demander à laboîte ce qu’elle contient, la fonction direContenu() est utilisée. Les fonctions définies dans la classe sont appelées méthodes ; elles agissent comme des méthodes pour communiquer avec les données dans la boîte, et les manipuler.

L’intérêt avec les méthodes, est qu’elles nous permettent de rassembler plus aisément la définition des données ainsi que le code pour les manipuler, et de les séparer de notre script PHP actuel.

<?php
include("class.Boite.php");
$maBoite = new Boite("Malice");
echo $maBoite->direContenu();
?>

Nous pouvons ainsi mettre tout le code de définition de notre classe dans un fichier séparé (dans l’exemple nous l’avons appelé « class.Boite.php ») et ensuite nous utilisons include() pour l’importer dans notre script. Notre script devient ainsi plus simple, plus aéré, et plus lisible pour d’autres (ou pour soi, si nous revenons sur le code six mois plus tard) car nous utilisons les noms des méthodes de façon littérale et explicite.

Un autre avantage des méthodes est qu’elles permettent à notre « boîte »; ou quelque que puissent être les objets que nous ayons créés, d’avoir une interface standard que chacun puisse utiliser. Nous pouvons ainsi partager nos classes avec d’autres programmeurs, ou les importer dans d’autres scripts ou les fonctionnalités qu’elles autorisent sont nécessaires.

<?php
include("class.Boite.php");
$maBoite = new Boite("Idée");
echo $maboite->direContenu();
?>
<?php
include("class.Boite.php");
$maBoite = new Boite("Chaussures");
echo $maBoite->direContenu();
?>

> Extensions (héritage)

Une boîte magique est un objet formidable à posséder. Mais elle n’est capable que de nous dire ce qu’elle contient. Et si nous voulons ajouter une nouvelle fonctionnalité, inutile de créer une nouvelle classe, au lieu de cela nous pouvons créer une classe qui étend la classe originelle par de nouvelles fonctionnalités.

<?php
include("class.Boite.php");
class BoiteChaussures extends Boite
{
var $taille;
function BoiteChaussures($contenu, $taille) {
$this->contenu = $contenu;
$this->taille = $taille;
}
function donneTailleChaussures() {
return $this->taille;
}
}
$maBoite = new BoiteChaussures("Chaussures", 10);
echo $maBoite->direContenu();
echo $maBoite->donneTailleChaussures();
?>

Grâce à l’attribut extends, notre script possède dorénavant une classe BoiteChaussures() dérivée de la classe Boite() originelle. BoiteChaussures() possède les mêmes fonctionnalités que la classe Boite(), mais aussi des fonctions spécifiques à ce type de boîte.

La possibilité d’écrire des « ajouts » à notre code, nous donne une grande flexibilité lors du test de nouvelles fonctions, et nous fait gagner du temps en nous permettant de réutiliser le même noyau de code.

<?php
include("class.Boite.php");
include("extensions.Chaussures.php");
include("extensions.Idees.php");
include("extensions.Cartons.php");
$maBoite = new BoiteChaussures("Chaussures", 10);
$monIdee = new BoiteIdee("Suggestion");
$monCarton = new BoiteCarton('', "fragile", "20 cm", "30 cm", "50 cm");
?>

> Conclusion

Vous comprenez dorénavant d’où la programmation orientée-objet tire son nom. En considérant la construction de programmes comme un ensemble d’objets autonomes portant en eux-même, informations et actions inhérentes à ces informations. Lorsque l’on conçoit ces programmes, il faut se poser la question « sur quelles données va porter le programme ? », et non pas « que va faire le programme ? ».

La capacité d’écrire du code modulaire que la programmation orientée-objet permet de gagner du temps lors de la conception, réduit le stress, et facilite le partage de votre travail avec d’autres. Ce n’est pas très difficile, j’ai essayé d’éviter le jargon technique habituellement utilisé, et qui bien souvent obscurci l’esprit du débutant qui voudrait comprendre ce qu’est la programmation orientée-objet. Ce qui ne doit absolument pas vous empêcher d’approfondir plus loin cette dernière ainsi que les techniques avancées de programmation. Ce que j’ai réalisé n’est qu’un simple « marche-pied »

> Liens

Voici quelques liens sur des sites susceptibles d’enrichir votre connaissance de PHP, ainsi que sur la programmation orientée-objet.

Copyright © 2002 (and more) SuperSonique.net. All rights reserved.

Pas de commentaire

Publier un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Activer les notifications Super merci ! Non merci !
On which category would you like to receive?