• Aucun résultat trouvé

Programmation Objet. Cours 2

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation Objet. Cours 2"

Copied!
18
0
0

Texte intégral

(1)

Programmation Objet. Cours 2

Marie-Pierre B´eal UPEM DUT 1

Encapsulation et visibilit´e. D´el´egation. Immutabilit´e.

Expressions, types, variables. Attributs et m´ethodes statiques.

(2)

Encapsulation et visibilit´ e

En programmation objet, l’encapsulation consiste `a prot´eger l’information contenue dans un objet et `a ne proposer que des m´ethodes pour manipuler cet objet.

En java on utilise des modificateurs de visibilit´e.

public: les attributs publics sont accessibles partout,

protected: les attributs protected sont accessibles seulement dans la classe elle-mˆeme et dans les classes d´eriv´ees ;

private: les attributs priv´es sont accessibles seulement dans la classe elle-mˆeme.

Par d´efaut les attributs sont visibles dans les classes du r´epertoire (ou du paquetage) mais on ne doit normalement pas laisser de visibilit´e par

(3)

public class Pixel { private int x;

private int y;

public int getX(){

return x;

}

public int getY(){

return y;

}

public void setX(int x){

this.x = x;

}

public Pixel(int x, int y){

this.x = x;

this.y = y;

}

(4)

Exemple : la classe PixelTest

public class PixelTest {

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

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

System.out.println(p1.x); //erreur a la compilation }

(5)

Pas de constructeurs ?

public class Pixel { private int x;

private int y;

}

Il existe un constructeur par d´efaut public class PixelTest {

public static void main(String[] args) {

Pixel p1 = new Pixel(); // le point (0,0) est cree }

(6)

Trop de constructeurs ?

On peut cr´eer plusieurs constructeurs ou m´ethodes de mˆeme nom `a condition que la suite des types des arguments soient diff´erentes.

public class Pixel { private int x;

private int y;

public Pixel(int x, int y){ // (int, int) this.x = x;

this.y = y;

}

public Pixel(int x){ // (int) this.x = x;

y = 0;

}

public Pixel(){ // () }

(7)

Plusieurs constructeurs

public class PixelTest {

public static void main(String[] args) {

Pixel p1 = new Pixel(); // le point (0,0) est cree Pixel p2 = new Pixel(2,3); // le point (2,3) est cree Pixel p3 = new Pixel(2); // le point (2,0) est cree }

(8)

Des segments

On veut cr´eer une classeSegmentpour manipuler des segments form´es de deux points.

public class Segment { private Pixel start;

private Pixel end;

public Segment(Pixel start, Pixel end){

this.start = start;

this.end = end;

}

public Pixel getStart() { return start;

}

public Pixel getEnd() { return end;

}

(9)

Des segments

public class SegmentTest {

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

Pixel p2 = new Pixel(4,5);

Segment s1 = new Segment(p1,p2);

Segment s2 = new Segment(new Pixel(), new Pixel(2,2));

System.out.println(s1.getStart().getX());

}

(10)

Des segments

Plusieurs constructeurs dans la classeSegment.

public class Segment { private Pixel start;

private Pixel end;

public Segment(Pixel start, Pixel end){

this.start = start;

this.end = end;

}

public Segment(int x1, int y1, int x2, int y2){

start = new Pixel(x1,y1);

end = new Pixel(x2,y2);

} ....

(11)

Des segments

public class SegmentTest {

public static void main(String[] args) {

Segment s1 = new Segment(new Pixel(), new Pixel(2,2));

Segment s2 = new Segment(0,0,2,2);

System.out.println(s1 == s2); // affiche false }

(12)

Expressions, types, variables

Toute expression a une valeur et un type. Les valeurs sont les valeurs primitives ;

les r´ef´erences, qui sont des r´ef´erences `a des tableaux ou `a des objets.

Il existe une r´ef´erence sp´ecialenull. Elle peut ˆetre la valeur de n’importe quel type non primitif.

public class SegmentTest {

public static void main(String[] args) { Segment s = null; //pas d’objet s.getStart(); //NullPointerException }

}

(13)

Expressions, types, variables

Unevariable est le nom d’un emplacement m´emoire qui peut contenir une valeur. Le typede la variable d´ecrit la nature des valeurs de la variable.

Si le type est un type primitif, la valeur est de ce type.

Si le type est une classe, la valeur est une r´ef´erence`a un objet de cette classe (ou d’une classe d´eriv´ee).

Les types primitifs sontbyte,short,int,long,float,double,

(14)

Immutabilit´ e

Pour rendre une classe non mutable, on indique que les champs ne peuvent ˆetre modifi´es avec le mot cl´efinal.

public class Person {

private final String firstName;

private final String lastName;

private int age;

public Person(String firstName, String lastName, int age){

this.firstName = firstName;

this.lastName = lastName;

this.age = age;

}

(15)

Immutabilit´ e

public class Person {

private final String firstName;

private final String lastName;

private int age;

public String getFirstName() { return firstName;

}

public void badMethod() { firstName = "toto"; //erreur }

}

public class PersonTest {

public static void main(String[] args) {

Person p = new Person("Philip","Mortimer",42);

(16)

Immutabilit´ e

Dans ce cas, il faut mettre des ”getter” mais pas de ”setter”.

Les chaˆınes de caract`eres ne peuvent pas ˆetre modifi´ees en Java (comme en Python).

En Python les listes sont mutables, les tuples sont non mutables. En Java les tableaux, listes, ensembles, dictionnaires sont mutables.

(17)

Attributs statiques

Les attributs peuvent ˆetre

des attributs de classe (static) ; des attributs d’objet (ou d’instance).

Les attributs de classestaticsont partag´es par tous les objets de la classe. Il n’en existe qu’un par classe au lieu de un pour chaque instance ou objet d’une classe lorsqu’il s’agit de membre d’objets.

Exemple d’attributsstatic

un compteur du nombre d’objets d’une classe ;

un ´el´ement particulier de la classe, par exemple une origine.

public class Pixel { private int x, y;

public static Pixel origin = new Pixel(0,0);

(18)

M´ ethodes statiques

Les m´ethodes peuvent aussi ˆetre ou nonstatic.

Les m´ethodes statiques sont appel´ees en donnant le nom de la classe ou le nom d’une instance de la classe. Une m´ethode statique ne peut pas faire r´ef´erence `athis.

Elles sont utiles pour fournir des services (helper).

On peut utiliser la m´ethodestatic randomde la classe Math.

public class AleaTest {

double d = Math.random(); // double dans [0.0,1.0[

}

On peut aussi utiliser une m´ethode non static sur un objet Random.

import java.util.Random;

public class AleaTest {

int i = new Random().nextInt(10); // entier dans [0,10[

Références

Documents relatifs

Une m´ ethode statique n’a pas acc` es ` a l’´ etat de la classe, il s’agit d’une fonction utilitaire rattach´ ee ` a la classe (attention aux faux amis avec d’autres

Pour trouver plusieurs blocs de mémoire libre, plusieurs accès de disque pourraient être demandés. Pour augmenter l’efficacité, nous pouvons garder en mémoire centrale

Pour modifier les attributs d'un objet, comme sa couleur ou la largeur de sa bordure par exemple, vous pouvez utiliser la barre d'outils Ligne et remplissage, la barre

1 Une fois l’annonce d’invention validée par l’AVRE, créez-vous une adresse Gmail (si vous n’en avez pas déjà une) et transmettez à l’AVRE cette adresse, le nom de

Les attributs et méthodes déclarés protected ne sont accessibles qu’aux sous-classes (qu’elles soient dans le même paquetage ou pas) et aux classes du même paquetage. à b

Dans notre contexte, l’aspect affectation englobe toute r´ epartition des services sur un ensem- ble de ressources, comme des v´ ehicules, types de v´ ehicules, d´ epˆ ots ou

On consid`erera une superclasse (c’est-` a-dire une classe d´eriv´ee d’aucune autre classe) per- sonne avec les types de renseignements communs ` a chacune des trois classes d´

• L’approche fonctionnelle, plus innovante et plus en adé- quation avec les principes de la chimie verte, consiste à explorer les molécules existantes dans le domaine vivant pour