Principes de programmation (suite) Les références Définition Avantages Exemple Les enregistrements Fonctionnement Exemples
LES RÉFÉRENCES
Références On sait que les variables de type primitif ne sont pas des références. Exemple : int x = 5; x Définition : Une référence est une variable dont le contenu fait référence à un emplacement mémoire différent, qui lui contient les données ***. Exemple : Référence Donnée Toutes les variables d’un autre type que primitif sont des références ***Ressemble au pointeur du C sans les opérateurs ‘&’ et ‘*’ 5 blablabla
Les références en paramètres Avantages Un paramètre formel reçoit une copie de la référence à une donnée et non la donnée. On peut modifier les données directement via le paramètre formel. On peut avoir plusieurs références sur une même donnée.
Les références en paramètres Exemple Il faut utiliser new pour créer de l’espace mémoire et en obtenir la référence. TypeAutreQuePrimitif var1 = new TypeAutreQuePrimitif (); TypeAutreQuePrimitif var2 = var1; var1 var2 Les deux variables pointent sur la même donnée donnée
LES ENREGISTREMENTS
Enregistrements Les enregistrements Il est possible de regrouper des variables ensemble dans un même contenant appelé enregistrement. Chaque variable est appelé un champ de l’enregistrement. En Java, on définit un enregistrement à l’aide d’une classe dans lequel on définit les champs(variables) publiques. Exemple : public class StatistiquesHockey{ public int nbButs; public int nbPasses; … }
Enregistrements (suite) Lorsqu’une telle classe existe, elle n’est qu’une définition de type. Il faut ensuite définir (à l’aide de new) des variables de ce nouveau type pour obtenir de l’espace et sa référence. StatistiqueHockey stats = new Statistiques(); //New crée l’espace et retourne la référence stats nbButs nbPasses Pour accéder aux champs nbButs et nbPasses, il faut passer par la référence stats suivi d’un point, suivi du nom du champ Exemple : stats.nbButs = 10; stats.nbPasses = 32;
Enregistrements (suite) Exemple : Il est possible qu’un champ d’un enregistrement soit également un enregistrement d’un autre type. Exemple : personne nom prenom dateDeNaissance jour mois annee personne.dateNaissance.annee = 1998; 1998
Enregistrements Les enregistrements On peut considérer un enregistrement comme un type Catégorie de données Une variable contenant une ou plusieurs informations pouvant être de type différent Chaque information est appelée un champ et le champ est considéré comme une variable Un champ a un nom Intervalle Nombre de champs Opérations Accéder à un champ Toutes les autres opérations sont des fonctions du langage ou elles doivent être définies par le programmeur (initialiser , comparer, etc.).
Enregistrements (suite) En Java, l’opérateur == compare des références. On ne peut donc pas comparer le contenu d’un enregistrement avec ce dernier. Il faut alors écrire une fonction booléenne pour la comparaison. Par convention, cette fonction s’appelle equals. Exemple : public static boolean equals (Personne p1, Personne p2){ return equals(p1.nom,(p2.nom)) && equals(p1.prenom, p2.prenom) && equals(p1.dateDeNaissance, p2.dateDeNaissance); } *On présume que les fonctions equals pour String et Date existent
Enregistrements (suite) Pareil pour initialiser le contenu d’un enregistrement, on doit l’effectuer champ par champ. Il faut donc écrire une procédure d’initialisation. Exemple : public static void initPersonne (Personne p, String nom, String prenom, Date dateDeNaissance){ p.nom = nom; p.prenom = prenom; p.dateDeNaissance = dateDeNaissance; } *On présume que le new a été fait avant pour p et que la référence existent. On présume aussi que String et Date existent
Enregistrements Il y aura plusieurs sous-programmes à écrire pour représenter les opérations possibles sur un enregistrement. init et equals en sont quelques exemples qui, quoique souvent nécessaires, ne sont pas toujours obligatoires. En résumé, on n’écrit que celles qui sont utiles au projet.