Cours de JAVA Classes et Variables d'instance Une classe est un modèle qui permet de créer des objets. Un objet ou bien une instance d'une classe est créée suivant le modèle définit par la classe. Ex: vous (objet ou instance) de la classe personne. Classe Personne, Point2D, Trinôme, Cylindre ... Une classe comporte ­ des données appelées variables d'instances (qui définissent l'état de l'objet) ­ des méthodes appelées méthode d'instance (qui définissent le comportement) Diagramme de Classe : Une classe est représentée par un diagramme de la forme : NomClass Variables d'instance Méthodes d'instance Ex: Classe Personne Classe Cylindre Personne Cylindre Nom Rayon Prenom Hauteur Poids saisir saisir afficher afficher retourner volume retourner surface Début d'une classe : Déclaration dans un fichier qui porte le nom : NomClasse.java //NomClass.java public class nomClass { ... } Déclaration de variable d'instance : On indique le type + le nom UT Béthune ­ Département R&T Année 2005­2006 by Demoutiez Philippe //NomClass.java public class nomClass { T1 Varhost1; T2 Varhost2, Varhost3; } NomClass T1 Varhost1 T2 Varhost2, Varhost3 Ex: //Personne.java public class Personne { String nom; int age; double poids; ... } //Cylindre.java public class Cylindre { double rayon; double hauteur; ... } //Point2D.java public class Point2D { double x; double y; ... } Compilation du fichier NomClass.java : javac NomClass.java Création d'une instance , appel du constructeur par défaut : new NomClass( ); Cet appel réserve une zone mémoire aux variables ex: new Cylindre( ); Référencement d'une instance : NomClass refObj = new NomClass( ); Cylindre c = newCylindre( ); Il est possible de créer plusieurs instances : Cylindre c1 = newCylindre( ); Cylindre c2 = newCylindre( ); On a donc deux instances de la classe Cylindre référencées respectivement par c1 et c2. Différence entre: ­ déclaration d'une référence : NomClass refObj; et construction d'une instance, puis affectation d'une référence: refObj = nomClass( ); – – Accès aux variables d'instance : . L'opérateur: Il permet d'accéder aux variables d'instances refObj.varInst1 refObj.varInst2 refObj refObj.varInst3 //TestCylindre.java UT Béthune ­ Département R&T Année 2005­2006 by Demoutiez Philippe public class TestCylindre{ public static void main (String [] args){ Cylindre c = new Cylindre; c.rayon=2; c.hauteur=10; //calcul du volume double vol = 2*Math.PI+c.rayon*c.hauteur; System.out.println("Volume =" + vol); } } //Point2D.java public class Point2D{ double x; double y; } //TestPoint2D.java public class TestPoint2D{ public static vois main (String [] args){ Point2D p = new Point2D; p.x=5; p.y=7; System.out.println("("+p.x+ "," +p.y+")"); } } Classes et Méthodes d'instance Une méthode d'instance comporte : ● une entête ● un corps L'entête (prototype) donne : ● le type de la valeur retournée par la méthode ● le nom de la méthode ● les types et noms des paramètres de la méthode T method (T1 pf1, T2 pf2, ... Tn pfn) Si une méthode ne retourne rien, la valeur T = « void » //Cylindre.java public class Cylindre{ double rayon; double hauteur; void saisir(){ rayon = readDouble("rayon: "); hauteur = readDouble("hauteur: "); } void afficher(){ System.out.println("rayon: "+rayon+"hauteur :"+hauteur); double v=4*Math.PI*rayon*rayon*hauteur; return v; } } Appel d'une méthode : Il faut donner une méthode: ● référence de l'objet sur lequel est appliquée la méthode ● l'opérateur « » ● la liste des paramètres passés à la méthode UT Béthune ­ Département R&T Année 2005­2006 by Demoutiez Philippe refObj.method(pe 1, ... pen) paramètres effectifs La valeur retournée par une méthode doit être utilisée : ● soit en l'affectant à une autre variable ● soit en l'affichant à l'ecran ● soit en le passant comme caractère à une autre méthode Méthode qui ne retourne pas de valeur : Méthode qui retourne une valeur : c.saisir(); vol = c.volume(); ou System.out.println( c.volume() ); //TestCylindre.java public class TestCylindre{ public static void main(Sting [] args){ c.rayon=2; c.hauteur=10; double v1 = c.volume(); System.out.println("vol :"+v1); System.out.println("masse :"+c.masse(1.5e3)); //augmentation de 10% c.rayon=1.1*c.rayon; c.hauteur=1.1*c.hauteur; c.affcher(); double v2=c.volume(); System.out.println("vol :"+v2); double d=v2-v1; System.out.println("augmentation :"+d); } } Principe d'encapsulation : Les variables d'instances d'une classe ne doivent être accessible qu' aux Méthodes de la classe. Le contrôle de leurs valeurs peut être centralisé au niveau de la classe. set ecrire Variables d'instances get lire methodes Pour cela, on les déclare avec le modificateur d'accès « privé ». Au contraire, les Méthodes d'une classe sont accessibles à l'extérieur de la classe, elles sont donc déclarées d'accès public. Comme les variables sont devenues privées, il faut prévoir des Méthodes supplémentaires d'instance qui vont permettre: ● d'obtenir la valeur d'une variable d'instance ● ou de modifier la valeur d'une variable d'instance Ces Méthodes particulières sont appelées « accesseurs » en lecture ou en écriture. UT Béthune ­ Département R&T Année 2005­2006 by Demoutiez Philippe Cylindre ­ double rayon ­ double hauteur + void saisir( ) + void afficher( ) + double volume( ) + double masse (double rho) + double getRayon( ) + double getHauteur( ) + void setRayon(double r) + void setHauteur( double h) //Cylindre.java public class Cylindre{ private double rayon; private double hauteur; public void saisir(){ ... } public void afficher(){ ... } public double volume(){ ... } public double getRayon(){ return rayon; } public double getHauteur(){ return hauteur; } public void setRayon(double r){ rayon = r; } public void setHauteur(double h){ hauteur = h; } } //TestCylindre.java public class TestCylindre{ public static void main(String[]args){ Cylindre c = new Cylindre(); c.setHauteur(2); c.setRayon(3); double v = c.volume(); System.out.println("masse"+c.masse(1.5e3)); //on augmente le rayon c.setRayon(1.1*c.getRayon()); c.setHauteur(1.1*c.getRayon()); c.afficher(); double v2 = c.volume(); System.out.println("volume :"+v2); double d = v2-v; System.out.println("augmentation vol:"+d); } } Constructeurs : Utilité d'un constructeur: //TestCylindre.java public class TestCylindre{ public static void main(String[]args){ Cylindre c = new Cylindre(); double v = c.volume(); System.out.println("volume :"+v); } } Ce programme peut être compilé, puis exécuté mais on obtient la valeur 0 car la hauteur et le rayon du cylindre n'ont pas été initialisés. La version correcte du programme. Cylindre c = new Cylindre(); double v = c.volume(); System.out.println("vol"+v); UT Béthune ­ Département R&T Année 2005­2006 by Demoutiez Philippe