Jérôme CUTRONA jerome.cutrona@univ-reims.fr PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr 01:08:01 Programmation Web 2011-2012.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
PHP5 poo.
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
11:16:331 Programmation Web Programmation Web : Formulaires HTML Jérôme CUTRONA
PhpMyAdmin 01:08:02 Programmation Web
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 01:08:01 Programmation Web
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
Bases de données Objet singleton pour la connexion
PHP Interface base de données
Bases de données Objet singleton pour la connexion
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
Principes de programmation (suite)
Programmation orientée objet
Langage Oriente Objet Cours 4.
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Créer des packages.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Réaliser par: Sadok Amel Cheboui hassiba
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les classes Introduction aux Langages Orientés Objets
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
Fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n')
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
Bases de données Singleton pour la connexion
LES CLASSES ET LES OBJETS
Jérôme CUTRONA PHP objet Jérôme CUTRONA 08:30:34 Programmation Web
Transcription de la présentation:

Jérôme CUTRONA jerome.cutrona@univ-reims.fr PHP objet Jérôme CUTRONA jerome.cutrona@univ-reims.fr 01:08:01 Programmation Web 2011-2012

Développement objet Définition de briques logicielles représentant un concept, une idée ou une entité ainsi que leurs interactions : les objets Un objet est une structure de données comprenant également les fonctionnalités de traitement des données L’objet est vu au travers de ses spécifications Les concepts associés sont : Encapsulation Héritage Polymorphisme 01:08:01 Programmation Web 2011-2012

Classe Une classe définit un modèle, un moule, à partir duquel tous les objets de classe seront créés La classe décrit les données internes ainsi que les fonctionnalités des objets La classe est une vision « inerte », une recette de cuisine, visant à décrire la structure et le comportement des objets qui seront créés La construction d’un objet à partir de la classe génératrice s’appelle instanciation Les objets, entités « vivantes » en mémoire, sont des instances de la classe 01:08:01 Programmation Web 2011-2012

Instanciation La classe est une description « inerte » Les objets doivent être instanciés à partir de la classe génératrice pour exister et devenir fonctionnels Exemple : la classe Animal $bambi = new Animal() ; $scrat = new Animal() ; $melman = new Animal() ; 01:08:01 Programmation Web 2011-2012

Encapsulation Procédé consistant à rassembler les données et les traitements au sein des objets L’implémentation interne des objets est cachée Les objets sont vu à travers leurs spécifications Les données internes et les fonctionnalités possèdent un niveau de visibilité et peuvent éventuellement être masquées : Public Privé Protégé 01:08:01 Programmation Web 2011-2012

Encapsulation Les données internes des objets sont appelées attributs Les fonctionnalités des objets sont appelées méthodes Méthodes habituelles : Constructeur / destructeur Accesseurs / modificateurs (getters / setters) Référence à l’objet courant dans la description de la classe : $this 01:08:01 Programmation Web 2011-2012

Visibilité Publique : Les données internes et les méthodes sont accessibles par tous Protégé : Les données internes et les méthodes sont accessibles aux objets dérivés Privé : Les données internes et les méthodes ne sont accessibles qu’aux objets de la classe 01:08:01 Programmation Web 2011-2012

Héritage ou dérivation ou extension Création de nouvelles classes à partir du modèle d’une classe existante La nouvelle classe possède tous les attributs et méthodes de la classe mère La nouvelle classe peut proposer de nouveaux attributs et de nouvelles méthodes ou spécialiser des méthodes de la classe mère 01:08:01 Programmation Web 2011-2012

Polymorphisme Choix dynamique de la méthode qui correspond au type réel de l’objet Méthode mange() function nourriture(Mammifere $m) { return $m->mange() ; } $i = new Impala() ; nourriture($i) ; $c = new Carnivore() ; nourriture($c) ; herbe viande 01:08:01 Programmation Web 2011-2012

Développement objet en PHP Classes (tout est public) Constructeur Héritage Méthodes statiques implicites Outils pour la linéarisation (sauvegarde sur disque) PHP 5 Classes (choix public, protected, private) Constructeur et destructeur Membres et méthodes statiques Classes et méthodes abstraites … 01:08:01 Programmation Web 2011-2012

Définition d'une classe en PHP 4 class MaClasse { var $madonnee ; // Attribut // Constructeur function MaClasse($param) { $this->madonnee = $param ; } function affiche() { // Méthode echo get_class($this) ." contient ".$this->madonnee ; ?> Déclaration de classe Attribut public Constructeur public Référence à l'objet courant Accès à un attribut Méthode publique Donne le nom de la classe de l'objet courant 01:08:01 Programmation Web 2011-2012

Utilisation d'une classe en PHP 4 Inclusion de la définition de la classe <?php require "maclasse.php" ; // Nouvel objet $o = new MaClasse(12) ; // Utilisation d'une méthode $o->affiche() ; $o->madonnee = "coucou" ; ?> Création d'un objet Méthode affiche de l'objet $o maclasse contient 12 Impossible de restreindre l'accès aux attributs 01:08:01 Programmation Web 2011-2012

Héritage en PHP 4 <?php Héritage de class MaClasseHeritee extends MaClasse { var $autredonnee ; function MaClasseHeritee($param1, $param2) { parent::MaClasse($param1) ; $this->autredonnee = $param2 ; } function affiche() { MaClasse::affiche() ; echo " et ".get_class($this) ." contient ".$this->autredonnee ; ?> Héritage de MaClasse Opérateur de résolution de portée (Paamayim Nekudotayim) Méthode MaClasse du parent Méthode affiche de la classe MaClasse 01:08:01 Programmation Web 2011-2012

Méthodes de classe implicites <?php class MaClasse { var $madonnee ; // Attribut // Constructeur function MaClasse($param) { $this->madonnee = $param ; } function affiche() { // Méthode echo $this->madonnee ; function statique() { // Méthode echo "Statique !!!" ; } ?> Méthode publique Ne fait pas référence à $this  Méthode statique (méthode de classe) 01:08:01 Programmation Web 2011-2012

Méthodes de classe implicites Inclusion de la définition de la classe <?php require "maclasse.php" ; // Création d'un objet $o = new MaClasse(12) ; // Utilisation d'une méthode $o->affiche() ; // Utilisation d'une méthode implicitement statique MaClasse::statique() ; ?> Création d'un objet Méthode affiche de l'objet $o 12 Impossible de restreindre l'accès aux attributs Statique !!! 01:08:01 Programmation Web 2011-2012

Développement objet en PHP 5 A partir de maintenant, développement en PHP 5 01:08:01 Programmation Web 2011-2012

Définition d'une classe <?php class MaClasse { private $madonnee ; public function __construct($param) { $this->madonnee = $param ; } function __destruct() { echo "Destruction..." ; } function affiche() { echo "madonnee : " .$this->madonnee ; } ?> Déclaration de classe Attribut privé Constructeur public Référence à l'objet courant Destructeur public Méthode publique par défaut Accès à un attribut 01:08:01 Programmation Web 2011-2012

Utilisation d'une classe Inclusion de la définition de la classe <?php require "maclasse.php" ; // Nouvel objet $o = new MaClasse(12) ; // Utilisation d'une méthode $o->affiche() ; $o->madonnee = "coucou" ; unset($o) ; ?> Création d'un objet Méthode affiche de l'objet $o maclasse contient 12 class MaClasse { private $madonnee ; ... Fatal error: Cannot access private property MaClasse::$madonnee in dummy.php on line 25 L'attribut est privé function __destruct() { echo "Destruction..." ; } Destruction de l'objet $o Destruction... 01:08:01 Programmation Web 2011-2012

Valeur par défaut des attributs <?php class MaClasse { private $madonnee = "Défaut" ; function affecte($val) { $this->madonnee = $val ; } function affiche() { echo "madonnee : ".$this->madonnee ; } } $o = new MaClasse() ; $o->affiche() ; $o->affecte("Nouvelle") ; ?> Attribut avec valeur par défaut Nouvel objet madonnee : Défaut Affichage Affectation madonnee : Nouvelle Affichage 01:08:01 Programmation Web 2011-2012

Attributs et méthodes de classe Mot clé static Attributs et méthodes utilisables sans instance de la classe (=attributs et méthode de classe) Attributs NE peuvent PAS être accédés depuis une instance ($objet->attribut) Attributs partagés par toutes les instances de la classe Méthodes peuvent être accédés depuis une instance ($objet->methode()) Dans les méthodes, $this n'est pas disponible 01:08:01 Programmation Web 2011-2012

Attributs statiques Attribut privé statique : class MaClasse { ne peut être accédé que par des méthodes de la classe class MaClasse { private static $n = 0 ; function __construct() { echo ++MaClasse::$n ." instance(s)" ; } function __destruct() { echo "destruction" ; self::$n-- ; } } $s = new MaClasse() ; $t = new MaClasse() ; unset($t) ; $u = new MaClasse() ; $v = new MaClasse() ; echo MaClasse::$n ; Accès à l'attribut statique 1 instance(s) 2 instance(s) destruction 2 instance(s) Fatal error: Cannot access private property MaClasse::$n in dummy.php on line 37 3 instance(s) 01:08:01 Programmation Web 2011-2012

Méthodes statiques class MaClasse { private static $n = 0 ; function __construct() { echo ++MaClasse::$n." instance(s)<br>\n" ; } function __destruct() { MaClasse::$n-- ; } static function f($i) { echo "Dans f() : ".($i*$i) ; } } $s = new MaClasse() ; $s->f(2) ; MaClasse::f(3) ; Méthode publique statique Appel à partir d'une instance Toléré 1 instance(s) Dans f() : 4 Dans f() : 9 Appel sans instance 01:08:01 Programmation Web 2011-2012

Constantes de classe Constante publique de classe class MaClasse { const constante = "Valeur" ; public function montre() { echo self::constante ; } $c = new MaClasse() ; $c->montre() ; echo MaClasse::constante ; Accès à la constante de classe depuis la classe Valeur Accès à la constante de classe à l'extérieur de la classe Valeur 01:08:01 Programmation Web 2011-2012

Héritage Classe simple class Simple { function affiche() { echo "Je suis Simple" ; } } class Etendue extends Simple { parent::affiche() ; echo " mais aussi Etendue" ; $s = new Simple() ; $e = new Etendue() ; $s->affiche() ; $e->affiche() ; Une méthode publique Classe étendue héritant de la classe simple Surcharge de la méthode Appel de la méthode du parent Je suis Simple Je suis Simple mais aussi Etendue 01:08:01 Programmation Web 2011-2012

Assignation d'objets class Point { private $_x ; private $_y ; public function __construct($x=0, $y=0) { $this->_x = $x ; $this->_y = $y ; } public function set($x, $y) { public function toString() { return "({$this->_x}, {$this->_y})" ; } } 01:08:01 Programmation Web 2011-2012

Assignation d'objets $point $segment 17,17 18,18 16,16 15,15 14,14 $segment = array() ; $point = new Point() ; for ($i=10; $i<20; $i++) { $point->set($i, $i) ; $segment[] = $point ; } foreach ($segment as $k => $p) echo "$k: {$p->toString()}<br>\n" ; $point $segment 0: (19, 19) 1: (19, 19) 2: (19, 19) 3: (19, 19) 4: (19, 19) 5: (19, 19) 6: (19, 19) 7: (19, 19) 8: (19, 19) 9: (19, 19) 17,17 18,18 16,16 15,15 14,14 11,11 12,12 10,10 0,0 13,13 19,19 1 2 3 4 5 6 7 8 9 01:08:01 Programmation Web 2011-2012

Clonage d'objets 14,14 15,15 13,13 11,11 12,12 16,16 0,0 18,18 17,17 10,10 19,19 $point $segment = array() ; $point = new Point() ; for ($i=10; $i<20; $i++) { $point->set($i, $i) ; $segment[] = clone $point ; } foreach ($segment as $k => $p) echo "$k: {$p->toString()}<br>\n" ; 10,10 $segment 11,11 0: (10, 10) 1: (11, 11) 2: (12, 12) 3: (13, 13) 4: (14, 14) 5: (15, 15) 6: (16, 16) 7: (17, 17) 8: (18, 18) 9: (19, 19) 12,12 1 13,13 2 3 14,14 4 15,15 5 16,16 6 7 17,17 8 18,18 9 19,19 01:08:01 Programmation Web 2011-2012

Objets comme arguments de fonctions function origine($p) { $p->set(0, 0) ; } $point = new Point(10, 10) ; echo "avant: {$point->toString()}<br>\n" ; origine($point) ; echo "apres: {$point->toString()}<br>\n" ; Passage de l'objet Point par référence avant: (10, 10) apres: (0, 0) 01:08:01 Programmation Web 2011-2012

Objets dans les chaînes de caractères Problème : ambiguïté non évaluable Chaîne contenant : un attribut d'un objet dans une chaîne "a : $a->attribut" le résultat d'une méthode d'un objet dans une chaîne "résultat : $a->calcule()" une entrée de tableau associatif "valeur : $tab['cle']" une variable suivie de texte (sans espace) "\$a contient $aeuros" 01:08:01 Programmation Web 2011-2012

Objets dans les chaînes de caractères Solution : effectuer des concaténations (pénible) délimiter par { } Chaîne contenant : un attribut d'un objet dans une chaîne "a : {$a->attribut}" le résultat d'une méthode d'un objet dans une chaîne "résultat : {$a->calcule()}" une entrée de tableau associatif "valeur : {$tab['cle']}" une variable suivie de texte (sans espace) "\$a contient {$a}euros" 01:08:01 Programmation Web 2011-2012

Gestion des erreurs : exceptions Gestion des exception identiques à C++/Java Exception peut être : Jetée : throw Essayée : try Capturée : catch Exception jetée : code après throw non exécuté Capture : 1 ou plusieurs blocs (selon type) Exception non capturée : erreur fatale 01:08:01 Programmation Web 2011-2012

Utilisation des exceptions try { $error = 'Toujours lancer cette erreur'; throw new Exception($error); /* Le code après une exception n'est jamais exécuté. */ echo 'Jamais exécuté'; } catch (Exception $e) { echo "Capture Exception: " .$e->getMessage()." \n"; } // Poursuite de l'exécution echo 'Bonjour le monde'; Déroutement Capturer Essayer Lancer Capture Exception: Toujours lancer cette erreur Bonjour le monde 01:08:01 Programmation Web 2011-2012

Classe Exception PHP 5 <?php class Exception { protected $message = ''; // message de l'exception protected $code = 0; // code de l'exception protected $file; // fichier source de l'exception protected $line; // ligne de la source de l'exception function __construct(string $message=NULL, int code=0); final function getMessage(); // message de l'exception final function getCode(); // code de l'exception final function getFile(); // nom du fichier source final function getLine(); // ligne du fichier source final function getTrace(); // un tableau de backtrace() final function getTraceAsString(); // chaîne de trace function _toString(); // chaîne pour l'affichage } ?> 01:08:01 Programmation Web 2011-2012