• Aucun résultat trouvé

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD 2

N/A
N/A
Protected

Academic year: 2022

Partager "UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD 2"

Copied!
16
0
0

Texte intégral

(1)

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java

TD 2

Juliana Silva Bernardes

[email protected]

http://www.lcqb.upmc.fr/julianab/teaching/JAVA/

(2)

!

• this

• Surcharge de constructeurs – Encapsulation

• Surcharge de methodes

• Méthode toString

!

!

Summary

(3)

3

Encapsulation

Exemple

39

public class Chien {

// variables d’instance private int taille;

private String race;

private String nom;

// Constructeur sans paramètre public Chien () {

taille = 10;

race = "";

nom = "";

}

// une méthode

public void aboyer() {

System.out.println("Ouah! Ouah!");

} }

Chien

private int taille private String race private String nom

Chien()

public void aboyer()

Exemple : la classe Test

UML

L’opérateur « point » (.) donne accès à l’état (les variables d’instance) et au comportement d’un objet (ses méthodes).

public class Test {

public static void main(String [] args) {

// créer un nouvel objet, une nouvelle instance Chien monChien = new Chien();

// lui dire d’aboyer en utilisant l’opérateur // point sur la variable monChien pour appeler // aboyer()

monChien.aboyer();

} }

Chien

- taille : int - race : String - nom : String + Chien()

+ aboyer():void

(4)

Encapsulation

On ne peut pas utiliser l’opérateur « point » (.) sur les variables de la classe que sont private

Encapsulation

41

On ne peut pas utiliser l’opérateur « point » (.) sur les variables de la classe Chien ailleurs que dans la classe Chien elle-même.

public class Test {

public static void main(String [] args) {

// créer un nouvel objet, une nouvelle instance Chien monChien = new Chien();

//définir sa taille à l’aide de l’opé point monChien.taille = ...;

// lui dire d’aboyer : appeler aboyer() monChien.aboyer();

} }

La variable taille est « propriété privée » de la classe Chien .

! La variable taille est « propriété privée » de la classe Chien .

(5)

Encapsulation

On ne peut pas utiliser l’opérateur « point » (.) sur les variables de la classe que sont private

Encapsulation

41

On ne peut pas utiliser l’opérateur « point » (.) sur les variables de la classe Chien ailleurs que dans la classe Chien elle-même.

public class Test {

public static void main(String [] args) {

// créer un nouvel objet, une nouvelle instance Chien monChien = new Chien();

//définir sa taille à l’aide de l’opé point monChien.taille = ...;

// lui dire d’aboyer : appeler aboyer() monChien.aboyer();

} }

La variable taille est « propriété privée » de la classe Chien .

! Alors comment va-t-on pouvoir acceder et modifier les variables de la classe ?

les accesseurs et les modificateurs

(6)

Les accesseurs

public class TestChien {


public static void main(String [] args) {

Chien monChien = new Chien(0.85, “labrador”, “bob");

System.out.println(monChien.getRace());}

public class Chien {

private double taille;

private String race;

private String nom;

public Chien(int taille, String race, String nom){

this.taille = taille;

this.race = race;

this.nom = nom;}

public double getTaille() {return taille;}

public String getRace() { return race;}

public String getNom() { return nom;}

<— variables d’instance

<— accesseurs

Créez un labrador qui s’appelle bob de taille 0.85 m, et Affichez sa race 😓

(7)

Les modificateurs

!

public class Test {


public static void main(String [] args) {

Chien monChien = new Chien(0.85, “labrador”, “bob");

monChien.setRace("Boxer")

System.out.println(monChien.getRace());

public class Chien {

private double taille;

private String race;

private String nom;

public Chien(int taille, String race, String nom){

this.taille = taille;

this.race = race;

this.nom = nom;}

public double getTaille() {return taille;}

public String getRace() { return race;}

public String getNom() { return nom;}

<— variables d’instance

<— accesseurs

Changez la race pour "Boxer" et Affichez 😓

(8)

Surcharge de constructeurs

public class Point2D {

// variables d’instance private int x;

private int y;

//Constructeurs

public Point2D() {x = 0; y = 0;}

public Point2D(int x, int y) {this.x = x; this.y = y;}

}

Nous pouvons avoir plus qu'un constructer dans une classe

public class TestPoint2D {


public static void main(String [] args) { Point2D p1 = new Point2D();

Point2D p2 = new Point2D(3, 5);

}

x=0

p1 => y=0

(9)

public class Point2D {

// variables d’instance private int x;

private int y;

//Constructeurs

public Point2D() {x = 0; y = 0;}

public Point2D(int x, int y) {this.x = x; this.y = y;}

}

x=0

p1 => y=0 p2 => x=3 y=5

Surcharge de constructeurs

public class TestPoint2D {


public static void main(String [] args) { Point2D p1 = new Point2D();

Point2D p2 = new Point2D(3, 5);

}

Nous pouvons avoir plus qu'un constructer dans une classe

(10)

public class Point2D {

// variables d’instance private int x;

private int y;

//Constructeurs

public Point2D() {this(0, 0);}

public Point2D(int x, int y) {this.x = x; this.y = y;}

}

Surcharge de constructeurs

public class TestPoint2D {


public static void main(String [] args) { Point2D p1 = new Point2D();

Point2D p2 = new Point2D(3, 5);

}

Nous pouvons avoir plus qu'un constructer dans une classe

Attention : Réutilisez les constructeurs existent.

(11)

public class Employe {

// variables d’instance private String nom;

private double salaire;

//Constructeurs

public Employe() {this(0, 0);}

public Employe(String nom, double salaire) { this.nom = nom; this.salaire = salaire;}

}

Surcharge de constructeurs

Ecrivez la class Employe Employe

- salaire : double - nom : String + Employe()

+ Employe(String, double)

😓

(12)

Signature = nom de la méthode et de la liste ordonnée des types de ses arguments

Surcharge de methodes

public void setTaille(double taille)

‣ Plusieurs méthodes de mêmes noms peuvent coexister dans une

classe pourvu que leurs signatures soient différentes.

(13)

Surcharge de methodes

public class Employe{

private String nom;

private double salaire;

!

public double prime(){

return salaire*1.05;

}

public double prime(int nombreEnfants){

return salaire*(1 + 0.1*nombreEnfants);

}

Employe

- salaire : double - nom : String + Employe()

+ Employe(String, double) + prime(): double

+ prime(int): double

Ecrivez les methods prime :

• Le premier sans arguments 5% sur le salaire

• Le deuxieme 10% sur le salaire pour chaque enfant 😓

😓

(14)

Créez l'employé Jonh (salaire = 2000) sans enfants et donnez-lui sa prime.

Créez l'employé Paul (salaire = 3000) avec 3 enfants et donnez-lui sa prime.

Surcharge de methodes

public class Employe{

private String nom;

private double salaire;

!

public double prime(){

return salaire*1.05;

}

public double prime(int nombreEnfants){

return salaire*(1 + 0.1*nombreEnfants);

} }

public class TestEmploye{

public static void main(String [] args) {

Employe e1 = new Employe(“Jonh”, 2000);

e1.prime();

!

Employe e2 = new Employe(“Paul”, 3000);

e2.prime(3);

} }

😓

(15)

‣ Décrire sous la forme d’une chaîne de caractères l’état de l’objet au moment de l’invocation.

‣ Elle peut (doit) être définie (redéfinie) pour chaque classe

‣ Il faut respecter la syntaxe suivante :

Méthode toString()

public String toString ()

{ 


String s = “”;

s = s + “qq choise” + ..;

return s ;

}

(16)

Méthode toString()

public class Point2D {

// variables d’instance private int x;

private int y;

. . .

public String toString() {

String s;

s = “(“ + x + “,” + y “)”;

return s;

} }

public class TestPoint2D {


public static void main(String [] args) { Point2D p1 = new Point2D(3, 5);

System.out.println(p1.toString());

!

Point2D p2 = new Point2D(7, 9);

System.out.println(p2);

}

😓

Ecrivez la method toString pour la class Point2D, la method doit

returner urn chain de caracteres dans le format (x, y).

Références

Documents relatifs

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java!. TD4 - Composition,

‣ Un tableau est une structure de données contenant un groupe d'éléments tous du même type. ‣ Le type des éléments peut être un type primitif ou

‣ boolean, byte, short, char, int, long, float et double, sont associées des classes Boolean, Byte, Short, Character, Integer, Long, Float et Double. ‣ Ces classes ont des

6OF EFT QSPQSJÏUÏT JOEVJUFT QBS MF QPMZNPSQIJTNF FTU RVF MJOUFSQSÏUFVS +BWB FTU DBQBCMF EF USPVWFS MF USBJUFNFOU Ë FČFDUVFS MPST EF MBQQFM EVOF NÏUIPEF TVS VO PCKFU &#34;JOTJ

-F DPODFQU EF DMBTTF BCTUSBJUF TF TJUVF FOUSF DFMVJ EF DMBTTF FU DFMVJ EJOUFSGBDF $FTU VOF DMBTTF RVPO OF QFVU QBT EJSFDUFNFOU JOTUBODJFS DBS DFSUBJOFT EF TFT NÏUIPEFT OF TPOU

‣ On peut affecter à un champ ou une variable d'un type une expression de type moins élevé dans la hiérarchie des types. int a

Depuis le début de l’année, nous utilisons systématiquement la méthode main avec un paramètre de type String[], c’est à dire un tableau de chaînes de caractères. Ce

‣ La classe Error représente une erreur grave intervenue dans la machine virtuelle