Aller au contenu principal

Les 4 concepts clés de la POO

Rappel théorique

La programmation orientée objet (POO) en PHP repose sur 4 piliers principaux : l'encapsulation, l'héritage, l'abstraction et le polymorphisme.

Ces concepts permettent de structurer le code de manière plus efficace et flexible, facilitant ainsi la maintenance et l'évolution du code.

  • Encapsulation : Il s'agit d'enfermer les données (propriétés) et les méthodes qui les manipulent au sein d'un même objet, en contrôlant l'accès à ces données grâce à des méthodes spécifiques appelées accesseurs (getters) et mutateurs (setters).

  • Héritage : C'est la capacité de définir une nouvelle classe, basée sur une classe existante. La nouvelle classe hérite des propriétés et méthodes de la classe parente, et peut ajouter ou modifier ceux-ci.

  • Abstraction : C'est le processus de cacher les détails de l'implémentation et de ne montrer que la fonctionnalité à l'utilisateur. En PHP, cela se fait en définissant des méthodes et des classes abstraites.

  • Polymorphisme : Il s'agit de la capacité d'une variable, d'une fonction ou d'un objet d'avoir plusieurs formes. En PHP, le polymorphisme est mis en œuvre grâce aux interfaces.

Exemple pratique

Imaginons un jeu de combat avec des personnages. Chaque personnage peut attaquer et défendre, mais la façon dont il le fait dépend de son type. Par exemple, un guerrier attaque avec une épée et un mage avec un sort.

Voici un extrait de code PHP qui met bien en évidence l'utilisation des 4 concepts clés de la POO.

// Abstraction 
abstract class Personnage {
protected $pointsDeVie;
protected $force;

public function __construct($vie, $force) {
$this->pointsDeVie = $vie;
$this->force = $force;
}

// Encapsulation
public function setPointsDeVie($vie) {
if ($vie >= 0) {
$this->pointsDeVie = $vie;
}
}

// Polymorphisme
abstract public function attaquer();
abstract public function defendre();
}

// Héritage
class Guerrier extends Personnage {
public function attaquer() {
echo "Attaque avec une épée\n";
}

public function defendre() {
echo "Défense avec un bouclier\n";
}
}

class Magicien extends Personnage {
public function attaquer() {
echo "Attaque avec un sort\n";
}

public function defendre() {
echo "Défense avec un bouclier magique\n";
}
}

Test de mémorisation/compréhension


Qu'est-ce que l'encapsulation en PHP ?


Qu'est-ce que l'héritage en PHP ?


Qu'est-ce que l'abstraction en PHP ?


Qu'est-ce que le polymorphisme en PHP ?


Quel est le rôle des accesseurs (getters) et mutateurs (setters) dans l'encapsulation ?


Qu'est-ce qui est vrai à propos des classes abstraites en PHP ?


Quelle est la différence entre une classe abstraite et une interface en PHP ?


Qu'est-ce que le mot clé `this` représente en PHP ?


Quel est le rôle du constructeur dans une classe PHP ?


Qu'est-ce qui est vrai concernant les méthodes privées en PHP ?


Quelle est la différence entre les méthodes publiques et les méthodes protégées en PHP ?


Qu'est-ce qui est vrai concernant les propriétés privées en PHP ?


Quelle est la différence entre les propriétés publiques et les propriétés protégées en PHP ?


Qu'est-ce qui est vrai concernant l'héritage en PHP ?


Qu'est-ce qu'un objet en PHP ?


Qu'est-ce qu'une classe en PHP ?