Chapitre 2-Poo Java
Chapitre 2-Poo Java
Chapitre 2-Poo Java
Chap.2
1
Plan de ce chapitre
Objets, instances et classes
Classes en Java
Variables d’instance
Méthodes d’instance
traitements données
influencent
class Principale
{
public static void main (String[] args) {
Rectangle rect = new Rectangle();
rect.hauteur = 3.0;
rect.largeur = 4.0;
System.out.println("surface : " + rect.surface()); }
}
5
Programmation Orienté Objet (POO):
Un des objectifs principaux de POO :
organiser des programmes complexes grâce aux
notions :
d’encapsulation
d’héritage
et de polymorphisme
6
SEDKI A.
Notions d’Encapsulation
Principe d’encapsulation :
regrouper en une seule entité informatique les données et les
traitements qui lui sont spécifiques :
attributs (champs) = les données
méthodes : les fonctions (= traitements)
7
SEDKI A.
Les classes en Java
En Java une classe se déclare par le mot-clé class:
Syntaxe : Exemple :
class nom_classe class Rectangle
{ {
... ...
} }
class Rectangle
{
double hauteur;
double largeur;
double surface ()
{
return hauteur * largeur;
}
}
9
SEDKI A.
Définition des méthodes
La syntaxe de la définition des méthodes d’une classe est la
syntaxe normale de définition des fonctions.
mais elles sont simplement mises dans la classe elle-même.
Exemple : la méthode surface() class Rectangle
de la classe Rectangle : {
double hauteur;
double largeur;
double surface ( )
{
return hauteur * largeur;
}
mais où sont passés les paramètres ?
}
double surface(double hauteur, double largeur)
{
return hauteur * largeur;
}
10
SEDKI A. (Portée des attributs: transp. suivant)
Portée des attributs
Les attributs d’une classe constituent des variables
directement accessibles par toutes les méthodes de la
classe (i.e. « des variables globales à la classe »).
class Rectangle
{
double hauteur; accessibles par
double largeur; toutes les méthodes
de la classe Rectangle
double surface ()
{
return hauteur * largeur;
}
}
11
SEDKI A.
Paramètres des méthodes
Les méthodes peuvent avoir des paramètres de
l'extérieur de la classe ceux qui sont nécessaires.
class Rectangle
{
double hauteur;
double largeur;
// ...
void initialise(double h, double l)
{
// ...
}
}
12
SEDKI A.
Déclaration-intialisation d’un objet
L’instruction :
nomClasse objet = new nomClasse();
crée un objet de type nomClasse et initialise tous
ses attributs avec des valeurs par défaut :
int 0
double 0.0
boolean false
objet null
Exemple :
class ClassePrincipale {
public static void main (String[] args) {
Rectangle rect1 = new Rectangle();
// ....
}
}
13
SEDKI A.
Où déclarer les classes ?
Déclaration de plusieurs classes dans le même projet: la classe Rectangle
et la classe qui l’utilise (ClassePrincipale) déclarées dans le même projet
class Rectangle
{
double hauteur;
double largeur;
// ....
}
class ClassePrincipale
{
public static void main (String[] args)
{
Rectangle rect1 = new Rectangle();
// ....
}
} 14
SEDKI A.
Accès aux attributs
class Rectangle L’accès aux valeurs des
{
double hauteur; attributs d’un objet:
double largeur;
nomObjet.nomAttribut
}
class Exemple
{
public static void main (String[] args)
{
Rectangle rect1 = new Rectangle();
rect1.hauteur = 2.0;
rect1.largeur = 3.0;
System.out.println("hauteur : " + rect1.hauteur);
}
}
SEDKI A. 15
Appels aux méthodes
class Rectangle
{
double hauteur;
double largeur;
double surface ()
{
return hauteur * largeur;
}
} nom_objet. nom_methode(par1, ...);
class Exemple
{
public static void main (String[] args)
{
Rectangle rect = new Rectangle();
rect.hauteur = 3.0;
rect.largeur = 4.0;
System.out.println("surface : " + rect.surface());
}
}
SEDKI A. 16
Résumé : Accès aux attributs et méthodes
Chaque objet (instance) a ses propres attributs :
aucun risque de confusion d’un objet à une autre.
Exemple :
rect1 rect2
rect2.largeur
rect1.largeur 2.0 4.0
rect2.surface() : méthode surface de la classe Rectangle
s’appliquant à rect2
17
SEDKI A.
Résumé : Accès aux attributs et méthodes
Chaque objet (instance) a ses propres attributs :
aucun risque de confusion d’un objet à une autre.
Exemple :
18
SEDKI A.
Exercice: Volume d’un Cône
Écrivez un programme qui calcule le volume d’un cône.
Vous utiliserez une classe Cone :
class Cone
{
...
}
V=
19
SEDKI A.
Fonctions mathématiques
Java fournit les fonction mathématiques usuelles, ainsi que des
constantes comme PI.
Math.nomConstante;
class ExempleMathematique
{
public static void main(String[] args) {
double angle = 10 * Math.PI / 180;
double s = Math.sin(angle);
}
}
20
SEDKI A.
Exercice
Définir une classe Point permettant de manipuler un point
d’un plan. On prévoira :
21
SEDKI A.
Objets en mémoire
Pour désigner des objets dans une classe, on utilise des
variables d’un type particulier : les références (adresses)
Une référence contient l’adresse d’un objet
23
SEDKI A.
Les droits d'accès
En générale, il existe deux droits d'accès différents :
public : l'attribut ou la méthode peut être utilisé depuis
l'extérieur de la classe.
private : l'attribut ou la méthode ne peut pas être utilisé
depuis l'extérieur de la classe.
class Rectangle
{
private double hauteur;
private double largeur;
class Rectangle
{
public double hauteur;
public double largeur;
}
29
SEDKI A.
Intérêt encapsulation (2)
Masquer l’implémentation facilite évolution du logiciel
Modification de
l’implémentation sans
impact sur le code utilisant
la classe si la partie
publique (l’interface de la
classe) demeure inchangée
SEDKI A. 30
Masquage
masquage = un identificateur « cache » un autre identificateur
situation typique en POO : un paramètre cache un attribut
31
SEDKI A.
Masquage et this
Si, dans une méthode, un attribut est masqué alors la valeur de
l’attribut peut être référencée à l’aide du mot réservé this.
33
SEDKI A.
Droit d’accès - Portée des attributs (résumé)
class MaClasse {
private int x;
private int y;
class Cone
{
...
}
V=
35
SEDKI A.
Exercice d’application
Le but de cet exercice est de reprendre les exemples du cours illustrant les
notions d'objet et de classe :
Commencez par créer un projet TP1 et ouvrir un fichier MainRectangle.java et
définissez-y la classe Rectangle qui a deux champs largeur et longueur.
class Rectangle
{
private double largeur;
private double longueur;
//………………
}
36
SEDKI A.
Supposons maintenant que nous souhaitions modifier les valeurs des
champs dans le programme principal:
……….
class MainRectangle {