Les classes
NFA032
Présentation n°2
Les classes
• Plan de présentation des notions NFA032
– Notions de base (hors classes) : NFA031
– Notion de classe
• Variable d’instance (non statique)
• Méthode, dont constructeur
• Référence, passage de paramètre, effet de bord
• Interface
• Héritage
• Récursion
– Méthode récursive
– Type récursif : exemple des listes
– Exceptions
Terminologie
• Terme programmation objet / Terme Java
– Même vocabulaire :
• Classe
• objet = instance
– Attribut = champ = variable d’instance / variable non statique
– Attribut commun (partagé) = variable de classe / variable statique
– Fonction / méthode statique
– Méthode / méthode non statique
– envoi de message / appel de méthode ou accès à une variable
• Type enregistrement = classe sans méthode
Exemple : les points
• Ecrire le code Java permettant de :
– Représenter des points du plan (coordonnées
cartésiennes)
– Afficher les informations d’un point
– Créer un nouveau point à partir d’informations
diverses
– Réinitialiser les coordonnées d’un point
– Déplacer un point selon une translation (Dx, Dy)
Les points
• Séance précédente : deux solutions présentées
– Point = objet tableau
– Point = objet d’un type enregistrement
• Rappel de cette solution
• Nouvelle solution proposée
– Point = objet d’une classe
• Deux variantes, basées sur la conception des méthodes
ne retournant pas de résultat direct (exemple : affichage)
Un point = un type enregistrement (1/2)
• Définitions en Java
Un point = un type enregistrement (2/2)
• Extrait du programme de test
Manipulation 1 : les fonctions sont
intégrées au type enregistrement
Manipulation 1 : transformation du
code du test
• Remarque :
– On peut effacer le _point dans le nom des
fonctions constructeurs : [Link]éer(…)
Manipulation 2 : transformation en code
• Principe : objet pur
– Toute fonction f (méthode statique) d’une classe C ayant un
paramètre p de type C est transformée en une méthode non
statique, en effaçant p
static R f(C p, reste)
devient
R f(reste)
– Dans le corps original, remplacer p par this
– Tout appel à la fonction f(e, reste) est remplacé par l’envoi
de message e.f(reste)
• la valeur de e est une référence qui sera liée à this pour cet appel
• l’objet référencé est appelé l’objet receveur du message
– Traitement spécial pour les constructeurs
• Autrement dit :
– Toute méthode d’une classe C a un paramètre implicite this, de
type C, lequel sera lié à l’objet receveur d’un envoi de message.
Un point = une classe (1/3)
• Définition de la classe
Les constructeurs sont
expliqués après…
Un point = une classe (2/3)
• Détail des constructeurs
Un point = une classe (3/3)
• Code du test :
Les constructeurs
• Un constructeur est une méthode
– Appelée via l’opérateur new pour créer un nouvel objet ;
this est lié à l’objet créé lors de l’exécution du corps du
constructeur
– Contraintes syntaxiques :
• Porte le nom de la classe
• Ne doit pas spécifier de type de retour
• Ne contient aucune instruction return
• Retourne toujours this, l’objet créé
– Un constructeur peut en appeler un autre de sa classe
• Appel de la forme this(…)
• Cet appel doit impérativement figurer comme première instruction
du corps du constructeur
Enchaînement des envois de messages
• Principe :
– Plutôt que de définir une méthode ayant un
résultat void, lui faire retourner l’objet receveur
this, donc de type C : cela permettra de
d’enchaîner les envois (envois en cascade)
Classe des points modifiée
• Modification de quelques méthodes :
Classe des points modifiée
• Modification du programme de test :
Exercice : ajout des segments
• Compléter le code pour permettre la
manipulation de segments :
– Un segment est caractérisé par ses deux points
extrémités
– Les services attendus :
• Affichage des caractéristiques d’un segment
• Déplacement d’un segment selon une translation (Dx, Dy)
• Calcul de la longueur d’un segment
Un segment = un enregistrement (1/2)
Un segment = un enregistrement (2/2)
• Suite des fonctions :
• Programme de test :
Un segment = un objet (1/3)
• Définition de la classe :
Un segment = un objet (2/3)
• Suite du code :
Un segment = un objet (3/3)
• Code du programme de test :
Autre exemple : les dates
• Voir
– le support introduction à la programmation objet
en Java
– pages 26 à 31
• Les notions présentées dans ce support pages
1 à 31 sont dans le champ de cette séance.