Vous êtes sur la page 1sur 19

Leçon 2

Les concepts orientés objets de Java


1. Approche impérative vs approche orientée objet
2. Objet & Classes
3. Protection des données
4. Les associations
Approche impérative vs approche orientée objet
Programmation structurée (impérative)

En programmation structurée ou programmation impérative tel que vu avec


les langages Pascal, c, ..; un programme est organisé en termes de données et
d'une suite de sous-programmes (procédures et fonctions) manipulant ces
données;

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

On assiste à une réorganisation du code pour obtenir des entités


contenant les données et fonctions sémantiquement proches
Classes & Objets
Objets – caractéristiques
L’IDENTITÉ: L’objet possède une identité, qui permet de le
distinguer des autres objets, indépendamment de son état. On
construit généralement cette identité grâce à un identifiant
découlant naturellement du problème
LES ATTRIBUTS: Il s’agit des données caractérisant l’objet.
Ce sont des variables stockant des informations sur l’état de
l’objet.
LES MÉTHODES: Les méthodes d’un objet caractérisent son
comportement, c’est-à-dire l’ensemble des actions (appelées
opérations) que l’objet est à même de réaliser. Ces opérations
permettent de faire réagir l’objet aux sollicitations extérieures
(ou d’agir sur les autres objets). De plus, les opérations sont
étroitement liées aux attributs, car leurs actions peuvent
dépendre des valeurs des attributs, ou bien les modifier.
4
Classes & Objets
Classes - Définition
Une classe est un concept abstrait représentant des
éléments variés comme :
 des éléments concrets (ex : des avions),
 des éléments abstraits ( ex : des commandes),
 des composants d’une application (ex : les boutons des boîtes
de dialogue),
 des structures informatiques (ex : des tables de hachage),
 des éléments comportementaux (ex: des tâches), etc.
Tout système orienté objet est organisé autour des
classes.
Une classe est la description formelle d’un
ensemble d’objets ayant une sémantique et des
propriétés communes.

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
}

Les paramètres de méthodes peuvent être précédés de in,


out, inout qui indiquent la direction des données. 6
Classes & Objets
Instanciation
Une objet est représenté en java par les opérations de
déclaration et d’instanciation.
Exemple, considérons des objets correspondants à la
classes Compte précédente. Les déclarations sont les
suivante:
Compte Cp0, cp1, cp2;
Les opérations d’instanciation:
cp1 = new Compte();
cp2 = new Compte();
Il est tout aussi possible de déclarer et d’instancier un objet à
l’aide de la même instruction:
Compte cp0 = new Compte();

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 ”-”

Public class Point3D{


Public float x;
Private float y;
Protected float z;
Point3D(){…}
Point3D(float x0, float y0, float z0){…}
Public void deplacer(float dx, float dy, float dz){…}
Public void afficher(){…}
}
11
Exemple
Point2D
Public class Point2D{
private int x;
private int y;
public Point2D(int x0, int y0){
x = x0;
y = y0;
}
public void deplacer(int dx, int dy){
x += dx;
y += dy;
}
public void afficher(){
System.out.println(”position x:” +x);
System.out.println(”position y:” +y);
}
}

12
Généralisation et héritage
Définition et propriétés

La généralisation décrit une relation entre une classe générale


(classe de base ou classe parent) et une classe spécialisée (sous-
classe). La classe spécialisée est intégralement cohérente avec la
classe de base, mais comporte des informations supplémentaires
(attributs, opérations, associations). Un objet de la classe
spécialisée peut être utilisé partout où un objet de la classe de
base est autorisé.
Les propriétés principales de l’héritage sont :
 La classe fille possède toutes les propriétés des ses classes
parents, mais elle ne peut accéder aux propriétés privées de
celle-ci.
 Une classe fille peut redéfinir (même signature) une ou
plusieurs méthodes de la classe parent. Sauf indication
contraire, un objet utilise les opérations les plus spécialisées
dans la hiérarchie des classes.

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.

//la super Classe


public class UneclasseDeBase{
public void uneMethode(){...}
}
//la classe fille
public class UneclasseDerivee extends UneClasseDeBase{
public void uneMethode(){...}
}

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.

public class Personne{


public void Personne(String nom) {...}
}

public class Etudiant extends Personne{


private int note;
public void Etudiant(String nom, int note) {
super(nom);
this.note = note;
...
}
}

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

public class Personne{


public Entreprise employeur;
...
}

public class Entreprise{


public LinkedList<Personne> employe;
...
}

16
Associations
Association réflexive

Quand les deux extrémités de l’association


pointent vers la même classe, l’association est dite
réflexive.

public class Personne{


public Personne chef;
public LinkedList<Personne> subalterne;
...
}

17
Exemple
Exécution de Point2D

1ère approche : Ajout de la fonction dans la classe Point2D


public class Point2D{
...
public static void main(String args[]){

}
}

2ème approche : création d’une nouvelle classe qui instancie


un objet Point2D
public class Executable{
...
public static void main(String args[]){
Point 2D pt = ...
}
}

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

Vous aimerez peut-être aussi