Leçon 2
Leçon 2
Leçon 2
L'inconvénient de cette approche est que finalement le code est touffu et différentes
références faites sur les données, peuvent conduire à des effets de bords.
Approche impérative vs approche orientée objet
Programmation Orientée Objet
5
Classes & Objets
Classes – Notation et implémentation
Une classe est un classeur. Elle est représentée en UML,
par un rectangle divisé en trois compartiments.
Le premier indique le nom de la classe, le deuxième ses
attributs et le troisième ses opérations.
Exemple de classe et implémentation java correspondante:
class Compte{
//attributs
int solde;
int plancher;
//méthodes
Compte(){…}
void crediter(int m){…}
boolean debiter(int m){…}
Notation UML
}
7
Classes & Objets
Constructeurs et surcharge de méthodes
A chaque classe est associée une méthode particulière, appelée
méthode constructeur.
Cette méthode porte toujours le même nom que la classe, et
sert à créer les futurs objets de la classe.
Elle peut être explicitement créée par le programmeur, ou bien
elle est implicitement créer par le langage. De toutes les façons,
cette méthode existe toujours.
Dans une classe, une opération
(même nom et même types de
paramètres) doit être unique.
Quand le nom d’une opération
apparaît plusieurs fois avec des
paramètres différents, on dit que
l’opération est surchargée on parle aussi de surcharge de
méthode.
8
Classes & Objets
Le pointeur this – 1er cas
this est le seul pointeur en java, il va permettre à une méthode d’accéder à la classe dans
laquelle elle est définie.
Par défaut dans une méthode, java fait référence à la variable de la classe. Cependant si
une variable dans cette même méthode porte le même nom, java va faire référence à le
variable de la méthode (portée de variable), grâce à this on va pouvoir préciser la
variable que l’on souhaite.
class ExempleThis{
String s = ”Variable dela classe”;
public static void main(String [] args){
new ExempleThis.appel();
}
void appel(){
System.out.println(s);
String s = ”Variable de la méthode”;
System.out.println(s);
System.out.println(this.s);
}
}
9
Classes & Objets
Le pointeur this – 2er cas
On peut aussi utiliser la méthode this() pour appeler un
constructeur d’une classe, cette méthode peut être appelée au
début d’un constructeur. On l’utilise dans un constructeur pour
appeler un autre constructeur.
class ExempleThis{
int a;
ExempleThis(){
this(217);
}
ExempleThis(int b){
a = b;
}
}
Dans cet exemple this(217) va appeler le constructeur
ExempleThis(int b).
10
Protection des données
Encapsulation
La protection de données ou encapsulation, est un mécanisme consistant
à rassembler les données et les méthodes au sein d’une structure en
cachant l’implémentation de l’objet, c’est-à-dire en empêchant l’accès
aux données par un autre moyen que les services proposés.
Les niveaux de visibilité sont:
◦public ou ”+”
◦protected ou ”#”
◦private ou ”-”
12
Généralisation et héritage
Définition et propriétés
13
Généralisation et héritage
Implémentation
La relation d’héritage est implémentée en java à l’aide du mot clé
extends, pour dire que la classe dérivée est une extension de la classe
de base.
14
Généralisation et héritage
Opérateur super
Le mot clé super fait référence à la super-classe de la classe dans
laquelle il est appelé. Il permet d’invoquer le constructeur de la super-
classe. super doit être déclaré au tout début d’un constructeur d’une
sous-classe ; cela lui permet d’effectuer au moins les mêmes tâches que
le constructeur de la super-classe.
15
Associations
Association binaire
Une association binaire est matérialisée par un trait
plein entre les classes associées. Elle peut être
ornée d’un nom, avec éventuellement une précision
du sens de lecture
16
Associations
Association réflexive
17
Exemple
Exécution de Point2D
18
Exercice
Une pile d’entier est une structure de donnée dans laquelle, les
informations sont rangées telles que le dernier à être rangé est
premier à sortir. ces informations peuvent être conservées
dans un tableau de taille fixe. une classe PileEntier comporte les
méthodes suivantes :
PileEntier(int n) le constructeur allouant dynamiquement
un emplacement de n entiers,
void empiler(int p) ajoute l’entier p sur la pile si possible,
int depile() fournit la valeur située au sommet de la pile,
cela si possible,
boolean pleine() renvoie true si la pile est pleine et false
sinon
boolean vide() renvoi true si la pile est vide et false sinon.
Implémenter la classe java correspondante.
19