Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
M. BOUMEDIENE
2 Classes
3 Interfaces
Plan
2 Classes
3 Interfaces
L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.
L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.
Il y a trois modes d’accès aux attributs d’un objet :
public : il s’agit du niveau le plus bas de protection où les attributs sont
accessibles directement par l’objet lui-même ou par d’autres objets.
private : est le niveau le plus fort de protection, les attributs de l’objet
sont accessibles uniquement par les méthodes de l’objet.
protected : est un niveau de protection lié à la notion d’héritage.
L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.
Il y a trois modes d’accès aux attributs d’un objet :
public : il s’agit du niveau le plus bas de protection où les attributs sont
accessibles directement par l’objet lui-même ou par d’autres objets.
private : est le niveau le plus fort de protection, les attributs de l’objet
sont accessibles uniquement par les méthodes de l’objet.
protected : est un niveau de protection lié à la notion d’héritage.
La classe est un modèle qui s’apparente à la déclaration d’un nouveau type qui
encapsule données et méthodes (traitements).
Une instance d’une classe est un objet appartenant à cette dernière.
Héritage et polymorphisme
L’héritage est une notion qui permet de définir une nouvelle classe en héritant les
attributs et les méthodes de classes existantes.
Une classe B qui hérite d’une classe A hérite des attributs et des méthodes de la
classe A sans avoir à les redéfinir.
B est une sous-classe de A, ou encore A est la super-classe de B ou la classe de
base.
On dit encore que la classe B est une classe dérivée de la classe A, ou que la classe
B étend la classe A.
En langage PHP, une classe ne peut avoir qu’une seule super-classe, il n’y a pas
d’héritage multiple. Par contre, elle peut avoir plusieurs sous-classes.
Héritage et polymorphisme
L’héritage est une notion qui permet de définir une nouvelle classe en héritant les
attributs et les méthodes de classes existantes.
Une classe B qui hérite d’une classe A hérite des attributs et des méthodes de la
classe A sans avoir à les redéfinir.
B est une sous-classe de A, ou encore A est la super-classe de B ou la classe de
base.
On dit encore que la classe B est une classe dérivée de la classe A, ou que la classe
B étend la classe A.
En langage PHP, une classe ne peut avoir qu’une seule super-classe, il n’y a pas
d’héritage multiple. Par contre, elle peut avoir plusieurs sous-classes.
La notion d’héritage conduit à la notion de polymorphisme faisant qu’une même
instruction peut en fait appeler lors de l’exécution des fonctions différentes de
différents objets mais ayant le même nom.
Le polymorphisme découle de la notion de redéfinition de méthodes entre une
super-classe et une sous-classe.
Plan
2 Classes
3 Interfaces
Déclaration de classe
La déclaration d’une classe doit contenir (dans l’ordre) :
Modificateur d’accès ou de visibilité (optionnel).
Mot-clé class suivie du nom de la classe (obligatoire).
Mot-clé extends suivie du nom de la superclasse (optionnel)
Mot-clé implements suivie d’une liste de noms d’interfaces (optionnel)
Corps de déclaration entouré par { et }
m o d i f i c a t e u r c l a s s nomClasse [ e x t e n d s c l a s s e M e r e ] [ implements
,→ i n t e r f a c e ] {
// I n s é r e r i c i l e s a t t r i b u t s e t l e s mé t h o d e s
}
Déclaration de classe
La déclaration d’une classe doit contenir (dans l’ordre) :
Modificateur d’accès ou de visibilité (optionnel).
Mot-clé class suivie du nom de la classe (obligatoire).
Mot-clé extends suivie du nom de la superclasse (optionnel)
Mot-clé implements suivie d’une liste de noms d’interfaces (optionnel)
Corps de déclaration entouré par { et }
m o d i f i c a t e u r c l a s s nomClasse [ e x t e n d s c l a s s e M e r e ] [ implements
,→ i n t e r f a c e ] {
// I n s é r e r i c i l e s a t t r i b u t s e t l e s mé t h o d e s
}
f i n a l c l a s s MotherClass {
public function test () {
echo " M o t h e r C l a s s : : t e s t ( ) a p p e l é e \n " ;
}
// I c i , peu i m p o r t e s i v o u s s p é c i f i e z l a f o n c t i o n en
,→ f i n a l e ou p a s
f i n a l p u b l i c f u n c t i o n moreTesting () {
echo " M o t h e r C l a s s : : m o r e T e s t i n g ( ) a p p e l é e \n " ;
}
}
c l a s s C h i l d C l a s s extends MotherClass {
}
// Ré s u l t a t : F a t a l e r r o r : C l a s s C h i l d C l a s s may n o t i n h e r i t
,→ from f i n a l c l a s s ( B a s e C l a s s )
Il est impossible de définir classe ChildClass à partir d’une classe finale MtherClass
// $ c l a s s 0 = new A b s t r a c t C l a s s ; <−−− E r r o r
$ c l a s s 1 = new C o n c r e t e C l a s s 1 ;
$ c l a s s 1 −>p r i n t O u t ( ) ;
echo $ c l a s s 1 −>p r e f i x V a l u e ( ' T e s t ' ) . " \ n " ;
Une classe déclarée abstract ne peut pas être instanciée : il faut définir une classe qui
hérite de cette classe et qui implémente les méthodes nécessaires pour ne plus être
abstraite
class Bicycle {
c o n s t CODE = "BCYC " ;
p u b l i c f u n c t i o n getCode ( ) {
r e t u r n s e l f : : CODE ;
}
}
$ m y B i c y c l e = new B i c y c l e ;
// a c c e s s t o CODE by t h e f u n c t i o n g e t C o d e ( )
echo $ m y B i c y c l e −>g e t C o d e ( ) ," < br >";
// a c c e s s t o CODE by t h e c l a s s B i c y c l e
echo B i c y c l e : : CODE ;
Une méthode peut être déclarée static et dans ce cas elle sera invoquée/appelée
sans instancier un objet de sa classe.
c l a s s Calendar {
p u b l i c s t a t i c f u n c t i o n getDate () {
r e t u r n d a t e ( " Y−m−d " ) ;
}
}
echo C a l e n d a r : : g e t D a t e ( ) ;
13/20 Mohammed Boumediene - INTTIC Technologies web 2
Classes
La notion de constructeur
Un objet est une instance, un exemplaire construit dynamiquement sur le modèle
que décrit la classe.
L’instanciation de l’objet s’effectue via une méthode particulière nommée
constructeur permettant d’initialiser ses attributs.
Le constructeur suit la définition des autres méthodes excepté que son nom doit
obligatoirement être __construct
Le constructeur est systématiquement invoqué lors de l’instanciation (création)
d’un objet (new).
c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}
La notion de constructeur
Un objet est une instance, un exemplaire construit dynamiquement sur le modèle
que décrit la classe.
L’instanciation de l’objet s’effectue via une méthode particulière nommée
constructeur permettant d’initialiser ses attributs.
Le constructeur suit la définition des autres méthodes excepté que son nom doit
obligatoirement être __construct
Le constructeur est systématiquement invoqué lors de l’instanciation (création)
d’un objet (new).
c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}
La définition d’un constructeur est facultative. S’il n’est pas défini, PHP appelle
un constructeur par défaut vide créé automatiquement.
c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}
c l a s s Admin e x t e n d s U s e r {
public $role ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
p a r e n t : : _ _ c o n s t r u c t ( $name ) ;
$ t h i s −>r o l e = " admin " ;
}
}
La notion de destructeur
Le destructeur est appelé dès qu’il n’y a plus de référence sur un objet donné.
Dans le cas où l’exécution du script est stoppée par une fonction exit(), le
destructeur sera aussi appelé.
Le destructeur est une méthode dont le nom est __destruct.
<?php
c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
f u n c t i o n __destruct () {
$ t h i s −>name = n u l l ;
echo " d e s t r o y i n g t h e o b j e c t U s e r " ;
}
}
Plan
2 Classes
3 Interfaces
Déclaration d’interface
Lors d’un développement multi-équipes, les programmeurs des différentes équipes
doivent se mettre d’accord sur un contrat décrivant comment leurs programmes
interagissent.
Par conséquent, chaque équipe sera capable d’écrire son code sans connaître les
détails des codes des autres équipes.
⇒ cela est possible par la définition d’interfaces.
Déclaration d’interface
Lors d’un développement multi-équipes, les programmeurs des différentes équipes
doivent se mettre d’accord sur un contrat décrivant comment leurs programmes
interagissent.
Par conséquent, chaque équipe sera capable d’écrire son code sans connaître les
détails des codes des autres équipes.
⇒ cela est possible par la définition d’interfaces.
Une interface définit les entêtes d’un ensemble de méthodes, ainsi que des
constantes.
Cette définition permet d’imposer un contenu commun à des classes en dehors
d’une relation d’héritage.
la définition d’une interface est similaire à la définition d’une classe sauf qu’il faut
utiliser le mot-clé interface à la place de class.
Une interface ne doit jamais définir le corps de ses méthodes.
i n t e r f a c e MyInterface {
p u b l i c f u n c t i o n method1 ( $name ) ;
p u b l i c f u n c t i o n method2 ( ) ;
}
Implémentation d’interface
Une interface impose un comportement particulier aux classes et pour cela elle doit
être implémentée par ces dernières.
Implémentation d’interface
Une interface impose un comportement particulier aux classes et pour cela elle doit
être implémentée par ces dernières.
Une classe peut implémenter une ou plusieurs interfaces en utilisant le mot-clé
implements.
i n t e r f a c e MyInterface {
p u b l i c f u n c t i o n method1 ( $name ) ;
p u b l i c f u n c t i o n method2 ( ) ;
}
c l a s s MyClass i m p l e m e n t s M y I n t e r f a c e {
p u b l i c $name ;
p u b l i c f u n c t i o n method1 ( $name ) {
$ t h i s −>name = $name ;
}
p u b l i c f u n c t i o n method2 ( ) {
echo $ t h i s −>name ;
}
}