Les classes et les objets
Création et utilisation d’une classe simple
Ici, notre programme d’essai (méthode main) est séparé de la classe Point, mais placé dans le même fichier source. La classe Point ne peut donc pas être déclarée publique. Rappelons que, dans ces conditions, elle reste utilisable depuis n’importe quelle classe du paquetage par défaut. class Point { public Point (char c, double x) // constructeur { nom = c ; abs = x ; } public void affiche () { System.out.println (« Point de nom » + nom + » d’abscisse » + abs) ; } public void translate (double dx) { abs += dx ; } private char nom ; // nom du point private double abs ; // abscisse du point } public class TstPtAxe { public static void main (String args[]) { Point a = new Point (‘C’, 2.5) ; a.affiche() ; Point b = new Point (‘D’, 5.25) ; b.affiche() ; b.translate(2.25) ; b.affiche() ; } } Point de nom C d’abscisse 2.5 Point de nom D d’abscisse 5.25 Point de nom D d’abscisse 7.5 Réaliser une classe Point permettant de représenter un point sur un axe. Chaque point sera caractérisé par un nom (de type char) et une abscisse (de type double). On prévoira : • un constructeur recevant en arguments le nom et l’abscisse d’un point, • une méthode affiche imprimant (en fenêtre console) le nom du point et son abscisse, • une méthode translate effectuant une translation définie par la valeur de son argument. Écrire un petit programme utilisant cette classe pour créer un point, en afficher les caractéristiques, le déplacer et en afficher à nouveau les caractéristiques.
Initialisation d’un objet La création d’un objet de type
A entraîne successivement : • l’initialisation par défaut de ses champs nbre et decal à une valeur « nulle » (ici l’entier 0), • l’initialisation explicite de ses champs lorsqu’elle existe ; ici nbre prend la valeur 20, • l’appel du constructeur : nbre est multiplié par la valeur de coeff (ici 5), puis incrémenté de la valeur de decal (0). En définitive, le programme affiche : nbre = 100 decal = 0 Que fournit le programme suivant ? class A { public A (int coeff) { nbre *= coeff ; nbre += decal ; } public void affiche () { System.out.println (« nbre = » + nbre + » decal = » + decal) ; } private int nbre = 20 ; private int decal ; } public class InitChmp { public static void main (String args[]) { A a = new A (5) ; a.affiche() ; } }
Champs constants
Le champ p déclaré final doit être initialisé au plus tard par le constructeur, ce qui n’est pas le cas. En revanche, les autres champs déclarés final sont correctement initialisés, n de façon explicite et x par le constructeur. Affectation et comparaison d’objets Quelle erreur a été commise dans cette définition de classe ? class ChCt { public ChCt (float r) { x = r ; } ….. private final float x ; private final int n = 10 ; private final int p ;
Affectation et comparaison d’objets
Que fournit le programme suivant ? class Entier { public Entier (int nn) { n = nn ; } public void incr (int dn) { n += dn ; } public void imprime () { System.out.println (n) ; } private int n ; } public class TstEnt { public static void main (String args[]) { Entier n1 = new Entier (2) ; System.out.print (« n1 = « ) ; n1.imprime() ; Entier n2 = new Entier (5) ; System.out.print (« n1 = « ) ; n2.imprime() ; n1.incr(3) ; System.out.print (« n1 = « ) ; n1.imprime() ; System.out.println (« n1 == n2 est » + (n1 == n2)) ; n1 = n2 ; n2.incr(12) ; System.out.print (« n2 = « ) ; n2.imprime() ; System.out.print (« n1 = « ) ; n1.imprime() ; System.out.println (« n1 == n2 est » + (n1 == n2)) ; } }