Vous êtes sur la page 1sur 9

Programmation PHP

Septembre 2010

Plan

IFT1147
Programmation Serveur Web avec PHP
La POO en PHP

Lecture du chapitre 20.


Programmation par objets

Introduction la POO
Objets et classes
Proprits
Mthodes
Private
Hritage
Polymorphisme et hritage multiple
IFT1147 - Introduction PHP

PHP 4 et PHP 5

Programmation par objets


POO en PHP ce nest pas encore ce
que a pourrait tre, mais

PHP 4 supportait dj quelques rudiments


de la programmation par objets:

Constructeurs
Hritage

PHP 5 supporte

private, public

Destructeurs

Method overloading
IFT1147 - Introduction PHP

Programmation PHP

Septembre 2010

POO vs procdurale (suite)

Programmation procdurale vs POO

POO (suite)

Procdurale

Dfinitions de donnes

Les employs

Linventaire

En quoi cela est-il mieux que la programmation procdurale?

Instructions de manipulation des donnes

Code de manipulation des donnes pour les employs


Code de manipulation des donnes pour linventaire

POO

Dfinition de donnes pour les employs


Dfinition de donnes pour linventaire

Le concept gnral de la POO permet de regrouper les


donnes et les instructions de manipulation en units
conceptuelles
IFT1147 - Introduction PHP

POO

Dfinition de donnes
Code de manipulation des donnes

En regroupant les donnes et les programmes on sassure davoir des programmes


mieux adapts (??)
On cache les dtails dimplmentation interne des donnes et en mme temps on
sassure dune meilleure consistence.
On force le programmeur qui veut rutiliser le programme utiliser les bons
mcanismes de modification des donnes (mutateur/accesseur avec validation)
Plus facile de rutiliser les instructions et les donnes.
Etc...

IFT1147 - Introduction PHP

Dfinition de nos types de donnes

Dfinition de nos types de donnes


Terminologies
Encapsulation
Hritage
Constructeurs et desctructeurs
Dfinition en PHP
IFT1147 - Introduction PHP

Dfinition de donnes
Code de manipulation des donnes

Le concept principal consiste dfinir nos


propres types de donnes.
Intgrer dans ces donnes des mcanismes
pour les valider, les initialiser, les modifier et
les consulter.
Permettre la cration dobjets utilisant ces
types. Le processus de cration de ces objets
sappelle linstanciation.
7

IFT1147 - Introduction PHP

Programmation PHP

Septembre 2010

Terminologies

Encapsulation

Classe: type de donnes dfini par le programmeur.


Objet: instance de la classe. On dfini la classe une seule fois et
on lutilise plusieurs fois pour crer des objets.
Donne membre: aussi appele attribut ou proprit et
reprsente une valeur faisant partie des donnes de la classe.
Fonction membre: aussi appele mthode et reprsente une
fonction permettant dagir sur les donnes de la classe.
Classe parent: cest la classe utilise pour driver une nouvelle
classe. On lappelle aussi classe de base.
Classe enfant: cest la nouvelle classe drive partir dune classe
parent.

Lencapsulation consiste cacher les dtails internes utiles au


fonctionnement et limplmentation du type de donnes.
Au niveau programmation on pourra dcider de rendre disponible
seulement certaines portions du type de donnes au monde
extrieur et cacher le reste (les dtails dimplmentation). De
cette manire le concepteur qui dcide de modifier la portion
cache peut le faire sans risque daffecter les programmeurs
lutilisant car il est certain quils ne voient pas cette portion.
Il est galement possible de forcer la modification des donnes en
passant par un mutateur (fonction de modification) qui permettra
de valider le changement avant quil soit effectuer.
De la mme manire il est possible de forcer la lecture en passant
par un accesseur (fonction de lecture).

IFT1147 - Introduction PHP

IFT1147 - Introduction PHP

Hritage

Lhritage (suite)
Cest la base des notions de rutilisation de composants logiciels.
Lide est de pouvoir dfinir (driver) une nouvelle classe en se
servant dune classe existante (base).
La classe drive hrite des membres de la classe de base tout en
lui ajoutant de nouveaux.
Il sagit dcrire de nouvelles classes plus spcifiques en se
servant des dfinitions de base.
Par exemple, nous pouvons driver une nouvelle classe Employe
en se servant de la classe de base Personne.
Permet de dfinir la relation est un. Par exemple, un employ
est une personne ou encore un tudiant est une personne. Un
cercle est une forme go

Le concept dhritage est le plus


important de la POO. Il permet la
rutilisation de type de base dfini par
lutilisateur tout en permettant de
spcialiser le type.

IFT1147 - Introduction PHP

10

11

IFT1147 - Introduction PHP

12

Programmation PHP

Septembre 2010

Gnralits (hritage)

Constructeurs/destructeurs
Un constructeur servira initialiser le contenu dun
objet et mme dans certains cas allouer lespace
ncessaire aux donnes membres de lobjet.
Le constructeur est appel automatiquement lors de la
cration de lobjet, il est alors impossible de loublier.
Un destructeur permet de librer les ressources
utilises par un objet.

class Personne
nom,
naissance,

Class Etudiant

class Employe

progEtude,
codePermanent
Etc

poste,
salaire,
Etc

IFT1147 - Introduction PHP

13

Programmation par objets en PHP

14

Exemple
class NomDeLaClasse {
var $propriete1;
var $propriete2;
function __construct() {
//constructeur
}
function fonction() {
// mthode
}
}

La classe est llment de base de la


programmation par objets. Elle est le
modle partir duquel des instances
peuvent tre cres.
Une classe est un conteneur pour des
proprits (variables) et des mthodes
(fonctions). On dit proprits et
mthodes membres.
IFT1147 - Introduction PHP

IFT1147 - Introduction PHP

Note: avant PHP5 le constructeur utilisait le mme


nom que la classe. Mais on nutilise plus cette mthode
15

IFT1147 - Introduction PHP

16

Programmation PHP

Septembre 2010

Instanciation

La classe Employe
class Employe {
var $nom;
var $salaire;
function __construct($n, $s) {
$this->nom = $n;
$this->salaire = $s;
}
function toHTML() {
return "<strong>Le nom:</strong><em>$this->nom</em>".
"<strong>sal:</strong><em>$this->salaire</em>";
}
}
$bob = new Employe( "Bob", 45000 );
echo $bob->toHTML();

Afin dinstancier un objet, il faut utiliser


le mot cl new
$maVar = new NomDeLaClasse();
Afin de faire rfrence une proprit
de lobjet, il faut utiliser ->
$maVar->prop = 23;

IFT1147 - Introduction PHP

17

Utilisation de $this

18

Constructeur et destructeur en PHP


Le constructeur est automatiquement appel lors de
linstanciation dun objet de la classe.
Le constructeur est une mthode dont le nom est
__construct( ) (notez le double soulign).
En PHP4 le constructeur portait le mme nom que la
classe.
Seulement le dernier constructeur dfini sera utilis.
Le desctructeur est automatiquement appel lorsquon
dtruit un objet. Le nom du destructeur est
__destruct( ). Pour dtruire un objet la fonction
unset(objet) sera utilise.

Afin de faire rfrence une proprit


lintrieur de la classe, il faut utiliser
$this
$this->age = 23;

IFT1147 - Introduction PHP

IFT1147 - Introduction PHP

19

IFT1147 - Introduction PHP

20

Programmation PHP

Septembre 2010

Le mot cl private

Lhritage plus spcifiquement

Dans lexemple prcdent avec $bob utilisant la classe Employe


les proprits $nom et $salaire sont publiques (par dfaut). Les
proprits sont accessibles aux utilisateurs de la classe.
Il est alors possible de faire:
$bob->salaire = -12000;
En POO ce comportement nest pas dsirable, car les proprits
ne devraient tre accessibles que par des mthodes de la classe.
Cela permet un minimum de cohrence des donnes ainsi la
mthode qui sert modifier le salaire peut valider la nouvelle
valeur avant de faire ces modifications.
private $nom;
private $salaire;
Il est aussi possible de rendre priv des mthodes, qui ne
pourront tre utilises qu lintrieur de la classe.

IFT1147 - Introduction PHP

Lhritage consiste rutiliser une classe de base (plus


gnrale) pour en faire une version plus spcialise.
Par exemple, nous pourrions faire une classe Personne
qui contient les proprits nom et adresse pour ensuite
driver une nouvelle classe Employe partir de
Personne. Cette nouvelle classe permettrait dajouter
la proprit salaire et les mthodes qui sy rattache.
Dans la mme ordre dide nous pourrions driver une
autre classe Etudiant partir de la classe Personne
pour lui ajouter son dossier tudiant et les mthodes
permettant de le manipuler.
21

Lhritage

Etudiant
programme,
cours, notes

class Personne {
private $nom;
private $adresse;
private $tel
function __construct($n, $a, $t) {
$this->nom = $n;
$this->adresse = $a;
$this->tel = $t;
}
function toHTML() {
//
}
}
$toto = new Personne( "toto", "123 rue Laval", "514");
echo $toto->toHTML();

Client
achats

Les classes drives hritent des proprits nom, adresse et tel en


plus de pouvoir utiliser les mthodes dfinies dans la classe de base

IFT1147 - Introduction PHP

22

La classe Personne

Personne
nom, adresse, tel

Employe
salaire, poste

IFT1147 - Introduction PHP

23

IFT1147 - Introduction PHP

24

Programmation PHP

Septembre 2010

La classe drive Employe

Mthodes statiques

class Employe extends Personne {


private $salaire;
private $poste;
function __construct($n, $a, $t, $s, $p) {
parent::__construct($n, $a, $t);
$this->salaire = $s;
$this->poste = $p;
}
function toHTML() {
//
}
}
$bob = new Employe("toto","123","514",45000,"prog");
echo $bob->toHTML();

IFT1147 - Introduction PHP

Certaines mthodes dune classe


peuvent tre excutes sans quon ait
crer une instance de celle-ci.
Ces mthodes sont appeles statiques.
Afin dexcuter une mthode statique il
faut la prfixer par le nom de sa classe,
suivie de ::
LaClasse::laMethode();
25

Conventions

Accesseurs: pour lire un attribut getAtt()


par exemple: echo bob->getNom();
Mutateurs: pour modifier la valeur setAtt($var)
par exemple: bob->setNom("Larue");

IFT1147 - Introduction PHP

26

Avantages des objets

Le nom dune classe dbute gnralement par une


majuscule. Ceux des attributs et mthodes par une
minuscule.
Ne manipulez pas les attributs dune classe lextrieur
de celle-ci, mais dfinissez des mthodes pour laccs:

IFT1147 - Introduction PHP

27

Limplmentation dune classe peut tre


change sans que les appels celle-ci
aient tre modifis.
La programmation par objets permet de
crer du code trs modulaire et
rutilisable.
Elle permet de penser en termes dobjets
du domaine de lapplication.
IFT1147 - Introduction PHP

28

Programmation PHP

Septembre 2010

Concrtement: toHTML()

Concrtement: toHTML()

On programme souvent une mthode


toHTML() qui permet dobtenir
laffichage HTML de lobjet.
Il est gnralement avantageux de
laisser cette mthode retourner une
chane de caractres (donc, on nutilise
pas echo dans toHTML()).
IFT1147 - Introduction PHP

Lutilisation la plus simple de toHTML()


est donc
echo $monObj->toHTML();
Cette faon de faire simplifie lutilisation
de librairies de gestion de page qui
deviennent de plus en plus la norme
pour des projets denvergure.
29

IFT1147 - Introduction PHP

Concrtement: $_GET et $_POST

Concrtement: $_GET et $_POST

Il est gnralement avantageux de ne


pas accder directement $_GET et
$_POST lintrieur dobjets si ceux-ci
ne font pas partie de la couche de
prsentation ( interface HTML ).
Il vaut mieux ajouter des paramtres aux
mthodes et passer $_GET ou $_POST
comme paramtres aux fonctions.
IFT1147 - Introduction PHP

30

31

Vous aurez alors des objets qui sont

indpendants du protocole HTTP


qui peuvent tre utiliss dans nimporte quel
contexte (web, application indpendante,
script, etc.)
pour lesquels des tests unitaires sont faciles
concevoir (parce quon na pas besoin de
crer un contexte web ).
IFT1147 - Introduction PHP

32

Programmation PHP

Septembre 2010

Polymorphisme et hritage multiple


Le polymorphisme est support
partiellement en PHP 5. La redfinition
dune mthode dans une classe enfant
permettra de surcharger ce nom et la
mthode correspondante sera appele
en fonction du type de lobjet utilis.
Lhritage multiple nest pas support en
PHP 5.
IFT1147 - Introduction PHP

33

Pour aller plus loin

IFT1147 - Introduction PHP

34

Extreme Programming Explained


Kent Beck, Addison Wesley (2000)
Test-Driven Development By Example
Kent Beck, Addison Wesley (2003)
Design Patterns
Erich Gamma et al., Addison Wesley (1995)
Patterns of Enterprise Application Architecture
Martin Fowler, Addison Wesley 2003

Extreme Programming
Test-driven Development
Refactoring
Catalogues de Design Patterns
IFT1147 - Introduction PHP

Membres protected
Interfaces
Constantes
Classes abstraites
Utilisation des mthodes de la classe de
base
Surcharge des mthodes

Lectures intressantes

La programmation par objets a permis


de jeter de nouveaux regards sur la
programmation

Notions avances de POO

35

IFT1147 - Introduction PHP

36

Vous aimerez peut-être aussi