1 / 33

Constructeurs

Constructeurs. H Batatia. Variable statique. Une variable statique est partagée par tous les objets d’une classe. Exemple. class Fraction{ int n;//numérateur int d;//dénominateur static String type; //type de nombre void setN(int x) { n = x}; void setD(int x) { d = x};

ulfah
Télécharger la présentation

Constructeurs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Constructeurs H Batatia

  2. Variable statique • Une variable statique est partagée par tous les objets d’une classe

  3. Exemple class Fraction{ int n;//numérateur int d;//dénominateur static String type; //type de nombre void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; static String getType(){ return type; } } class T { public static void main(String [] s){ new Fraction(); Fraction.type = "Rationnel; String s = Fraction.getType(); Fraction.n = 100; //erreur } }

  4. Exemple class Fraction{ int n;//numérateur int d;//dénominateur static String type; //type de nombre void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; static String getType(){ return type; } } class T { public static void main(String [] s){ Fraction var = new Fraction(); var.type = "Rationnel; String s = var.getType(); var.n = 1; var.d = 2; } }

  5. De multiples objets • Ecrire la classe Rationnel dont la méthode main crée les objets fractions : • ½, 1/3, …, 1/10 • Et afficher leurs états

  6. Exemple class Rationnel { public static void main(String [] s){ Fraction f for(int i=2; i<11; i++){ f = new Fraction(); f.setN(1); f.setD(i); System.out.println( "("+ f.getN() + "/" + f.getD()+ ")"); } } }

  7. Exercice • Ajouter à Fraction la méthode Public String Chaine() • qui retourne la chaine (n/d)

  8. Exemple class Fraction{ int n;//numérateur int d;//dénominateur void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; public String chaine(){ return "(" + n + "/" + d + ")" ; } }

  9. Exercice • Modifier la classe Rationnel pour utiliser la méthode chaine() pour afficher l’état des fractions

  10. suite class Rationnel { public static void main(String [] s){ Fraction f for(int i=2; i<11; i++){ f = new Fraction(); f.setN(1); f.setD(i); System.out.println( f.chaine()); } } }

  11. Exercice • Modifier la classe Rationnel pour créer les objets ½, -1/3, ¼, -1/5, 1/6, -1/7, 1/8, -1/9, 1/10

  12. suite class Rationnel { public static void main(String [] s){ Fraction f for(int i=2; i<11; i++){ f = new Fraction(); int x = (i%2 == 0?1:-1); f.setN(x); f.setD(i); System.out.println( f.chaine()); } } }

  13. this • Dans le corps d'un objet this désigne la référence à ce même objet • Modifier la méthode chaine pour utiliser this

  14. Référence this class Fraction{ int n;//numérateur int d;//dénominateur void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; public String chaine(){ return "(" + this.n + "/" + this.d + ")" ; } }

  15. Méthodes get et set • L'accès des attributs privés doit se faire à l'aide de méthodes publiques public type getAttribut(){ return this.attribut;} public void setAttribut(type v) { this.attribut = v;}

  16. Exercice • Ajouter à la classe Fraction, la méthode public Fraction add(Fraction f) qui crée la fraction somme de la fraction courante et la fraction f.

  17. Référence this class Fraction{ int n;//numérateur int d;//dénominateur void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; public String chaine(){ return "(" + this.n + "/" + this.d + ")" ; } public Fraction add(Fraction f){ int x = this.getN() * f.getD() + this.getD() * f.getN(); int y= this.getD() * f.getD(); Fraction r = new Fraction(); r.setN(x); r.setD(y); return r; } }

  18. Exercice • Modifier la classe Rationnel pour afficher la somme de toutes les fractions créées

  19. suite class Rationnel { public static void main(String [] s){ Fraction f ; Fraction r=null; for(int i=2; i<11; i++){ f = new Fraction(); int x = (i%2 == 0?1:-1); f.setN(x); f.setD(i); System.out.print( f.chaine() + " + "); if(r != null){ r = f.add(r); }else{ r = f; } } System.out.println( "= " + r.chaine()); } }

  20. Constructeur • L'instanciation de la classe Fraction se fait par new Fraction(); • Dans cette instruction Fraction() est un constructeur • D'une manière générale, un constructeur • est une méthode qui • porte le nom de la classe; • peut prendre des paramètres; • ne retourne aucune valeur • sa déclaration prend la formeClasse (paramètres) {…} • peut être précédée d'un modificateur de visibilité (public, …) • son corps peut comprendre n'importe quel traitement • généralement, on l'utilise pour initialiser les attributs de l'objet

  21. constructeur import es.*; class Fraction{ private int n;//numérateur private int d;//dénominateur Fraction(int x, int y){ this.n = x; this.d = y; } …. } class T { public static void main(String [] s){ Fraction f = new Fraction(1,2); String s = f.chaine(); System.out.println(s); } }

  22. Exercice • Modifier les classes Fraction et Rationnel pour utiliser le constructeur de Fraction

  23. suite class Fraction{ int n;//numérateur int d;//dénominateur void setN(int x) { n = x}; void setD(int x) { d = x}; void getN() {return n}; void getD() {return d}; public String chaine(){ return "(" + this.n + "/" + this.d + ")" ; } public Fraction add(Fraction f){ int x = this.getN() * f.getD() + this.getD() * f.getN(); int y= this.getD() * f.getD(); Fraction r = new Fraction(x,y); return r; } }

  24. suite class Rationnel { public static void main(String [] s){ Fraction f for(int i=2; i<11; i++){ f = new Fraction((i%2 == 0?1:-1), i); System.out.println( f.chaine()); } } }

  25. Multiples Constructeurs • Dans une classe, on peut créer de multiples constructeurs • ils ont tous le même nom (nom de la classe) • ils doivent avoir des paramètres différents • ils seront différenciés par le type de leurs paramètres

  26. class Fraction { private int n; private int d; public Fraction( ){ this.n=0; this.d= 1; } public Fraction( int x){ this.n= x; this.d= 1; } public Fraction(int x, int y){ this.n= x; this.d= y; } public String chaine(){ return ( "Fraction: (" + this.n + "/" + this.d + ")"); } } class T { public static void main(String [] s){ Fraction var1 = new Fraction (); System.out.println (var1.chaine()); Fraction var2 = new Fraction (5); System.out.println (var2.chaine()); Fraction var3 = new Fraction (5, 10); System.out.println (var3.chaine()); } } Exemple

  27. this() • Dans le corps d'un constructeur, on peut appeler un autre constructeur de la même classe • Pour cela, on doit utiliser this()

  28. class F { private int n; private int d; public Fraction( ){ this(0,1); } public Fraction( int x){ this(x,1); } public Fraction(int x, int y){ this.n= x; this.d= y; } public String chaine(){ return ( "Fraction: (" + this.n + "/" + this.d + ")"); } } class T { public static void main(String [] s){ Fraction var1 = new Fraction (); System.out.println (var1.chaine()); Fraction var2 = new Fraction (5); System.out.println (var2.chaine()); Fraction var3 = new Fraction (5, 10); System.out.println (var3.chaine()); } } Exemple (15)

  29. Constructeur par défaut • Si aucun constructeur n'a été programmé, JAVA utilise un constructeur par défaut sans paramètres • Si des constructeurs sont créés, le programmeur ne peut utiliser que ceux-la • c'est à dire que si on ne programme que des constructeurs avec paramètres, on ne peut plus appeler le constructeur sans paramètres (on peut néanmoins le programmer)

  30. class F { private int n; private int d; public Fraction(int x, int y){ this.n= x; this.d= y; } public String chaine(){ return ( "Fraction: (" + this.n + "/" + this.d + ")"); } } class T { public static void main(String [] s){ //erreur Fraction var1 = new Fraction (); System.out.println (var1.chaine()); //erreur Fraction var2 = new Fraction (5); System.out.println (var2.chaine()); Fraction var3 = new Fraction (5, 10); System.out.println (var3.chaine()); } } Exemple

  31. Où sont passés les objets? import es.*; class Fraction{ private int n;//numérateur private int d;//dénominateur Fraction(int x, int y){ this.n = x; this.d = y; } void setN(int x) { this.n = x;} void setD(int x) { this.n = x;} public String chaine(){ return ( "Fraction: (" + this.n + "/" + this.d + ")"); } } class T { public static void main(String [] s){ Fraction f; f = new Fraction(1,2); String s = f.chaine(); Ecran.ecrireLigne(s); f = new Fraction(1,3); String s = f.chaine(); Ecran.ecrireLigne(s); } } f n=1 d=2 n=1 d=3 …

  32. Ramasse miettes • Un programme de la JVM qui se charge de ramasser les zones mémoires correspondant aux objets n'ayant aucune référence • Ces zones seront recyclées • Ce programme s'appelle aussi Garbage Collector

  33. Exercice • On se propose de programmer une application permettant de simuler le fonctionnement d'un contrôleur de pression des 4 pneus d'une voiture. Celles-ci doivent être entre 2.2+-10% à l'avant, et entre 2.0 +-10% à l'arrière. • Le programme doit lire les 4 pressions depuis le clavier et afficher un diagnostic montrant l'état de chaque pneu : • normal, surgonflé, sous-gonflé • la pression nécessaire à ajouter (positive) ou retrancher (négative) • Le programme doit aussi vérifier l'équilibre gauche-droite. La différence entre les pressions à gauche et à droite doit être au plus 3%. • Représenter puis Ecrire les classes nécessaires

More Related