• Aucun résultat trouvé

Objets, prototypes et héritage en JavaScript

N/A
N/A
Protected

Academic year: 2022

Partager "Objets, prototypes et héritage en JavaScript"

Copied!
15
0
0

Texte intégral

(1)

Andrea G. B. Tettamanzi, 2019 1

Programmation Web Avancée Programmation Web Avancée

(côté client) (côté client)

Andrea G. B. Tettamanzi

Université de Nice Sophia Antipolis Département Informatique

[email protected]

(2)

CM - Séance 04

Objets, prototypes et

héritage en JavaScript

(3)

Andrea G. B. Tettamanzi, 2019 3

Plan

• Objets, prototypes et héritage

• Constructeurs

• Encapsulation en JavaScript

(4)

Objets

• Un objet JavaScript peut être pensé comme un ensemble de couples (propriété, valeur) que l’on peut représenter avec la notation intuitive

propriété : valeur

• qui est aussi utilisé par la syntaxe du langage pour définir des objets littéraux

• Propriétés

– Propres : apparaissent explicitement dans un objet

– Héritées : ne font pas explicitement partie de l’objet, mais sont dérivées implicitement d’autres objets (dits prototypes)

• Une propriété peut prendre des valeurs de n'importe quel type

• Les objets JavaScript sont des tables de hachage

(5)

Andrea G. B. Tettamanzi, 2019 5

Méthodes

• Une propriété peut avoir une fonction comme valeur

• On parle alors d'une méthode

• Lorsqu’une méthode d’un objet est appelée, la variable spéciale

« this » passe à référencer l’objet

• De ce fait, le code contenu dans la méthode peut accéder aux propriétés de l’objet à travers de la variable « this »

(6)

Encapsulation

• Principe fondamental de la POO

– cacher les détails de la représentation des données

– empêcher l'accès aux données par un autre moyen que des méthodes.

– ⇒ l'interface n'expose jamais les données mais seulement des méthodes

• Certains langages POO (p.ex., C++, Java) disposent de limitateurs d’accès aux données et méthodes d’une classe :

– Publique – accessible partout

– Protégée – accessible par une sous-classe uniquement – Privée – accessible dans la classe elle-même uniquement

(7)

Andrea G. B. Tettamanzi, 2019 7

Encapsulation en JavaScript

• En JavaScript, les propriétés (et donc aussi les méthodes) d'un objet sont toutes des membres publiques

– n'importe quelle portion de code peut y avoir accès et les modifier

• Cela n’exclue pas d’appliquer le principe d’encapsulation – Comme bonne pratique de programmation

– En faisant preuve d’auto-discipline

– Contournement toujours possible, mais à éviter

• Cette forme « primitive » d’encapsulation se base sur – Accesseurs (getters) : méthodes qui lisent un attribut – Mutateurs (setters) : méthodes qui modifient un attribut

(8)

Propriétés et méthodes privées

• Les variables ordinaires du constructeur peuvent être utilisées comme des membres privés des objets construits

– ces variables restent attachées à l'objet,

– mais ne sont pas visibles (= accessibles) à son extérieur

– c’est le cas aussi pour les paramètres passés au constructeur

• De plus, elle ne sont pas visibles aux méthodes ordinaires de l’objet construit

• Pourtant, elle sont accessibles aux fonctions internes du constructeur

– Ces fonctions sont aussi invisibles à l’extérieur – On pourrait les appeler « méthodes privées »

(9)

Andrea G. B. Tettamanzi, 2019 9

Exemple

function Conteneur(param) { function dec() {

if (secret > 0) { secret -= 1;

return true; } else return false; } this.a = param;

var secret = 3;

var that = this;

}

(10)

Méthodes privilégiées

• Une méthode privilégiée

– a le droit d'accéder aux propriétés et méthodes privées – est accessible aux méthodes ordinaires

– est accessible au code externe

• On peut effacer ou remplacer une méthode privilégiée – mais on ne peut pas la modifier

– ou la forcer a révéler ses secrets

• Définition d’une méthode privilégiée : dans le constructeur, – on affecte une function interne du constructeur à une

propriété publique (dans l’espace lexical de this)

(11)

Andrea G. B. Tettamanzi, 2019 11

Exemple

function Conteneur(param) { function dec() {

if (secret > 0) { secret -= 1;

return true; }

else return false; }

this.service = function () {

return dec() ? that.a : null; };

this.a = param;

var secret = 3;

var that = this;

}

(12)

Prototypes et héritage

• Chaque objet a un lien interne vers son prototype

• Un prototype est un objet et peut avoir un prototype à son tour

• On parle alors de chaîne de prototypes d'un objet

• Étant donné un objet o, la valeur o.x d’une propriété x est déterminée comme suit :

– si x est une propriété propre de o, o.x renvoie la valeur de la propriété x en o ;

– sinon, la chaîne des prototypes de o est parcourue jusqu’au premier prototype p où x est définie ; dans ce cas, o.x renvoie la valeur de p.x ;

– si, en parcourant la chaîne des prototypes, l’objet « null » est atteint, o.x renvoie « undefined », la valeur indéfinie.

(13)

Andrea G. B. Tettamanzi, 2019 13

Création d'objets

• Un objet peut être créé de plusieurs façons, parmi lesquelles – Syntaxiquement, à l’aide d’une notation littérale :

obj = { x : 5, y : 10 } ; – Par des constructeurs

• Un constructeur, en JavaScript, est une fonction qui est appelée avec l'opérateur « new »

new f(…) ;

• Renvoie un nouvel objet moulé sur l'objet f.prototype – Per Object.create(proto).

(14)

Exemple

2 o

q

p

x

y 0

o = { x : 2 };

function f() { … } f.prototype = o;

p = new f();

p.y = 0;

q = new f();

(15)

Andrea G. B. Tettamanzi, 2019 15

Merci de votre attention

Références

Documents relatifs

„ De 0 à N versions pour les documents PDF créés à partir d'un document interactif Dans cette onglet Associé, vous trouverez les informations suivantes :. „ Description du document

„ De 0 à N versions pour les documents PDF créés à partir d'un document interactif Dans cette onglet Associé, vous trouverez les informations suivantes :.. „ Description du document

Lorsque toutes les chaînes représentées dans un texte JSON sont composées entièrement de caractères Unicode [UNICODE] (éventuellement échappés) ce

Toutes les variables créées sans le mot clé « var » sont des variables globales : elles sont utilisables partout dans le code après leur déclaration, même dans les fonctions..

Christian Poslaniec : On dirait que tu as abandonné Pierrot et Colombine, ainsi que l'encre, en même temps que fermait l'atelier du vieux Mans.. On commence par

Cette pédagogie dévitalisée, dont par lai t Freinet comme par mise en garde bienveil- lante, nous devons sérieusem ent nou s demander si ell e ne n ous guette pas

 onmousedown = script The onmousedown event occurs when the pointing device button is pressed over an element. This attribute may be used with

Je suis un entier égal au produit de six nombres premiers distincts. La somme de mon inverse et des inverses de mes six facteurs premiers est égale