La POO en pâtisserie
C'est bon j'ai tout revu, je suis au point pour commencer la POO
Parfait Arthur, on va commencer alors, le concept de la POO c'est d'encapsuler des données pour qu'elle ne soient plus globales, mais spécifique à un objet. Et pour celà on va créer des classes.
Oula, classes... Objets... C'est quoi la différence?
Très bonne question, tu aime la pâtisserie?
La manger oui, mais je ne suis pas très doué. Et surtout je ne vois pas le rapport.
Pas besoin d'être doué, juste d'avoir quelques notions de bases. En POO une classe est un peu un moule à pâtisserie, et un objet est un gâteau que tu as préparé avec ce moule.
Euh, ok...
Il existe pleins de moules à pâtisserie, les plats à tarte, les moules demi-sphères, les moules à cannelés et j'en passe. On va dire par exemple que l'on utilise un moule à cacke. Il a une forme précise avec une largeur, une hauteur, une pronfondeur, et il peut aussi être de différent type, en silicone, en métal, en céramique... Bref, un certains nombre de points permettent de définir les caractéristique de ce moule, et donc indirectement les caractéristiques du gâteau qu'il nous permet de réaliser.
Tout à fait.
Et bien avec ce même moule, on peut tout de même faire différents gâteaux, par exemple un cake jambon/olive, ou un quatre quart, ou encore un pâté en croute. Donc à partir d'un même moule, on est capable de créer différents type de pâtisseries. Elles sont toutes différentes, mais en même temps elles ont aussi certains points en commun, comme la forme et la taillle.
Je te suis jusque là
Une classe c'est la même chose, elle va permettre de définir une sorte de forme de base, et ensuite tu pourra construire différents objets à partir de cette même classe. On parle alors d'instances d'une classe.
Le petit truc en plus, est qu'un moule est un objet matériel, donc ils sont toujours plus ou moins régit par certaines contraintes physique. Une classe est immatérielle, elle n'as donc aucune limite et c'est à toi de définir le format qu'elle représente. Pour cela il existe deux choses les propriétés et les méthodes.
Les propriétés
La propriété, c'est un mot qui peut impressionner, mais il faut tout simplement voir ça comme une variable, mais une variable spécifique car cette variable n'existe que dans une classe particulière. Pour les définir en javascript, on le fait dans le constructeur.
Et c'est quoi un constructeur?
C'est une fonction un peu particulière qui existe dans toutes les classes, cette fonction sera appelée à chaque fois que l'on veut créer un nouvel objet à partir de cette classe, on parle alors d'instancier. Un petit exemple, je vais créer la classe MouleACake
Attention! Par convention les noms de classes sont en pascal case, c'est à dire que la première lettre est en majuscule et que les lettres suivantes d'un même mot en minuscule et si un autre mot suit, il est collé au premier et de nouveau avec une majuscule en première lettre.
J'ai quelques doutes... Tu n'as pas oublié de mettre "function" devant la fonction de construction?
Absolument pas, dans une classe il ne faut pas préciser "function" mais j'y reviendrai après.
Et pourquoi "this", d'après ce que tu m'avais dit, ça sert dans les événements pour savoir quel élément a déclenché l'événement.
C'est exact, mais avant tout, this a une utilisation spécifique à l'intérieur d'une classe, un peu comme pour les événements, this représentera l'objet courant.
C'est à dire?
Comme pour un événement, il peut y avoir plusieurs éléments différents qui le déclenche, pour une classe il peut y avoir plusieurs objets instanciés qui en dépendent, "this" représente l'objet à partir duquel nous utilisons des propriétés de la classe.
Je n'ai pas tout compris...
On y reviendra aussi plus tard quand je t'aurais montrer comment faire une instance. Pour le moment, la partie importante est que nous avons créé une classe MouleACake qui a une propriété nommée largeur.
Et pourquoi null comme valeur?
J'y viens justement, pour le moment j'ai précisé une propriété vide, mais on peut lui préciser une valeur. Ou encore mieux, utiliser un paramètre de constructeur pour que la valeur soit définit à l'instance de l'objet. Par exemple :
Mais... Il y a deux fois la variable largeur du coup !
Pas tout à fait, il y a le paramètre largeur, et il y a la propriété largeur. C'est justement le mot clé "this" qui va nous permettre de distinguer les deux.
Ah d'accord, je comprend mieux le this
L'instanciation
Ce n'est pas finit pour le this, mais c'est un bon début. Maintenant on va instancier la classe.
J'imagine qu'il faut appeler la fonction "constructor"
Pas directement, pour cela on utilise le mot clé "new", pour indiquer que l'on veut créer un nouvel objet de la classe, et on précise ensuite le nom de cette classe, et enfin les paramètres attendus par le constructeur.
J'ai terminé cette partie