Note préliminaire : bien lire le texte, les notions et le vocabulaire utilisé ici sont important dans la description des concepts de la programmation objet.
Déjà vu
Pour enregistrer les coordonnées du curseur de Pong, les dimensions de l'écran, la vitesse de la balle, nous avons utilisé un type de données particulier.
En effet, les types simples sont int, String, float, boolean, et autre char.
Un vecteur est un couple de valeurs de type float : x et y.
On accède à l'une des valeurs en mettant un point derrière le nom de la variable suivi du nom de la valeurs à chercher.
exemple :
Ce type d'objet est appelé classe d'objet.
Pour créer une variable objet de cette classe d'objet, on utilisera la notation suivante (remarquer la majuscule convetionnellement donnée au nom de la classe) :
Créer une variable de type objet est dit 'instancier un objet'.
Créons, créons, créons
Créer des nouvelles classe d'objet est assez simple.
On définit le nom de la classe avec le mot ... class (en minuscules) suivi du nom de la classe à créer.
Puis les attributs (variables internes)
Ces attributs peuvent êtres publiques (public) et accessible directement, ou privés (private) et nécessiter une méthode spécialement écrite pour les modifier.
Dans Processing, si rien n'est indiqué, les attributs sont publiques et accessibles.
Et enfin, les "méthodes" (fonctions que l'on peut faire avec un objet)
De la rigueur, que diable !
Pour les méthodes, le plus "propre" est de ne plus utiliser de variables globales mais des paramètres transmis aux méthodes selon les besoins (revoir la notion de surchage dans pong 1, procédural).
Primo methodis
Au moment de l'instanciation (création de l'objet), l'ordinateur appelle une méthode précise qui porte le nom de la classe.
Il s'agit du constructeur.
Cette méthode n'est appelée qu'une seule fois, comme setup(), et sert à initialiser un objet.
C'est très, très pratique. Il faudra soigner sa rédaction car elle permet d'exécuter du code complexe qu'une seule fois dans l'exécution du programme et de ranger proprement le code de l'application.
Exemple concret : ébauche de la classe Joueur dans notre jeu Pong
Important : un joueur est représenté par son score, la position de l'affichage de celui-ci, la position de son curseur.
On peut incrémenter le score, déplacer le curseur, afficher le score, afficher le curseur du joueur 1 ou 2, selon l'objet Joueur appelé.
Les modifications consécutives seront les suivantes :
- création des objets j1 et j2,
- utilisation de la méthode inc() pour incrémenter le score et
- utilisation de l'attribut score de chaque joueur pour l'afficher :
Observer les modifs dans le code suivant ( marquées par >o<)
Et voilà. Maintenant, on n'a plus besoin de déclarer j1_score ni j2_score, c'est fait automatiquement à la déclaration des objets j1 et j2.