67
Javascript La POO Bonnes pratiques Jean-pierre VINCENT (indépendant)

Function oop - bonnes pratiques ms tech days

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Function   oop - bonnes pratiques ms tech days

Javascript

La POOBonnes pratiques

Jean-pierre VINCENT (indépendant)

Page 2: Function   oop - bonnes pratiques ms tech days

Qui ça ?Jean-pierre VINCENT

braincracking.org (veille techno)@theystolemynick

12 ans de WebExpertise technique, formateur, consultant

Page 3: Function   oop - bonnes pratiques ms tech days
Page 4: Function   oop - bonnes pratiques ms tech days

Voici John l'ingénieur

Page 5: Function   oop - bonnes pratiques ms tech days

Lvl 1 : décorateur de page

Page 6: Function   oop - bonnes pratiques ms tech days
Page 7: Function   oop - bonnes pratiques ms tech days
Page 8: Function   oop - bonnes pratiques ms tech days

Lvl 1 : décorateur de page

<script>$('#id').randomPlugin();</script>

Page 9: Function   oop - bonnes pratiques ms tech days

Démo plugin easySlider

Page 10: Function   oop - bonnes pratiques ms tech days

Moralité

JavaScript ça se copie / colle

Page 11: Function   oop - bonnes pratiques ms tech days

Lvl 2 : scripteur

Page 12: Function   oop - bonnes pratiques ms tech days

Lvl 2 : scripteur<script>function init( id ) {

$(id).randomPlugin();};

$(document).ready( function() {init( '#main' );init( '#side' );

});</script>

Page 13: Function   oop - bonnes pratiques ms tech days

Lvl 2 : scripteur débogueurAjouts :

●Pubs●Widgets sociaux●Trackers●Autres plugins●Autres scripts maison

Page 14: Function   oop - bonnes pratiques ms tech days

Lvl 2 : scripteur débogueurAjouts :

●Pubs●Widgets sociaux●Trackers●Autres plugins●Autres scripts maison

Page 15: Function   oop - bonnes pratiques ms tech days

Lvl 2 : scripteur débogueur<script>function init( id ) {

$(id).randomPlugin();};

// init se fait écraser$(document).ready( function() {

init( '#main' );init( '#side' );

});</script>

Page 16: Function   oop - bonnes pratiques ms tech days

Pollution globale

Page 17: Function   oop - bonnes pratiques ms tech days

Pollution globale2 exemples complètement au hasard

● Gmail : 33 variables globales (450K lignes de code)

● Lemonde.fr : 480 variables globales

Page 18: Function   oop - bonnes pratiques ms tech days

Actions✓pattern module anonyme + var

✗ Function action() {} ✓ var action = function() {

var myVariable; }

✓namespaces

Page 19: Function   oop - bonnes pratiques ms tech days

Création d'un scopeRappel

(function(){ // début de scope localvar private = true;

// ici je suis chez moi

})(); // fin de scope local

Page 20: Function   oop - bonnes pratiques ms tech days

Lvl 3 : scripteur prudentCorrection 1(function(){ // début de scope local

var init = function( id ) {$(id).randomPlugin();

};$(document).ready( function() { init( '#main' ); init( '#side' );});

})(); // fin de scope local

Page 21: Function   oop - bonnes pratiques ms tech days

Namespacesvar MY = {};

Page 22: Function   oop - bonnes pratiques ms tech days

Namespacesvar MY = {};

MY.init = function() {};

Page 23: Function   oop - bonnes pratiques ms tech days

Namespacesvar MY = {};

MY.init = function() {};

MY.utils = {};

Page 24: Function   oop - bonnes pratiques ms tech days

Namespacesvar MY = {};

MY.init = function() {};

MY.utils = {};

MY.utils.XHR = function() {};

Page 25: Function   oop - bonnes pratiques ms tech days

Namespacesvar MY = {};

MY.init = function() {};

MY.utils = {};

MY.utils.XHR = function() {};

MY.utils.XHR.instances = {};

Page 26: Function   oop - bonnes pratiques ms tech days

Namespaces - astuce

récupérer ou créer un namespace

MY = window.MY || {};

MY.utils = MY.utils || {};

Page 27: Function   oop - bonnes pratiques ms tech days

Lvl 4 scripteur organisé(function(){

MY = window.MY || {};MY.init = function( id ) {

$(id).randomPlugin();};

})( );$(document).ready( function() {

MY.init( '#main' );MY.init( '#side' );

});

Page 28: Function   oop - bonnes pratiques ms tech days

Lvl 4 scripteur organisé

Démo code final namespaces

Page 29: Function   oop - bonnes pratiques ms tech days

Lvl 5 : développeur

Page 30: Function   oop - bonnes pratiques ms tech days

ProgrammationOrientéObjet

Page 31: Function   oop - bonnes pratiques ms tech days

POO Classique

new, class, static, public, private, __construct, $this, const, self::, extends, protected, parent::, abstract, final, interface, implements, instanceof

Page 32: Function   oop - bonnes pratiques ms tech days

POO JSEcmaScript 3

new (optionnel)this (particulier)instanceof

Page 33: Function   oop - bonnes pratiques ms tech days

POO JS

new (optionel)this (particulier)instanceof

Rien n'est littéralTout est simulable

Page 34: Function   oop - bonnes pratiques ms tech days

Le choix

Prototype ou closure ?

Page 35: Function   oop - bonnes pratiques ms tech days

Le choixPrototype ou closure ?

● Prototype :• The JS way• performance (grand nombres)

● Closure :• variables privées• plus lisible ?

Page 36: Function   oop - bonnes pratiques ms tech days

ClosuremyClass = function () { var privateVariable = 0; // public methods };

Page 37: Function   oop - bonnes pratiques ms tech days

ClosuremyClass = function () { var privateVariable = 0; // public methods return { decrement:function() { console.log( --privateVariable ); }, increment:function() { console.log( ++privateVariable ); } }};

Page 38: Function   oop - bonnes pratiques ms tech days

Renvoi d'objetsmyClass = function () { return { decrement:function() { }, increment:function() { } }};myObject = myClass();myObject.decrement(); // -1myObject.decrement(); // -2myObject2 = myClass();myObject2.increment(); // 1myObject2.increment(); // 2

Page 39: Function   oop - bonnes pratiques ms tech days

Lvl 5 : développeur

Démo « interface publique »Implémentation d'un « next »

Page 40: Function   oop - bonnes pratiques ms tech days

Lvl 6 : développeurDéveloppeur

DHTMLAJAX2.0HTML5 !

Page 41: Function   oop - bonnes pratiques ms tech days

Lvl 6 : programmation événementielle

Démo « événements »

Page 42: Function   oop - bonnes pratiques ms tech days

Tout est émulable

● Pattern factory

Page 43: Function   oop - bonnes pratiques ms tech days

StatiquesmyClass = function () { return { publicMethod:function() {} }};myClass.staticMethod = function() {};

Page 44: Function   oop - bonnes pratiques ms tech days

StatiquesmyClass = function () { return { publicMethod:function() {} }};myClass.staticMethod = function() {};

myObject = myClass();MyClass .staticMethod(); // OKMyObject .publicMethod(); // OK

Page 45: Function   oop - bonnes pratiques ms tech days

StatiquesmyClass = function () { return { publicMethod:function() {} }};myClass.staticMethod = function() {};

myObject = myClass();MyClass .staticMethod(); // OKMyObject .publicMethod(); // OKMyObject .staticMethod(); // ErrorMyClass .publicMethod(); // Error

Page 46: Function   oop - bonnes pratiques ms tech days

Factory

Démo « factory »

Page 47: Function   oop - bonnes pratiques ms tech days

Lvl 6 : développeur objet

Page 48: Function   oop - bonnes pratiques ms tech days

Tout est émulable

● programmation évènementielle● patterns classiques :

● MVC, ● observer, ● facade, proxy, ● singleton, factory ...

Page 49: Function   oop - bonnes pratiques ms tech days

Librairies

Frameworks divers :● Tests U● Events● MVC● Data-bindings

Page 50: Function   oop - bonnes pratiques ms tech days
Page 51: Function   oop - bonnes pratiques ms tech days
Page 52: Function   oop - bonnes pratiques ms tech days
Page 53: Function   oop - bonnes pratiques ms tech days
Page 54: Function   oop - bonnes pratiques ms tech days
Page 55: Function   oop - bonnes pratiques ms tech days
Page 56: Function   oop - bonnes pratiques ms tech days

Librairies

Page 57: Function   oop - bonnes pratiques ms tech days

Conclusion

● Javascript est différent, apprenez le

● OOP réutilisable

Page 58: Function   oop - bonnes pratiques ms tech days

Questions ?

Jean-pierre VINCENTbraincracking.org@theystolemynick

RDV maintenant :stand Generative Objects(N° 55 à côté HP)

Page 59: Function   oop - bonnes pratiques ms tech days

Function.prototype

Page 60: Function   oop - bonnes pratiques ms tech days

Tout est objet

"abc".indexOf('a'); // 0

[1,2,3].slice(1); // [2, 3]

13.3714 .toFixed(1); // "13.4"

/[0-9]/g.test('10/11/2011'); // true

Page 61: Function   oop - bonnes pratiques ms tech days

Function.prototypeTout est objet

var myFunction = function() {};

myFunction.prototype; // object

Page 62: Function   oop - bonnes pratiques ms tech days

Function.prototypevar myClass = function () { // pas de variable privée this.publicVariable = 0;};myClass.prototype = { decrement:function() { console.log( --this.publicVariable ); }, increment:function() { console.log( ++this.publicVariable ); }};

Page 63: Function   oop - bonnes pratiques ms tech days

Héritagevar subClass = function() {

this.publicVariable = 10;};

subClass.prototype = myClass.prototype;

Page 64: Function   oop - bonnes pratiques ms tech days

Héritagevar subClass = function() {

this.publicVariable = 10;};

subClass.prototype = myClass.prototype;subClass.prototype.constructor= subClass;

Page 65: Function   oop - bonnes pratiques ms tech days

Héritagevar subClass = function() {

this.publicVariable = 10;};

subClass.prototype = myClass.prototype;subClass.prototype.constructor= subClass;

myObject2 = new subClass();myObject2.increment(); // 11myObject2.increment(); // 12

Page 66: Function   oop - bonnes pratiques ms tech days

Héritagevar subClass = function() {

this.publicVariable = 10;};

subClass.prototype = myClass.prototype;subClass.prototype.constructor= subClass;subClass.prototype.square = function(){}

myObject2 = new subClass();myObject2.square(); // 100

Page 67: Function   oop - bonnes pratiques ms tech days

Héritagevar subClass = function() {

this.publicVariable = 10;};

subClass.prototype = myClass.prototype;subClass.prototype.constructor= subClass;subClass.prototype.square = function(){}

myObject2 = new subClass();myObject2.square(); // 100