SlideShare une entreprise Scribd logo
POO en Java
Ch. III
Les Classes et les Objets
Rappels: Concepts de l’orienté objet avec Java
I. Création d’une classe
II. Création et manipulation d’Objets
1. Introduction
2. Etapes de création des Objets
2.1. Déclaration d’un objet:
2.2. Création d’un objet
2.3. Initialisation par défaut
III. Définition des méthodes
IV. Accès aux membres d’un objet
1. Accès aux attributs(données membres)
2. Accès aux méthodes: appels des méthodes
V. Encapsulation (accessibilté)
IV. Méthodes d’accès aux valeurs des variables depuis
l’extérieur
V. Autoréférences: emploi de this
VI. Champs et méthodes de classe
1. Champs de classe (variable de classe)
2. Méthodes de classe
VII. Le mot clé final
PLAN
Rappels: Caractéristiques d’une classe
• Une classe est définie par les attributs et les opérations (méthodes).
1) Attributs:
 Appelés également champs, ou données membres,
correspondent aux propriétés de la classe.
 Ils sont définis par un nom, un type de données et
éventuellement une valeur initiale.
 Un attribut est une variable qui stocke des données.
Employé
code : int
nom : String
nbEmployés : static int
Trois attributs de la classe Employé
3
 Les méthodes permettent de décrire les comportements des objets.
 Elles représentent des procédures ou des fonctions qui permettent d’exécuter un
certain nombre d’instructions.
 Parmi les méthodes d’une classe existe une méthode particulière, qui porte le
même nom que la classe, qui s’appelle le constructeur.
 Le rôle du constructeur étant créer les objets de la classe en les initialisant.
2) Méthodes :
4
Rappels: Caractéristiques d’une classe
Employé
Attributs :
code : int
nom : String
nbEmployés : static int
Constructeur :
Employé()
Méthodes :
afficheCode() : void
afficheNom() : void
Exemple:
afficheCode() et afficheNom() sont deux
méthodes qui affichent respectivement le
code et le nom d’un employé
I. Création d’une classe
Pour créer une classe (un nouveau type d’objets)
on utilise le mot clé class.
La syntaxe pour créer une classe de nom ClasseTest est la suivante:
class ClasseTest{ /* ClasseTest est le nom de la classe à créer */
/* Corps de la classe
- Description des attributs (données membres)
- Description des méthodes
*/
}
5
Exemple: Rectangle est une classe utilisée pour créer des objets
représentant des rectangles particuliers.
• Elle regroupe 4 données de type réel qui caractérisent le rectangle:
longueur, largeur et origine (x,y) (la position en abscisse et en
ordonnée de son origine).
• On suppose qu’on effectue les opérations de déplacement et de calcul
de la surface du rectangle.
• Les symboles + et – sont les spécificateurs d’accès (voir plus loin)
Exemple (notation UML (Unified Modeling Language)
Rectangle
- longueur
- largeur
-x
-y
+ déplacer(int,int)
+ calculSurface()
Nom de la classe
Description des attributs (champs)
Description des méthodes (comportements)
- : private
# : protected
+ : public
$ (ou souligné) : static
6
Code java de la classe Rectangle
Nom de la classe
Attributs
Méthodes
class Rectangle {
int longueur;
int largeur;
int x;
int y;
void deplace(int dx, int dy) {
x = x+ dx;
y = y + dy;
}
int surface() {
return longueur * largeur;
}
}
7
Classe : déclaration.
En Java, pour déclarer une classe on utilise le mot-clé class suivi
du nom de la classe.
public class Rectangle {
...
}
Règles
1. La première lettre du nom d’une classe doit toujours être
une lettre Majuscule (ex : Chat).
2. Mélange de minuscule, majuscule avec la première lettre de
chaque mot en majuscule (ex : ChatGris).
3. Une classe se trouve dans un fichier portant son nom
suivi de l’extention .java (ex : ChatGris.java)
8
Classe : écriture
Règles
1. un fichier source peut contenir plusieurs classes
mais une seule doit être publique
2. la classe contenant la méthode main doit obligatoirement
être publique, afin que la machine virtuelle y ait accès
3. une classe n’ayant aucun attribut d’accès reste accessible à toutes
les classes du même paquetage donc, a fortiori, du même fichier source
Cas de plusieurs classes dans un même fichier source
On peut placer une seule classe par fichier source. Mais, Java n’est pas tout à fait aussi
strict, il vous impose seulement de respecter les règles suivantes dans le :
9
II. Création et manipulation d’Objets
1. Introduction
• Une fois la classe est définie, on peut créer des objets (=variables)
Donc chaque objet est une variable d’une classe. Il a son
espace mémoire. Il admet une valeur propre à chaque attribut.
Les valeurs des attributs caractérisent l’état de l’objet.
• L’opération de création de l’objet est appelée une instanciation.
Un objet est aussi appelé une instance d'une classe. Il est
référencé par une variable ayant un état (ou valeur).
• On parle indifféremment d’instance, de référence ou d’objet
10
Une classe permet d’instancier plusieurs objets.
• les attributs et les méthodes d’un objet (d’une instance d’une classe) sont
les mêmes pour toutes les instances de la classe.
• Les valeurs des attributs sont propres à chaque objet.
• Par exemple rectangleR1 est une instance de la classe Rectangle
Rectangle
« instance»
rectangleR1
- longueur =10
- largeur =2
- x=0
- y=0
Nom de la classe
Relation d’instanciation
Nom de l’objet ou de l’instance
Valeurs des attributs qui caractérisent
l’objet rectangleR1
11
• Les valeurs des attributs peuvent être différentes.
Chaque instance d’une classe possède ses propres valeurs pour chaque attribut
(chaque objet a son propre état)
Rectangle
« instance»
rectangleR1
- longueur =10
- largeur =2
- x=0
- y=0
rectangleR2
- longueur =5
- largeur =7
- x=1
- y=2
rectangleR3
- longueur =3
- largeur =5
- x=2
- y=0
12
• Les valeurs des attributs peuvent être différents.
Chaque instance d’une classe possède ses propres valeurs pour chaque attribut
Voiture
« instance»
VW
- Marque: Polo
- Coleur: Rouge
- Vitesse: 5
- Porte: 3
BM Honda
- Marque: X5
- Coleur: Blanche
- Vitesse: 6
- Porte: 5
- Marque: Civic
- Coleur: Noire
- Vitesse: 5
- Porte: 5
(chaque objet a son propre état)
13
2. Etapes de création des Objets
Contrairement aux types primitifs, la création d’objets se passe en deux étapes:
- Déclaration de l’objet
- Création de l’objet
2.1. Déclaration d’un objet:
Chaque objet appartient à une classe. C’est est une variable comme les
autres. Il faut notamment qu’il soit déclaré avec son type.
Syntaxe: NomDeClasse objetId;
NomDeClasse objetId1, objetId2,….;
- NomDeClasse est la nom de la classe.
- Déclare objetId1, objetId2, … comme variables de type NomDeClasse
14
Attention:
- La déclaration d’une variable de type primitif réserve un emplacement
mémoire pour stocker la variable
- Par contre, la déclaration d’un objet, ne réserve pas une place mémoire
pour l’objet, mais seulement un emplacement pour une référence
à cet objet
les objets sont manipulés avec des références
15
Exemple:
Considérons la classe ClasseTest
class ClasseTest {
// corps de la classe ClasseTest
}
l’instruction:
ClasseTest objA;
- Déclare objA comme objet (variable) de type ClasseTest
- Définit le nom et le type de l’objet.
- Déclare que la variable objA est une référence à un objet de la classe
ClasseTest. Cela veut dire qu’on va utiliser une variable objA qui
référencera un objet de la classe ClasseTest.
- Aucun objet n’est créé: un objet seulement déclaré vaut « null ».
objA null
16
2.2. Création d’un objet
Après la déclaration d’une variable, on doit faire la création (et
allocation) de la mémoire de l’objet qui sera référencé par cette variable
- La création doit être demandée explicitement dans le programme en
faisant appel à l’opérateur new.
- La création réserve de la mémoire pour stocker l’objet et initialise
les attributs
L’expression new NomDeClasse() crée un emplacement pour
stocker un objet de type NomDeClasse.
17
Exemple
class ClasseTest {
/* Corps de la classe ClasseTest */
}
Les deux expressions précédentes peuvent être remplacées par :
ClassTest objA = new ClasseTest();
En générale:
1. Chaque objet met ses données membres dans sa propre zone mémoire.
2. Les données membres ne sont pas partagées entre les objets de la même classe.
ClassTest objA ; /* déclare une référence sur l’objet objA */
objA= new ClasseTest(); /* crée un emplacement pour stocker l’objet objA */
18
Exemple : Considérons la classe Rectangle
public class Rectangle{
int longueur;
int largeur;
int x;
int y;
public static void main (String args[]) {
Rectangle rectangleR1; /* déclare une référence sur l’objet rectangleR1 */
rectangleR1 = new Rectangle(); /* création de l’objet rectangleR1 */
// rectangle R1 est une instance de la classe Rectangle
// Les deux expressions peuvent être remplacées par :
// Rectangle rectangleR1= new Rectangle();
}
}
19
Attention déclaration / création
Il ne faut pas confondre
– déclaration d’une variable
– création d’un objet référencé par cette variable
Rectangle rectangleR1;
– déclare que l’on va utiliser une variable rectangleR1
qui référencera un objet de la classe Rectangle
– mais aucun objet n’est créé
20
rectangleR1 = new Rectangle();
Cette instruction permet la création de l’objet rectangleR1
2.3. Initialisation par défaut
La création d’un objet entraîne toujours une initialisation par
défaut de tous les attributs de l’objet même si on ne les
initialise pas:
----------------------------------------------------------------
Type | Valeur par défaut |
-----------------------------|-----------------------------------|
boolean | false |
char | ‘u0000’ (null) |
byte | (byte) 0 |
short | (short) 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
Class | null |
-----------------------------------------------------------------|
21
Attention:
Cette garantie d’initialisation par défaut
ne s’applique pas aux variables locales
(variables déclarées dans un bloc, par exemple
variables locales d’une méthode)
(voir plus loin)
22
III. Définition des méthodes
En Java, chaque fonction est définie dans une classe . Elle est définie par:
– un type de retour
– un nom
– une liste (éventuellement vide) de paramètres typés en entrée
– une suite d’instructions (un bloc d’instructions) qui constitue le corps
de la méthode
Syntaxe: typeRetour nomMethode ( «Liste des paramètres » ) {
/*
corps de la méthode qui peut contenir l’instruction
*/
}
23
- nomMethode : c’est le nom de la méthode
(sa 1ère lettre doit être écrite en minuscule)
- « Liste des paramètres » : liste des arguments de la méthode.
Elle définit les types et les noms des informations qu’on
souhaite passer à la méthode lors de son appel.
- typeRetour : c’est le type de la valeur qui sera retournée par
la méthode après son appel. Si la méthode ne fournit aucun
résultat, alors typeRetour est remplacé par le mot clé void.
Remarque:
La valeur retournée par la fonction est spécifiée dans le corps
de la méthode par l’instruction de retour:
return expression;
ou
return; // (possible uniquement pour une fonction de type void)
24
- En Java, le type de la valeur de retour de la méthode ne fait pas
partie de sa signature (au contraire de la définition habituelle
d'une signature)
Passage des paramètres
Le mode de passage des paramètres dans les méthodes dépend de
la nature des paramètres :
- par valeur pour les types primitifs.
- par valeur des références pour les objets: la référence est
passée par valeur (i.e. le paramètre est une copie de la
référence), mais le contenu de l’objet référencé peut être
modifié par la fonction (car la copie de référence pointe vers
le même objet…) :
25
- La signature d’une méthode est: le nom de la méthode et
l’ensemble des types de ses paramètres.
Méthodes et paramètres : à retenir
exemple : public,
static
type de la valeur
renvoyée ou void
couples d'un type et d'un
identificateur séparés par des « , »
<modificateur> <type-retour> <nom> (<liste-param>) {<bloc>}
public double add (double number1, double number2)
{
return (number1 +number2);
}
Définition d’une méthode en Java
Notre méthode
retourne ici une
valeur
26
1) La portée d’une variable locale est limitée au bloc constituant la
méthode où elle est déclarée. De plus, une variable locale ne doit pas
posséder le même nom qu’un argument muet de la méthode :
void f(int n)
{ float x ; // variable locale a f
float n ; // interdit en Java
.....
}
void g ()
{ double x ; // variable locale à g, indépendante de x locale à f
.....
}
Remarques importantes
2) Les variables locales ne sont pas initialisées de façon implicite
(contrairement aux champs des objets). Toute variable locale, y
compris une référence à un objet, doit être initialisée avant d’être
utilisée, faute de quoi on obtient une erreur de compilation.
27
IV. Accès aux membres d’un objet
1. Accès aux attributs(données membres)
Considérons la classe ClassTest suivante:
class ClasseTest {
double x;
boolean b;
}
ClasseTest objA = new ClasseTest();
// créer un objet de référence objA
// on peut dire aussi objA est une instance de la classe ClassTest
// ou tous simplement créer un objet objA
ClasseTest objB = new ClasseTest();
28
Maintenant l’objet dont la référence objA existe.
Pour accéder à une donnée membre on indique le nom de la
référence à l’objet suivi par un point suivi par le nom du
membre dans l’objet de la manière suivante:
nomObjet = nom de la référence à l’objet
nomAttribut =nom de la donnée membre (attribut).
29
nomObjet.nomAttibut
Pour les objets objA et objB
de la classe ClassTest
qui sont déjà créés:
objA.b=true; // affecte true à l’attribut b de l’objet objA.
objA.x=2.3; // affecte le réel 2.3 au membre x de l’objet objA.
objB.b=false; // affecte false à l’attribut b de l’objet objB.
objB.x=0.35; // affecte le réel 0.35 au membre x de l’objet objB.
Exemple:
ClasseTest objA = new ClasseTest();
class ClasseTest {
double x;
boolean b;
}
ClasseTest objB = new ClasseTest();
30
2. Accès aux méthodes: appels des méthodes
• Les méthodes ne peuvent être définies que comme des
composantes d’une classe.
• Une méthode ne peut être appelée que pour un objet.
• L’appel d’une méthode pour un objet se réalise en
nommant l’objet suivi d’un point suivi du nom de la
méthode et de sa liste d’arguments:
nomObjet.nomMethode(arg1, ….)
où
nomObjet : nom de la référence à l’objet
nomMethode : nom de la méthode.
31
Exemple 1: soit f() une méthode qui prend un paramètre de
type double et qui retourne une valeur de type int.
class ClasseTest {
float x;
int i;
boolean b;
}
ClasseTest objA = new ClasseTest(); // créer un objet objA
int f(double x) {
int n;
// corps de la fonction f()
return n;
}
int j = objA.f(5.3); // affecte à j la valeur retournée par f()
32
Exemple 2: Considérons la classe Rectangle dotée de la méthode
initialise qui permet d’affecter des valeurs à l’origine (aux attributs x et y).
public class Rectangle{
int longueur, largeur;
int x,y;
Rectangle r1;
r1.longueur=4; r1.largeur=2;
// Erreur car l’objet n’est pas encore créé. Il faut tout d’abord le créer
}
}
void initialiseOrigine(int x0, int y0) {
x=x0; y=y0;
}
public static void main (String args[]) {
r1. initialiseOrigine(0,0); // affecte 0 aux attributs x et y
r1=new Rectangle ();
33
Exemple 3 : crée à l’origine un rectangle r1 de longueur 4 et de largeur 2
public class Rectangle{
int longueur, largeur;
int x, y;
void initialiseOrigine(int x0, int y0) {
x=x0; y=y0;
}
r1. initialiseOrigine(0,0);
}
}
public static void main (String args[]) {
r1.longueur=4; r1.largeur=2;
Rectangle r1=new Rectangle ();
34
V. Encapsulation (accessibilté)
• Une classe permet d’envelopper les objets : un objet est vu par le
reste du programme comme une entité opaque.
• L'enveloppement [wrapping] des attributs et méthodes à l'intérieur
des classes plus (+) le contrôle d'accès aux membre de l’objet est
appelé encapsulation.
• Le contrôle d'accès aux membre de l’objet est appelé cacher
l'implémentation: les membres publiques sont vus de l'extérieur
mais les membres privés sont cachés.
• L'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.
35
• Possibilité d’accéder aux attributs d’une classe Java mais
ceci n’est pas recommandé car contraire au principe
d’encapsulation: les données (attributs) doivent être
protégés.
• Accessibles pour l’extérieur par des méthodes particulières
(sélecteurs)
• Plusieurs niveaux de visibilité peuvent être définis en
précédant, la déclaration d’un attribut, d’une méthode ou
d’un constructeur, par un modificateur : private, public ou
protected.
36
Spécificateurs d’accès:
L'encapsulation permet de définir 3 niveaux de visibilité des éléments de
la classe.
Ces 3 niveaux de visibilité (public, private et protected) définissent les
droits d'accès aux données suivant le type d’accès:
• public: accès depuis l’extérieure (par une classe quelconque)
• private : accès depuis l’intérieure (accès par une méthode de la classe
elle-même)
• protected: se comporte comme private avec moins de restriction. Une
classe dérivée a un accès aux membres protected mais pas aux
membres private.
• Accès par défaut: lorsqu’aucun de ces spécificateurs n’est mentionné.
37
Encapsulation "usuelle": les attributs sont privés,
et les méthodes sont publiques.
Constitution d’un programme Java
• Un programme Java utilise un ensemble de classes
• Les classes sont regroupées par package
• Une classe regroupe un ensemble d’attributs
et de méthodes
38
• Permet de distinguer les services offerts (interface) de
l’implémentation
• L’encapsulation des classes Java est définie au niveau du
package
• L’encapsulation agit au niveau des classes et non des objets
– Un attribut « private » dans un objet sera accessible depuis
un autre objet de la même classe
• Pour une bonne encapsulation, il est préférable de définir les
attributs comme « private »
• On définit alors des méthodes «publiques » (accesseurs)
permettant de lire et/ou de modifier les attributs
Visibilité - Encapsulation
39
Exemple 1: modification depuis l’extérieur d’un champs private
class ClasseTest {
public int x;
public void initialise (int i, int j){
x=i;
}
}
public class TestA{ // fichier source de nom TestA.java
public static void main (String args[]) {
ClasseTest objA;
objA=new ClasseTest(); // On peut aussi déclarer ClasseTest objA=new ClasseTest();
objA.initialise(1,3); // x vaut 1 et y vaut 3
objA.x=2; // x vaut maintenant 2. On peut accéder à x car il est public
objA.y=3;
// ne compile pas car accès à un attribut y privé de la classe ClasseTest
// depuis l’extérieur (classe TestA)
}
}
private int y;
y=j; // accès à l’attribut private y depuis l’intérieure OK
40
Exemple 2: affichage depuis l’extérieur d’un champs private
class ClasseTest {
public int x;
private int y;
public void initialise (int i, int j){
x=i;
y=j; // accès à l’attribut private y depuis l’intérieure OK
}
}
public class TestA{ // fichier source de nom TestA.java
public static void main (String args[]) {
ClasseTest objA;
objA=new ClasseTest(); // On peut aussi déclarer ClasseTest objA=new ClasseTest();
objA.initialise(1,3); // x vaut 1 et y vaut 3
System.out.println(" x= "+objA.x); // affiche x = 1 puisque x public, on peut y accéder
System.out.println(" y= "+objA.y);
}
}
41
// ne compile pas car accès à un attribut y privé de la classe ClasseTest
// depuis l’extérieur (classe TestA)
Exemple 2: affichage depuis l’extérieur d’un champs private
42
43
Exemple 3: affichage depuis l’intérieur d’un champs private
IV. Méthodes d’accès aux valeurs des variables depuis l’extérieur
Comment peut on accéder à la valeur d’une variable protégée ??
Considérons la classe Etudiant qui a les champs nom et prenom private.
Exemple:
class Etudiant {
private String nom, prenom;
public void initialise(String st1, String st2){
nom=st1; prenom=st2;
}
}
public class MethodeStatic{
public static void main(String[] args) {
Etudiant e= new Etudiant();
System.out.println("Nom = "+e.nom);
// ne compile pas car le champs nom est privé
/* comment faire pour afficher le nom de l’étudiant e ??
}
} 44
e.initialise("Mohd","Ali");
Méthodes d’accès aux valeurs des variables depuis l’extérieur
45
Accesseur
Getters
get()
Mutateur
Setters
set()
Pour afficher la valeur de l’attribut nom (champs private), on définie
Un accesseur (méthode getNom) qui est une méthode permettant de
lire, depuis l’extérieur, le contenu d'une donnée membre protégée.
Exemple:
class Etudiant {
private String nom, prenom;
public void initialise(String nom, String prenom){
this.nom=nom; this.prenom=prenom;
}
public String getNom (){
return nom;
}
public String getPrenom (){
return prenom;
}
}
public class MethodeStatic{
public static void main(String[] args) {
Etudiant e= new Etudiant();
e.initialise("Mohd","Ali");
System.out.println("Nom = "+e.getNom());
System.out.println("Prenom = "+e.getPrenom());
}
}
46
public class MethodeStatic{
public static void main(String[] args) {
Etudiant e= new Etudiant();
e.initialise("Mohd","Ali");
System.out.println("Nom = "+e.getNom());
System.out.println("Prenom = "+e.getPrenom());
}
}
Exemple:
class Etudiant {
private String nom, prenom;
Public void initialise(String nom, String Prenom){
this.nom=nom; this.prenom=prenom;
}
public String getNom (){
return nom;
}
public String getPrenom (){
return prenom;
}
}
47
Comment peut-on modifier (depuis l’extérieur) le contenu d'un attribut privé?
Exemple:
class Etudiant {
private int cne;
}
public class MethodeStatic{
public static void main(String[] args) {
Etudiant e= new Etudiant();
// Modifier le champs cne (attribut private)
e.cne=23541654;
// ne compile pas car le champ cne est un champ protégé (private)
}
}
48
Pour modifier la valeur de l’attribut nom (champs private), on défine
Un modificateur (mutateur) qui est une méthode permettant de
modifier le contenu d'une donnée membre protégée.
Exemple:
class Etudiant {
private int cne;
public void setCNE (int cne){
this.cne=cne;
}
}
public class MethodeStatic{
public static void main(String[] args) {
Etudiant e= new Etudiant();
e.setCNE(23541654);
}
}
49
V. Autoréférences: emploi de this
- Possibilité au sein d’une méthode de désigner explicitement
l'instance courante : faire référence à l’objet qui a appelé cette
méthode.
- Par exemple pour accéder aux attributs "masqués" par les
paramètres de la méthode.
class ClasseA {
….
public void f(….) {
…… // ici l’emploi de this désigne la référence à l’objet
// ayant appelé la méthode f
}
}
50
Exemple:
class Etudiant {
private String nom, prenom;
public initialise(String st1, String st2) {
nom = st1;
prenom = st2;
}
}
Comme les identificateurs st1 et st2 sont des arguments muets pour
la méthode initialise(), alors on peut les noter nom et prenom qui
n’ont aucune relation avec les champs private nom et prenom.
Dans ce cas la classe Etudiant peut s’écrire comme suit:
class Etudiant {
private String nom, prenom;
public initialise(String nom, String prenom){
this.nom=nom;
this.prenom=prenom;
}
}
51
class Personne
{
public String nom;
Personne (String nom)
{
this.nom=nom;
}
}
Pour lever l’ambiguïté sur le mot « nom »
et déterminer si c’est le nom du paramètre
ou de l’attribut
public MaClasse(int a, int b) {...}
public MaClasse (int c)
{
this(c,0);
}
public MaClasse ()
{
this(10);
}
Appelle le constructeur
MaClasse(int a, int b)
Appelle le constructeur
MaClasse(int c)
L’autoréférence (this) est utilisée principalement :
 pour lever une ambiguïté,
 dans un constructeur, pour appeler un autre constructeur de la même classe,
 lorsqu'une référence à l'instance courante doit être passée en paramètre à une méthode.
52

Contenu connexe

Tendances

Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
Amir Souissi
 
Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitions
Amir Souissi
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Shellmates
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
Aziz Darouichi
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
Yassine Badri
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
Aziz Darouichi
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
Mouna Torjmen
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
Abdelouahed Abdou
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
Mouna Torjmen
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
ENSET, Université Hassan II Casablanca
 
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFITheses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Algebre relationelle
Algebre relationelleAlgebre relationelle
Algebre relationelle
hnsfr
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
ENSET, Université Hassan II Casablanca
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27
megaplanet20
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
Youness Boukouchi
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
MICHRAFY MUSTAFA
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
ENSET, Université Hassan II Casablanca
 

Tendances (20)

Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
Chap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitionsChap5 diagramme d'etats-transitions
Chap5 diagramme d'etats-transitions
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFITheses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
 
Algebre relationelle
Algebre relationelleAlgebre relationelle
Algebre relationelle
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 

En vedette

API et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme NumériqueAPI et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme Numérique
Alexandre Jubien
 
POO
POOPOO
API pour les nuls
API pour les nulsAPI pour les nuls
API pour les nuls
Patrick PINTO
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
OVHcloud
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]
Yassine Badri
 
La theorie des dependances et la normalisation des relations-base de données
La theorie des dependances et la normalisation des relations-base de donnéesLa theorie des dependances et la normalisation des relations-base de données
La theorie des dependances et la normalisation des relations-base de données
Yassine Badri
 
Cours php
Cours php Cours php
Cours php
Yassine Badri
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
Yassine Badri
 
base de données -note de cours
base de données -note de cours base de données -note de cours
base de données -note de cours
Yassine Badri
 
les métiers d'informatique
les métiers d'informatiqueles métiers d'informatique
les métiers d'informatique
Yassine Badri
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
Yassine Badri
 
les métiers d'informatique
les métiers d'informatiqueles métiers d'informatique
les métiers d'informatique
Yassine Badri
 
Mise en place d'un Data Warehouse
Mise en place d'un Data WarehouseMise en place d'un Data Warehouse
Mise en place d'un Data Warehouse
Abderrahmane Filali
 
Conception des bases de données relationelles
Conception des bases de données relationellesConception des bases de données relationelles
Conception des bases de données relationelles
Yassine Badri
 
Educational Portal
Educational PortalEducational Portal
Educational Portal
Khouloud Ben Cheikh
 
Conception datawarehouse
Conception datawarehouseConception datawarehouse
Conception datawarehouse
Hassane Dkhissi
 
Cahier des charges pour la création d'un data warehouse medical
Cahier des charges pour la création d'un data warehouse medicalCahier des charges pour la création d'un data warehouse medical
Cahier des charges pour la création d'un data warehouse medical
Vincent H. Hupertan
 
script site e-commerce -php
script site e-commerce -php script site e-commerce -php
script site e-commerce -php
Yassine Badri
 
Théorie de normalisation-base de données
Théorie de normalisation-base de donnéesThéorie de normalisation-base de données
Théorie de normalisation-base de données
Yassine Badri
 

En vedette (20)

API et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme NumériqueAPI et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme Numérique
 
POO
POOPOO
POO
 
API pour les nuls
API pour les nulsAPI pour les nuls
API pour les nuls
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]
 
La theorie des dependances et la normalisation des relations-base de données
La theorie des dependances et la normalisation des relations-base de donnéesLa theorie des dependances et la normalisation des relations-base de données
La theorie des dependances et la normalisation des relations-base de données
 
Cours php
Cours php Cours php
Cours php
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
base de données -note de cours
base de données -note de cours base de données -note de cours
base de données -note de cours
 
les métiers d'informatique
les métiers d'informatiqueles métiers d'informatique
les métiers d'informatique
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
 
les métiers d'informatique
les métiers d'informatiqueles métiers d'informatique
les métiers d'informatique
 
Mise en place d'un Data Warehouse
Mise en place d'un Data WarehouseMise en place d'un Data Warehouse
Mise en place d'un Data Warehouse
 
Conception des bases de données relationelles
Conception des bases de données relationellesConception des bases de données relationelles
Conception des bases de données relationelles
 
Educational Portal
Educational PortalEducational Portal
Educational Portal
 
Bddwdm
BddwdmBddwdm
Bddwdm
 
Conception datawarehouse
Conception datawarehouseConception datawarehouse
Conception datawarehouse
 
Cahier des charges pour la création d'un data warehouse medical
Cahier des charges pour la création d'un data warehouse medicalCahier des charges pour la création d'un data warehouse medical
Cahier des charges pour la création d'un data warehouse medical
 
script site e-commerce -php
script site e-commerce -php script site e-commerce -php
script site e-commerce -php
 
Théorie de normalisation-base de données
Théorie de normalisation-base de donnéesThéorie de normalisation-base de données
Théorie de normalisation-base de données
 

Similaire à Chap 03 poo en java partie1

fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
TarikElMahtouchi1
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
AabidiHafid
 
Les Classe en Java
Les Classe en JavaLes Classe en Java
Les Classe en Java
Wiki Info Systeme
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
Abdoulaye Dieng
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
Amir Souissi
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
Abdoulaye Dieng
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
Yassine Badri
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
AabidiHafid
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
Amel Morchdi
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
Amir Souissi
 
Java
JavaJava
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
MohamedCheikhAhmed
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
Mansouri Khalifa
 
Diagramme de Classe
Diagramme de ClasseDiagramme de Classe
Diagramme de Classe
abdoMarocco
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
SOAT
 
Memo java
Memo javaMemo java
Memo java
Ghazouani Mahdi
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
SafaeLhr1
 
Cours de JAVA de base
Cours de JAVA  de baseCours de JAVA  de base
Cours de JAVA de base
Wiki Info Systeme
 

Similaire à Chap 03 poo en java partie1 (20)

fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
 
Les Classe en Java
Les Classe en JavaLes Classe en Java
Les Classe en Java
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Java
JavaJava
Java
 
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
 
Diagramme de Classe
Diagramme de ClasseDiagramme de Classe
Diagramme de Classe
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Memo java
Memo javaMemo java
Memo java
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Cours de JAVA de base
Cours de JAVA  de baseCours de JAVA  de base
Cours de JAVA de base
 

Plus de Yassine Badri

exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
Yassine Badri
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
Yassine Badri
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
Yassine Badri
 
exercices gestion de stock
exercices gestion de stock exercices gestion de stock
exercices gestion de stock
Yassine Badri
 
Exercice arbre de décision
Exercice arbre de décision Exercice arbre de décision
Exercice arbre de décision
Yassine Badri
 
Arbre de décision
Arbre de décisionArbre de décision
Arbre de décision
Yassine Badri
 
.logistique gestion des stock
.logistique gestion des stock .logistique gestion des stock
.logistique gestion des stock
Yassine Badri
 
cours base de données
cours base de donnéescours base de données
cours base de données
Yassine Badri
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
Yassine Badri
 

Plus de Yassine Badri (9)

exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
exercices gestion de stock
exercices gestion de stock exercices gestion de stock
exercices gestion de stock
 
Exercice arbre de décision
Exercice arbre de décision Exercice arbre de décision
Exercice arbre de décision
 
Arbre de décision
Arbre de décisionArbre de décision
Arbre de décision
 
.logistique gestion des stock
.logistique gestion des stock .logistique gestion des stock
.logistique gestion des stock
 
cours base de données
cours base de donnéescours base de données
cours base de données
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 

Dernier

Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
TimogoTRAORE
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
NadineHG
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 

Dernier (7)

Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
Chap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdfChap1 Généralités sur les réseaux informatiques.pdf
Chap1 Généralités sur les réseaux informatiques.pdf
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 

Chap 03 poo en java partie1

  • 1. POO en Java Ch. III Les Classes et les Objets
  • 2. Rappels: Concepts de l’orienté objet avec Java I. Création d’une classe II. Création et manipulation d’Objets 1. Introduction 2. Etapes de création des Objets 2.1. Déclaration d’un objet: 2.2. Création d’un objet 2.3. Initialisation par défaut III. Définition des méthodes IV. Accès aux membres d’un objet 1. Accès aux attributs(données membres) 2. Accès aux méthodes: appels des méthodes V. Encapsulation (accessibilté) IV. Méthodes d’accès aux valeurs des variables depuis l’extérieur V. Autoréférences: emploi de this VI. Champs et méthodes de classe 1. Champs de classe (variable de classe) 2. Méthodes de classe VII. Le mot clé final PLAN
  • 3. Rappels: Caractéristiques d’une classe • Une classe est définie par les attributs et les opérations (méthodes). 1) Attributs:  Appelés également champs, ou données membres, correspondent aux propriétés de la classe.  Ils sont définis par un nom, un type de données et éventuellement une valeur initiale.  Un attribut est une variable qui stocke des données. Employé code : int nom : String nbEmployés : static int Trois attributs de la classe Employé 3
  • 4.  Les méthodes permettent de décrire les comportements des objets.  Elles représentent des procédures ou des fonctions qui permettent d’exécuter un certain nombre d’instructions.  Parmi les méthodes d’une classe existe une méthode particulière, qui porte le même nom que la classe, qui s’appelle le constructeur.  Le rôle du constructeur étant créer les objets de la classe en les initialisant. 2) Méthodes : 4 Rappels: Caractéristiques d’une classe Employé Attributs : code : int nom : String nbEmployés : static int Constructeur : Employé() Méthodes : afficheCode() : void afficheNom() : void Exemple: afficheCode() et afficheNom() sont deux méthodes qui affichent respectivement le code et le nom d’un employé
  • 5. I. Création d’une classe Pour créer une classe (un nouveau type d’objets) on utilise le mot clé class. La syntaxe pour créer une classe de nom ClasseTest est la suivante: class ClasseTest{ /* ClasseTest est le nom de la classe à créer */ /* Corps de la classe - Description des attributs (données membres) - Description des méthodes */ } 5
  • 6. Exemple: Rectangle est une classe utilisée pour créer des objets représentant des rectangles particuliers. • Elle regroupe 4 données de type réel qui caractérisent le rectangle: longueur, largeur et origine (x,y) (la position en abscisse et en ordonnée de son origine). • On suppose qu’on effectue les opérations de déplacement et de calcul de la surface du rectangle. • Les symboles + et – sont les spécificateurs d’accès (voir plus loin) Exemple (notation UML (Unified Modeling Language) Rectangle - longueur - largeur -x -y + déplacer(int,int) + calculSurface() Nom de la classe Description des attributs (champs) Description des méthodes (comportements) - : private # : protected + : public $ (ou souligné) : static 6
  • 7. Code java de la classe Rectangle Nom de la classe Attributs Méthodes class Rectangle { int longueur; int largeur; int x; int y; void deplace(int dx, int dy) { x = x+ dx; y = y + dy; } int surface() { return longueur * largeur; } } 7
  • 8. Classe : déclaration. En Java, pour déclarer une classe on utilise le mot-clé class suivi du nom de la classe. public class Rectangle { ... } Règles 1. La première lettre du nom d’une classe doit toujours être une lettre Majuscule (ex : Chat). 2. Mélange de minuscule, majuscule avec la première lettre de chaque mot en majuscule (ex : ChatGris). 3. Une classe se trouve dans un fichier portant son nom suivi de l’extention .java (ex : ChatGris.java) 8
  • 9. Classe : écriture Règles 1. un fichier source peut contenir plusieurs classes mais une seule doit être publique 2. la classe contenant la méthode main doit obligatoirement être publique, afin que la machine virtuelle y ait accès 3. une classe n’ayant aucun attribut d’accès reste accessible à toutes les classes du même paquetage donc, a fortiori, du même fichier source Cas de plusieurs classes dans un même fichier source On peut placer une seule classe par fichier source. Mais, Java n’est pas tout à fait aussi strict, il vous impose seulement de respecter les règles suivantes dans le : 9
  • 10. II. Création et manipulation d’Objets 1. Introduction • Une fois la classe est définie, on peut créer des objets (=variables) Donc chaque objet est une variable d’une classe. Il a son espace mémoire. Il admet une valeur propre à chaque attribut. Les valeurs des attributs caractérisent l’état de l’objet. • L’opération de création de l’objet est appelée une instanciation. Un objet est aussi appelé une instance d'une classe. Il est référencé par une variable ayant un état (ou valeur). • On parle indifféremment d’instance, de référence ou d’objet 10
  • 11. Une classe permet d’instancier plusieurs objets. • les attributs et les méthodes d’un objet (d’une instance d’une classe) sont les mêmes pour toutes les instances de la classe. • Les valeurs des attributs sont propres à chaque objet. • Par exemple rectangleR1 est une instance de la classe Rectangle Rectangle « instance» rectangleR1 - longueur =10 - largeur =2 - x=0 - y=0 Nom de la classe Relation d’instanciation Nom de l’objet ou de l’instance Valeurs des attributs qui caractérisent l’objet rectangleR1 11
  • 12. • Les valeurs des attributs peuvent être différentes. Chaque instance d’une classe possède ses propres valeurs pour chaque attribut (chaque objet a son propre état) Rectangle « instance» rectangleR1 - longueur =10 - largeur =2 - x=0 - y=0 rectangleR2 - longueur =5 - largeur =7 - x=1 - y=2 rectangleR3 - longueur =3 - largeur =5 - x=2 - y=0 12
  • 13. • Les valeurs des attributs peuvent être différents. Chaque instance d’une classe possède ses propres valeurs pour chaque attribut Voiture « instance» VW - Marque: Polo - Coleur: Rouge - Vitesse: 5 - Porte: 3 BM Honda - Marque: X5 - Coleur: Blanche - Vitesse: 6 - Porte: 5 - Marque: Civic - Coleur: Noire - Vitesse: 5 - Porte: 5 (chaque objet a son propre état) 13
  • 14. 2. Etapes de création des Objets Contrairement aux types primitifs, la création d’objets se passe en deux étapes: - Déclaration de l’objet - Création de l’objet 2.1. Déclaration d’un objet: Chaque objet appartient à une classe. C’est est une variable comme les autres. Il faut notamment qu’il soit déclaré avec son type. Syntaxe: NomDeClasse objetId; NomDeClasse objetId1, objetId2,….; - NomDeClasse est la nom de la classe. - Déclare objetId1, objetId2, … comme variables de type NomDeClasse 14
  • 15. Attention: - La déclaration d’une variable de type primitif réserve un emplacement mémoire pour stocker la variable - Par contre, la déclaration d’un objet, ne réserve pas une place mémoire pour l’objet, mais seulement un emplacement pour une référence à cet objet les objets sont manipulés avec des références 15
  • 16. Exemple: Considérons la classe ClasseTest class ClasseTest { // corps de la classe ClasseTest } l’instruction: ClasseTest objA; - Déclare objA comme objet (variable) de type ClasseTest - Définit le nom et le type de l’objet. - Déclare que la variable objA est une référence à un objet de la classe ClasseTest. Cela veut dire qu’on va utiliser une variable objA qui référencera un objet de la classe ClasseTest. - Aucun objet n’est créé: un objet seulement déclaré vaut « null ». objA null 16
  • 17. 2.2. Création d’un objet Après la déclaration d’une variable, on doit faire la création (et allocation) de la mémoire de l’objet qui sera référencé par cette variable - La création doit être demandée explicitement dans le programme en faisant appel à l’opérateur new. - La création réserve de la mémoire pour stocker l’objet et initialise les attributs L’expression new NomDeClasse() crée un emplacement pour stocker un objet de type NomDeClasse. 17
  • 18. Exemple class ClasseTest { /* Corps de la classe ClasseTest */ } Les deux expressions précédentes peuvent être remplacées par : ClassTest objA = new ClasseTest(); En générale: 1. Chaque objet met ses données membres dans sa propre zone mémoire. 2. Les données membres ne sont pas partagées entre les objets de la même classe. ClassTest objA ; /* déclare une référence sur l’objet objA */ objA= new ClasseTest(); /* crée un emplacement pour stocker l’objet objA */ 18
  • 19. Exemple : Considérons la classe Rectangle public class Rectangle{ int longueur; int largeur; int x; int y; public static void main (String args[]) { Rectangle rectangleR1; /* déclare une référence sur l’objet rectangleR1 */ rectangleR1 = new Rectangle(); /* création de l’objet rectangleR1 */ // rectangle R1 est une instance de la classe Rectangle // Les deux expressions peuvent être remplacées par : // Rectangle rectangleR1= new Rectangle(); } } 19
  • 20. Attention déclaration / création Il ne faut pas confondre – déclaration d’une variable – création d’un objet référencé par cette variable Rectangle rectangleR1; – déclare que l’on va utiliser une variable rectangleR1 qui référencera un objet de la classe Rectangle – mais aucun objet n’est créé 20 rectangleR1 = new Rectangle(); Cette instruction permet la création de l’objet rectangleR1
  • 21. 2.3. Initialisation par défaut La création d’un objet entraîne toujours une initialisation par défaut de tous les attributs de l’objet même si on ne les initialise pas: ---------------------------------------------------------------- Type | Valeur par défaut | -----------------------------|-----------------------------------| boolean | false | char | ‘u0000’ (null) | byte | (byte) 0 | short | (short) 0 | int | 0 | long | 0L | float | 0.0f | double | 0.0 | Class | null | -----------------------------------------------------------------| 21
  • 22. Attention: Cette garantie d’initialisation par défaut ne s’applique pas aux variables locales (variables déclarées dans un bloc, par exemple variables locales d’une méthode) (voir plus loin) 22
  • 23. III. Définition des méthodes En Java, chaque fonction est définie dans une classe . Elle est définie par: – un type de retour – un nom – une liste (éventuellement vide) de paramètres typés en entrée – une suite d’instructions (un bloc d’instructions) qui constitue le corps de la méthode Syntaxe: typeRetour nomMethode ( «Liste des paramètres » ) { /* corps de la méthode qui peut contenir l’instruction */ } 23
  • 24. - nomMethode : c’est le nom de la méthode (sa 1ère lettre doit être écrite en minuscule) - « Liste des paramètres » : liste des arguments de la méthode. Elle définit les types et les noms des informations qu’on souhaite passer à la méthode lors de son appel. - typeRetour : c’est le type de la valeur qui sera retournée par la méthode après son appel. Si la méthode ne fournit aucun résultat, alors typeRetour est remplacé par le mot clé void. Remarque: La valeur retournée par la fonction est spécifiée dans le corps de la méthode par l’instruction de retour: return expression; ou return; // (possible uniquement pour une fonction de type void) 24
  • 25. - En Java, le type de la valeur de retour de la méthode ne fait pas partie de sa signature (au contraire de la définition habituelle d'une signature) Passage des paramètres Le mode de passage des paramètres dans les méthodes dépend de la nature des paramètres : - par valeur pour les types primitifs. - par valeur des références pour les objets: la référence est passée par valeur (i.e. le paramètre est une copie de la référence), mais le contenu de l’objet référencé peut être modifié par la fonction (car la copie de référence pointe vers le même objet…) : 25 - La signature d’une méthode est: le nom de la méthode et l’ensemble des types de ses paramètres.
  • 26. Méthodes et paramètres : à retenir exemple : public, static type de la valeur renvoyée ou void couples d'un type et d'un identificateur séparés par des « , » <modificateur> <type-retour> <nom> (<liste-param>) {<bloc>} public double add (double number1, double number2) { return (number1 +number2); } Définition d’une méthode en Java Notre méthode retourne ici une valeur 26
  • 27. 1) La portée d’une variable locale est limitée au bloc constituant la méthode où elle est déclarée. De plus, une variable locale ne doit pas posséder le même nom qu’un argument muet de la méthode : void f(int n) { float x ; // variable locale a f float n ; // interdit en Java ..... } void g () { double x ; // variable locale à g, indépendante de x locale à f ..... } Remarques importantes 2) Les variables locales ne sont pas initialisées de façon implicite (contrairement aux champs des objets). Toute variable locale, y compris une référence à un objet, doit être initialisée avant d’être utilisée, faute de quoi on obtient une erreur de compilation. 27
  • 28. IV. Accès aux membres d’un objet 1. Accès aux attributs(données membres) Considérons la classe ClassTest suivante: class ClasseTest { double x; boolean b; } ClasseTest objA = new ClasseTest(); // créer un objet de référence objA // on peut dire aussi objA est une instance de la classe ClassTest // ou tous simplement créer un objet objA ClasseTest objB = new ClasseTest(); 28
  • 29. Maintenant l’objet dont la référence objA existe. Pour accéder à une donnée membre on indique le nom de la référence à l’objet suivi par un point suivi par le nom du membre dans l’objet de la manière suivante: nomObjet = nom de la référence à l’objet nomAttribut =nom de la donnée membre (attribut). 29 nomObjet.nomAttibut
  • 30. Pour les objets objA et objB de la classe ClassTest qui sont déjà créés: objA.b=true; // affecte true à l’attribut b de l’objet objA. objA.x=2.3; // affecte le réel 2.3 au membre x de l’objet objA. objB.b=false; // affecte false à l’attribut b de l’objet objB. objB.x=0.35; // affecte le réel 0.35 au membre x de l’objet objB. Exemple: ClasseTest objA = new ClasseTest(); class ClasseTest { double x; boolean b; } ClasseTest objB = new ClasseTest(); 30
  • 31. 2. Accès aux méthodes: appels des méthodes • Les méthodes ne peuvent être définies que comme des composantes d’une classe. • Une méthode ne peut être appelée que pour un objet. • L’appel d’une méthode pour un objet se réalise en nommant l’objet suivi d’un point suivi du nom de la méthode et de sa liste d’arguments: nomObjet.nomMethode(arg1, ….) où nomObjet : nom de la référence à l’objet nomMethode : nom de la méthode. 31
  • 32. Exemple 1: soit f() une méthode qui prend un paramètre de type double et qui retourne une valeur de type int. class ClasseTest { float x; int i; boolean b; } ClasseTest objA = new ClasseTest(); // créer un objet objA int f(double x) { int n; // corps de la fonction f() return n; } int j = objA.f(5.3); // affecte à j la valeur retournée par f() 32
  • 33. Exemple 2: Considérons la classe Rectangle dotée de la méthode initialise qui permet d’affecter des valeurs à l’origine (aux attributs x et y). public class Rectangle{ int longueur, largeur; int x,y; Rectangle r1; r1.longueur=4; r1.largeur=2; // Erreur car l’objet n’est pas encore créé. Il faut tout d’abord le créer } } void initialiseOrigine(int x0, int y0) { x=x0; y=y0; } public static void main (String args[]) { r1. initialiseOrigine(0,0); // affecte 0 aux attributs x et y r1=new Rectangle (); 33
  • 34. Exemple 3 : crée à l’origine un rectangle r1 de longueur 4 et de largeur 2 public class Rectangle{ int longueur, largeur; int x, y; void initialiseOrigine(int x0, int y0) { x=x0; y=y0; } r1. initialiseOrigine(0,0); } } public static void main (String args[]) { r1.longueur=4; r1.largeur=2; Rectangle r1=new Rectangle (); 34
  • 35. V. Encapsulation (accessibilté) • Une classe permet d’envelopper les objets : un objet est vu par le reste du programme comme une entité opaque. • L'enveloppement [wrapping] des attributs et méthodes à l'intérieur des classes plus (+) le contrôle d'accès aux membre de l’objet est appelé encapsulation. • Le contrôle d'accès aux membre de l’objet est appelé cacher l'implémentation: les membres publiques sont vus de l'extérieur mais les membres privés sont cachés. • L'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. 35
  • 36. • Possibilité d’accéder aux attributs d’une classe Java mais ceci n’est pas recommandé car contraire au principe d’encapsulation: les données (attributs) doivent être protégés. • Accessibles pour l’extérieur par des méthodes particulières (sélecteurs) • Plusieurs niveaux de visibilité peuvent être définis en précédant, la déclaration d’un attribut, d’une méthode ou d’un constructeur, par un modificateur : private, public ou protected. 36
  • 37. Spécificateurs d’accès: L'encapsulation permet de définir 3 niveaux de visibilité des éléments de la classe. Ces 3 niveaux de visibilité (public, private et protected) définissent les droits d'accès aux données suivant le type d’accès: • public: accès depuis l’extérieure (par une classe quelconque) • private : accès depuis l’intérieure (accès par une méthode de la classe elle-même) • protected: se comporte comme private avec moins de restriction. Une classe dérivée a un accès aux membres protected mais pas aux membres private. • Accès par défaut: lorsqu’aucun de ces spécificateurs n’est mentionné. 37 Encapsulation "usuelle": les attributs sont privés, et les méthodes sont publiques.
  • 38. Constitution d’un programme Java • Un programme Java utilise un ensemble de classes • Les classes sont regroupées par package • Une classe regroupe un ensemble d’attributs et de méthodes 38
  • 39. • Permet de distinguer les services offerts (interface) de l’implémentation • L’encapsulation des classes Java est définie au niveau du package • L’encapsulation agit au niveau des classes et non des objets – Un attribut « private » dans un objet sera accessible depuis un autre objet de la même classe • Pour une bonne encapsulation, il est préférable de définir les attributs comme « private » • On définit alors des méthodes «publiques » (accesseurs) permettant de lire et/ou de modifier les attributs Visibilité - Encapsulation 39
  • 40. Exemple 1: modification depuis l’extérieur d’un champs private class ClasseTest { public int x; public void initialise (int i, int j){ x=i; } } public class TestA{ // fichier source de nom TestA.java public static void main (String args[]) { ClasseTest objA; objA=new ClasseTest(); // On peut aussi déclarer ClasseTest objA=new ClasseTest(); objA.initialise(1,3); // x vaut 1 et y vaut 3 objA.x=2; // x vaut maintenant 2. On peut accéder à x car il est public objA.y=3; // ne compile pas car accès à un attribut y privé de la classe ClasseTest // depuis l’extérieur (classe TestA) } } private int y; y=j; // accès à l’attribut private y depuis l’intérieure OK 40
  • 41. Exemple 2: affichage depuis l’extérieur d’un champs private class ClasseTest { public int x; private int y; public void initialise (int i, int j){ x=i; y=j; // accès à l’attribut private y depuis l’intérieure OK } } public class TestA{ // fichier source de nom TestA.java public static void main (String args[]) { ClasseTest objA; objA=new ClasseTest(); // On peut aussi déclarer ClasseTest objA=new ClasseTest(); objA.initialise(1,3); // x vaut 1 et y vaut 3 System.out.println(" x= "+objA.x); // affiche x = 1 puisque x public, on peut y accéder System.out.println(" y= "+objA.y); } } 41 // ne compile pas car accès à un attribut y privé de la classe ClasseTest // depuis l’extérieur (classe TestA)
  • 42. Exemple 2: affichage depuis l’extérieur d’un champs private 42
  • 43. 43 Exemple 3: affichage depuis l’intérieur d’un champs private
  • 44. IV. Méthodes d’accès aux valeurs des variables depuis l’extérieur Comment peut on accéder à la valeur d’une variable protégée ?? Considérons la classe Etudiant qui a les champs nom et prenom private. Exemple: class Etudiant { private String nom, prenom; public void initialise(String st1, String st2){ nom=st1; prenom=st2; } } public class MethodeStatic{ public static void main(String[] args) { Etudiant e= new Etudiant(); System.out.println("Nom = "+e.nom); // ne compile pas car le champs nom est privé /* comment faire pour afficher le nom de l’étudiant e ?? } } 44 e.initialise("Mohd","Ali");
  • 45. Méthodes d’accès aux valeurs des variables depuis l’extérieur 45 Accesseur Getters get() Mutateur Setters set()
  • 46. Pour afficher la valeur de l’attribut nom (champs private), on définie Un accesseur (méthode getNom) qui est une méthode permettant de lire, depuis l’extérieur, le contenu d'une donnée membre protégée. Exemple: class Etudiant { private String nom, prenom; public void initialise(String nom, String prenom){ this.nom=nom; this.prenom=prenom; } public String getNom (){ return nom; } public String getPrenom (){ return prenom; } } public class MethodeStatic{ public static void main(String[] args) { Etudiant e= new Etudiant(); e.initialise("Mohd","Ali"); System.out.println("Nom = "+e.getNom()); System.out.println("Prenom = "+e.getPrenom()); } } 46
  • 47. public class MethodeStatic{ public static void main(String[] args) { Etudiant e= new Etudiant(); e.initialise("Mohd","Ali"); System.out.println("Nom = "+e.getNom()); System.out.println("Prenom = "+e.getPrenom()); } } Exemple: class Etudiant { private String nom, prenom; Public void initialise(String nom, String Prenom){ this.nom=nom; this.prenom=prenom; } public String getNom (){ return nom; } public String getPrenom (){ return prenom; } } 47
  • 48. Comment peut-on modifier (depuis l’extérieur) le contenu d'un attribut privé? Exemple: class Etudiant { private int cne; } public class MethodeStatic{ public static void main(String[] args) { Etudiant e= new Etudiant(); // Modifier le champs cne (attribut private) e.cne=23541654; // ne compile pas car le champ cne est un champ protégé (private) } } 48
  • 49. Pour modifier la valeur de l’attribut nom (champs private), on défine Un modificateur (mutateur) qui est une méthode permettant de modifier le contenu d'une donnée membre protégée. Exemple: class Etudiant { private int cne; public void setCNE (int cne){ this.cne=cne; } } public class MethodeStatic{ public static void main(String[] args) { Etudiant e= new Etudiant(); e.setCNE(23541654); } } 49
  • 50. V. Autoréférences: emploi de this - Possibilité au sein d’une méthode de désigner explicitement l'instance courante : faire référence à l’objet qui a appelé cette méthode. - Par exemple pour accéder aux attributs "masqués" par les paramètres de la méthode. class ClasseA { …. public void f(….) { …… // ici l’emploi de this désigne la référence à l’objet // ayant appelé la méthode f } } 50
  • 51. Exemple: class Etudiant { private String nom, prenom; public initialise(String st1, String st2) { nom = st1; prenom = st2; } } Comme les identificateurs st1 et st2 sont des arguments muets pour la méthode initialise(), alors on peut les noter nom et prenom qui n’ont aucune relation avec les champs private nom et prenom. Dans ce cas la classe Etudiant peut s’écrire comme suit: class Etudiant { private String nom, prenom; public initialise(String nom, String prenom){ this.nom=nom; this.prenom=prenom; } } 51
  • 52. class Personne { public String nom; Personne (String nom) { this.nom=nom; } } Pour lever l’ambiguïté sur le mot « nom » et déterminer si c’est le nom du paramètre ou de l’attribut public MaClasse(int a, int b) {...} public MaClasse (int c) { this(c,0); } public MaClasse () { this(10); } Appelle le constructeur MaClasse(int a, int b) Appelle le constructeur MaClasse(int c) L’autoréférence (this) est utilisée principalement :  pour lever une ambiguïté,  dans un constructeur, pour appeler un autre constructeur de la même classe,  lorsqu'une référence à l'instance courante doit être passée en paramètre à une méthode. 52