31
Programmation orientée Objet Vers php 5.4

Programmation Orientée Objet et les Traits en PHP 5.4

Embed Size (px)

DESCRIPTION

Présentation pour l'AFUP des Traits sous PHP 5.4

Citation preview

Page 1: Programmation Orientée Objet et les Traits en PHP 5.4

Programmation orientée ObjetVers php 5.4

Page 2: Programmation Orientée Objet et les Traits en PHP 5.4

Réduire le couplage applicatif grâce aux Traits

Page 3: Programmation Orientée Objet et les Traits en PHP 5.4

(mauvaise) définition scolaire de l'objet

• Un objet est une représentation concrète d'un concept abstrait

Page 4: Programmation Orientée Objet et les Traits en PHP 5.4

Une classe

• Contient des attributs et des méthodes dont la portée peut être limitée

• Un seul héritage pour n interfaces

• Une méthode est identifiée par sa signature

Page 5: Programmation Orientée Objet et les Traits en PHP 5.4

La signature/**

* description de la méthode

*

* @access public

* @param integer $nombre

* @return string

*/

public function example($nombre) {

return "une chaîne";

}

Page 6: Programmation Orientée Objet et les Traits en PHP 5.4

L'interface• Permet de s'assurer que les objets manipulés

fonctionnent de la même manière

=> Contrat

Public fonction utilise(interfaceStylo $stylo) {

}

Page 7: Programmation Orientée Objet et les Traits en PHP 5.4

La Php Standard Library

• Ou SPL

• Permet d'ajouter des fonctionnalités à des objets

• Exemple : l'interface countable

Class CountMe implements Countable {

Public fonction count() {

Return 5;

}

}

$object = new CountMe;

echo sizeof($object); // 5

Page 8: Programmation Orientée Objet et les Traits en PHP 5.4

FailUn objet c'est pas ça !

Page 9: Programmation Orientée Objet et les Traits en PHP 5.4

Pas une représentation concrète

• On n'a jamais vu un "lanceur de requête Sql" dans la vraie vie

Page 10: Programmation Orientée Objet et les Traits en PHP 5.4

Repenser la définition d'un objet

Page 11: Programmation Orientée Objet et les Traits en PHP 5.4

Un objet est un comportement

• Un objet est un comportement vis à vis de données

• L'agrégat des comportements constitue une application

Page 12: Programmation Orientée Objet et les Traits en PHP 5.4

L'héritage

• Spécialisation d'un comportement

• Une classe fille peut réutiliser ou spécialiser le comportement de sa classe mère

• Pas d'héritage multiple en PHP

Page 13: Programmation Orientée Objet et les Traits en PHP 5.4

L'héritage échouePour 2 raisons

Page 14: Programmation Orientée Objet et les Traits en PHP 5.4

1/ spécialiser n'est pas décliner

• Souvent on ne spécialise pas, on décline

• C'est infini !

Page 15: Programmation Orientée Objet et les Traits en PHP 5.4

2/ l'héritage "outil"• L'héritage ne doit pas permettre de donner des outils

Class Example extends Singleton {}

=> ça ne doit pas exister !!

Page 16: Programmation Orientée Objet et les Traits en PHP 5.4

Le couplage applicatif(petit détour)

Page 17: Programmation Orientée Objet et les Traits en PHP 5.4

Code spagethi

• Dépendances fortes entre les composants

• Tout est entremêlé

• Maintenabilité faible

Page 18: Programmation Orientée Objet et les Traits en PHP 5.4

le couplage applicatif• Principe SOLID

• Single Responsability

• Open / closes

• Liskov substitution

• Interface segregation

• Dépendency inversion

Couplage faible

Page 19: Programmation Orientée Objet et les Traits en PHP 5.4

Horizontalité vs Verticalité• Un modèle vertical (type héritage mal conçu) n'est

pas maintenable

• Penser horizontal :

• Pattern Strategy

• Injection de dépendance

Page 20: Programmation Orientée Objet et les Traits en PHP 5.4

Les Traits(pas trop tôt)

Page 21: Programmation Orientée Objet et les Traits en PHP 5.4

Blocs de comportement• Réutilisables

• Modèle orienté collaboration

Class Example {

Use Trait1, Trait2;

}

Page 22: Programmation Orientée Objet et les Traits en PHP 5.4

À l'origine : les mixins

• Composants liés à la réutilisation plutôt qu'à l'instanciation

• Sont mélangés au code (mixed-in)

• Injectés dans le code au moment de l'héritage

• Conflits entre les mixins

Page 23: Programmation Orientée Objet et les Traits en PHP 5.4

Les Traits

• Réutilisation de fonctionnalités au niveau des classes

• L'ensemble des méthodes d'un Trait constituent son comportement

• Sans État

Page 24: Programmation Orientée Objet et les Traits en PHP 5.4

Gestion des conflits• Pas de priorité implicite

Class Example {

Use Trait1, Trait2 {

Trait2::myMethod as m;

Trait1::any insteadof Trait2

}

}

• Résolution explicite des conflits

Page 25: Programmation Orientée Objet et les Traits en PHP 5.4

Traits composites

• Un Trait peut être composé d'autres Traits

• On parle alors de Traits composites

Page 26: Programmation Orientée Objet et les Traits en PHP 5.4

Trait Singleton {

/**

     * Constructor

     */

    protected function __construct() {}

     /**

     * Get singleton instance

     * @return static

     */

    public static function getInstance() {

        static $instance = null;

        if (is_null($instance)) {

            $instance = new static;

        }

        return $instance;

    }

 

    /**

     * Prevents cloning

     * @throws Exception

     */

    public function __clone() {

        throw new \Exception('Cloning of this object isn\'t authorized');

    }

    /**

     * Prevents deserialization

     * @throws Exception

     */

    public function __wakeup() {

        throw new \Exception("Cannot deserialize instance of Singleton pattern in" . get_called_class());

    }

}

Page 27: Programmation Orientée Objet et les Traits en PHP 5.4

class Example extends MaClasseMetier {

    use \Singleton;

}

$oExample = Example::getInstance();

var_dump($oExample === Example::getInstance());

// true

$oExample = new Example;

// Fatal error: Call to protected Example::__construct() from invalid context

Page 28: Programmation Orientée Objet et les Traits en PHP 5.4

Et c'est pas plus lent

1130

1135

1140

1145

1150

heritage 1 trait 4 traits

Page 29: Programmation Orientée Objet et les Traits en PHP 5.4

Liens et ressources

Page 30: Programmation Orientée Objet et les Traits en PHP 5.4

Sur le netRFC des traits : https://wiki.php.net/rfc/horizontalreuse

Recherches d'Alexandre Bergel : http://bergel.eu

Page 31: Programmation Orientée Objet et les Traits en PHP 5.4

Questions