Vous êtes sur la page 1sur 9

Programmation PHP Septembre 2010

IFT1147 Plan
Programmation Serveur Web avec PHP
 Lecture du chapitre 20.
La POO en PHP  Programmation par objets
 Introduction à la POO
 Objets et classes
 Propriétés
 Méthodes
 Private
 Héritage
 Polymorphisme et héritage multiple
IFT1147 - Introduction à PHP 2

PHP 4 et PHP 5
Programmation par objets

 PHP 4 supportait déjà quelques rudiments


POO en PHP ce n’est pas encore ce de la programmation par objets:
que ça pourrait être, mais …  Constructeurs
 Héritage
 PHP 5 supporte
 private, public
 Destructeurs
 Method overloading
IFT1147 - Introduction à PHP 4

1
Programmation PHP Septembre 2010

Programmation procédurale vs POO POO vs procédurale (suite)

 POO (suite)
 Procédurale  Les employés
 Définitions de données  Définition de données
 Définition de données pour les employés  Code de manipulation des données
 L’inventaire
 Définition de données pour l’inventaire  Définition de données
 Instructions de manipulation des données  Code de manipulation des données
 Code de manipulation des données pour les employés  En quoi cela est-il mieux que la programmation procédurale?
 En regroupant les données et les programmes on s’assure d’avoir des programmes
 Code de manipulation des données pour l’inventaire mieux adaptés (??)
On cache les détails d’implémentation interne des données et en même temps on
 POO 
s’assure d’une meilleure consistence.
 Le concept général de la POO permet de regrouper les  On force le programmeur qui veut réutiliser le programme à utiliser les bons
mécanismes de modification des données (mutateur/accesseur avec validation)
données et les instructions de manipulation en unités  Plus facile de réutiliser les instructions et les données.
conceptuelles  Etc...

IFT1147 - Introduction à PHP 5 IFT1147 - Introduction à PHP 6

POO Définition de nos types de données

 Définition de nos types de données  Le concept principal consiste à définir nos


propres types de données.
 Terminologies
 Intégrer dans ces données des mécanismes
 Encapsulation pour les valider, les initialiser, les modifier et
 Héritage les consulter.
 Constructeurs et desctructeurs  Permettre la création d’objets utilisant ces
types. Le processus de création de ces objets
 Définition en PHP s’appelle l’instanciation.

IFT1147 - Introduction à PHP 7 IFT1147 - Introduction à PHP 8

2
Programmation PHP Septembre 2010

Terminologies Encapsulation

 Classe: type de données défini par le programmeur.  L’encapsulation consiste à cacher les détails internes utiles au
 Objet: instance de la classe. On défini la classe une seule fois et fonctionnement et à l’implémentation du type de données.
on l’utilise plusieurs fois pour créer des objets.  Au niveau programmation on pourra décider de rendre disponible
 Donnée membre: aussi appelée attribut ou propriété et seulement certaines portions du type de données au monde
représente une valeur faisant partie des données de la classe. extérieur et cacher le reste (les détails d’implémentation). De
 Fonction membre: aussi appelée méthode et représente une cette manière le concepteur qui décide de modifier la portion
fonction permettant d’agir sur les données de la classe. cachée peut le faire sans risque d’affecter les programmeurs
l’utilisant car il est certain qu’ils ne voient pas cette portion.
 Classe parent: c’est la classe utilisée pour dériver une nouvelle
classe. On l’appelle aussi classe de base.  Il est également possible de forcer la modification des données en
passant par un mutateur (fonction de modification) qui permettra
 Classe enfant: c’est la nouvelle classe dérivée à partir d’une classe de valider le changement avant qu’il soit effectuer.
parent.
 De la même manière il est possible de forcer la lecture en passant
par un accesseur (fonction de lecture).
IFT1147 - Introduction à PHP 9 IFT1147 - Introduction à PHP 10

Héritage L’héritage (suite)

 C’est la base des notions de réutilisation de composants logiciels.


 Le concept d’héritage est le plus  L’idée est de pouvoir définir (dériver) une nouvelle classe en se
important de la POO. Il permet la servant d’une classe existante (base).
 La classe dérivée hérite des membres de la classe de base tout en
réutilisation de type de base défini par lui ajoutant de nouveaux.
l’utilisateur tout en permettant de  Il s’agit d’écrire de nouvelles classes plus spécifiques en se
servant des définitions de base.
spécialiser le type.  Par exemple, nous pouvons dériver une nouvelle classe Employe
en se servant de la classe de base Personne.
 Permet de définir la relation “est un”. Par exemple, un employé
est une personne ou encore un étudiant est une personne. Un
cercle est une forme géo…

IFT1147 - Introduction à PHP 11 IFT1147 - Introduction à PHP 12

3
Programmation PHP Septembre 2010

Généralités (héritage) Constructeurs/destructeurs

class Personne  Un constructeur servira à initialiser le contenu d’un


nom,
objet et même dans certains cas à allouer l’espace
naissance, nécessaire aux données membres de l’objet.

 Le constructeur est appelé automatiquement lors de la
création de l’objet, il est alors impossible de l’oublier.
Class Etudiant  Un destructeur permet de libérer les ressources
class Employe
utilisées par un objet.
poste, progEtude,
salaire, codePermanent
Etc… Etc…

IFT1147 - Introduction à PHP 13 IFT1147 - Introduction à PHP 14

Programmation par objets en PHP Exemple

class NomDeLaClasse {
 La classe est l’élément de base de la var $propriete1;
programmation par objets. Elle est le var $propriete2;
modèle à partir duquel des instances function __construct() {
//constructeur
peuvent être créées. }
 Une classe est un conteneur pour des function fonction() {
propriétés (variables) et des méthodes // méthode
}
(fonctions). On dit propriétés et }
méthodes membres. Note: avant PHP5 le constructeur utilisait le même
nom que la classe. Mais on n’utilise plus cette méthode
IFT1147 - Introduction à PHP 15 IFT1147 - Introduction à PHP 16

4
Programmation PHP Septembre 2010

Instanciation La classe Employe

class Employe {
 Afin d’instancier un objet, il faut utiliser var $nom;

le mot clé new var $salaire;


function __construct($n, $s) {
$maVar = new NomDeLaClasse(); $this->nom = $n;
$this->salaire = $s;

 Afin de faire référence à une propriété }


function toHTML() {
de l’objet, il faut utiliser -> return "<strong>Le nom:</strong><em>$this->nom</em>".
"<strong>sal:</strong><em>$this->salaire</em>";
$maVar->prop = 23; }
}
$bob = new Employe( "Bob", 45000 );
echo $bob->toHTML();

IFT1147 - Introduction à PHP 17 IFT1147 - Introduction à PHP 18

Utilisation de $this Constructeur et destructeur en PHP

 Le constructeur est automatiquement appelé lors de


 Afin de faire référence à une propriété à l’instanciation d’un objet de la classe.
l’intérieur de la classe, il faut utiliser  Le constructeur est une méthode dont le nom est
$this __construct( ) (notez le double souligné).
 En PHP4 le constructeur portait le même nom que la
$this->age = 23; classe.
 Seulement le dernier constructeur défini sera utilisé.
 Le desctructeur est automatiquement appelé lorsqu’on
détruit un objet. Le nom du destructeur est
__destruct( ). Pour détruire un objet la fonction
unset(objet) sera utilisée.

IFT1147 - Introduction à PHP 19 IFT1147 - Introduction à PHP 20

5
Programmation PHP Septembre 2010

Le mot clé private L’héritage plus spécifiquement

 Dans l’exemple précédent avec $bob utilisant la classe Employe  L’héritage consiste à réutiliser une classe de base (plus
les propriétés $nom et $salaire sont publiques (par défaut). Les
propriétés sont accessibles aux utilisateurs de la classe. générale) pour en faire une version plus spécialisée.
 Il est alors possible de faire:  Par exemple, nous pourrions faire une classe Personne
$bob->salaire = -12000; qui contient les propriétés nom et adresse pour ensuite
 En POO ce comportement n’est pas désirable, car les propriétés dériver une nouvelle classe Employe à partir de
ne devraient être accessibles que par des méthodes de la classe.
Cela permet un minimum de cohérence des données ainsi la Personne. Cette nouvelle classe permettrait d’ajouter
méthode qui sert à modifier le salaire peut valider la nouvelle la propriété salaire et les méthodes qui s’y rattache.
valeur avant de faire ces modifications.
 private $nom;
Dans la même ordre d’idée nous pourrions dériver une
private $salaire; autre classe Etudiant à partir de la classe Personne
 Il est aussi possible de rendre privé des méthodes, qui ne pour lui ajouter son dossier étudiant et les méthodes
pourront être utilisées qu’à l’intérieur de la classe. permettant de le manipuler.

IFT1147 - Introduction à PHP 21 IFT1147 - Introduction à PHP 22

L’héritage La classe Personne

class Personne {
Personne private $nom;
• nom, adresse, tel private $adresse;
private $tel
function __construct($n, $a, $t) {
$this->nom = $n;
Etudiant $this->adresse = $a;
Employe Client
•programme, $this->tel = $t;
•salaire, poste •achats }
•cours, notes
function toHTML() {
// …
Les classes dérivées héritent des propriétés nom, adresse et tel en }
plus de pouvoir utiliser les méthodes définies dans la classe de base }
$toto = new Personne( "toto", "123 rue Laval", "514…");
echo $toto->toHTML();

IFT1147 - Introduction à PHP 23 IFT1147 - Introduction à PHP 24

6
Programmation PHP Septembre 2010

La classe dérivée Employe Méthodes statiques

class Employe extends Personne {


private $salaire;  Certaines méthodes d’une classe
private $poste;
function __construct($n, $a, $t, $s, $p) { peuvent être exécutées sans qu’on ait à
parent::__construct($n, $a, $t);
$this->salaire = $s; créer une instance de celle-ci.
}
$this->poste = $p;
 Ces méthodes sont appelées statiques.
function toHTML() {
// …  Afin d’exécuter une méthode statique il
}
}
faut la préfixer par le nom de sa classe,
$bob = new Employe("toto","123…","514…",45000,"prog");
echo $bob->toHTML();
suivie de ::
LaClasse::laMethode();
IFT1147 - Introduction à PHP 25 IFT1147 - Introduction à PHP 26

Conventions Avantages des objets

 Le nom d’une classe débute généralement par une  L’implémentation d’une classe peut être
majuscule. Ceux des attributs et méthodes par une
minuscule. changée sans que les appels à celle-ci
 Ne manipulez pas les attributs d’une classe à l’extérieur aient à être modifiés.
de celle-ci, mais définissez des méthodes pour l’accès:  La programmation par objets permet de
Accesseurs: pour lire un attribut getAtt()
créer du code très modulaire et

par exemple: echo bob->getNom();


 Mutateurs: pour modifier la valeur setAtt($var) réutilisable.
par exemple: bob->setNom("Larue");
 Elle permet de penser en termes d’objets
du domaine de l’application.
IFT1147 - Introduction à PHP 27 IFT1147 - Introduction à PHP 28

7
Programmation PHP Septembre 2010

Concrètement: toHTML() Concrètement: toHTML()

 On programme souvent une méthode  L’utilisation la plus simple de toHTML()


toHTML() qui permet d’obtenir est donc
l’affichage HTML de l’objet. echo $monObj->toHTML();
 Il est généralement avantageux de  Cette façon de faire simplifie l’utilisation
laisser cette méthode retourner une de librairies de gestion de page qui
chaîne de caractères (donc, on n’utilise deviennent de plus en plus la norme
pas echo dans toHTML()). pour des projets d’envergure.

IFT1147 - Introduction à PHP 29 IFT1147 - Introduction à PHP 30

Concrètement: $_GET et $_POST Concrètement: $_GET et $_POST

 Il est généralement avantageux de ne  Vous aurez alors des objets qui sont
pas accéder directement $_GET et  indépendants du protocole HTTP
$_POST à l’intérieur d’objets si ceux-ci  qui peuvent être utilisés dans n’importe quel
ne font pas partie de la couche de contexte (web, application indépendante,
présentation (« interface HTML »). script, etc.)
 Il vaut mieux ajouter des paramètres aux  pour lesquels des tests unitaires sont faciles
méthodes et passer $_GET ou $_POST à concevoir (parce qu’on n’a pas besoin de
créer un contexte « web »).
comme paramètres aux fonctions.
IFT1147 - Introduction à PHP 31 IFT1147 - Introduction à PHP 32

8
Programmation PHP Septembre 2010

Polymorphisme et héritage multiple Notions avancées de POO

 Le polymorphisme est supporté  Membres protected


partiellement en PHP 5. La redéfinition  Interfaces
d’une méthode dans une classe enfant  Constantes
permettra de surcharger ce nom et la
méthode correspondante sera appelée  Classes abstraites
en fonction du type de l’objet utilisé.  Utilisation des méthodes de la classe de
 L’héritage multiple n’est pas supporté en base
PHP 5.  Surcharge des méthodes
IFT1147 - Introduction à PHP 33 IFT1147 - Introduction à PHP 34

Pour aller plus loin Lectures intéressantes

 La programmation par objets a permis  Extreme Programming Explained


de jeter de nouveaux regards sur la Kent Beck, Addison Wesley (2000)
programmation  Test-Driven Development By Example
Kent Beck, Addison Wesley (2003)
 Extreme Programming
 Design Patterns
 Test-driven Development
Erich Gamma et al., Addison Wesley (1995)
 Refactoring
 Patterns of Enterprise Application Architecture
 Catalogues de Design Patterns Martin Fowler, Addison Wesley 2003

IFT1147 - Introduction à PHP 35 IFT1147 - Introduction à PHP 36

Vous aimerez peut-être aussi