PROGRAMMATION ORIENTÉE
OBJET JAVA
Imen Ben Said Ep Chaâbane
Multimedia, InfoRmation systems and Advanced Computing Laborator
Faculté des Sciences Economiques et de Gestion de Sfax-Tunisie
Email: imen.bensaid@fsegs,usf,tn
Introduction to programming
using java
ORACLE JAVA SE Programmer
I
1
Plan du cours
o Chapitre 1 : Introduction générale
o Chapitre 2 : Classes et Objets en JAVA
o Chapitre 3 : Paquetages
o Chapitre 4 : Héritage et Polymorphisme
o Chapitre 5 : Exceptions
2
INTRODUCTION GÉNÉRALE
3
Introduction
Cycle de vie d’un logiciel
✓ La compréhension du système d’information actuel
(activités, informations, organisation)
✓ La construction du logiciel, support du SI.
• Modèles statiques
• Modèles dynamiques.
Conception • création des structures de
stockage
Etude • Programmation
Développement
Préalable
• Définition des besoins
• Analyse des besoins
• Collecte des données Exploitation • Simulation et test
• etc. • Mise en œuvre
• Formation, visite, etc
4
Introduction
Programmation Procédurale vs Programmation Orientée Object
Données
Données
Données Traitements Traitements
Traitements
• Un programme est composé de Données
plusieurs procédures/fonctions
qui effectuent un traitement sur Traitements
des données et qui s’exécute
séquentiellement. • Un programme est composé d’un
• Les données et les traitements ensemble d’objets qui
sont séparés. contiennent
– Les données à traiter sont passées en – Des données « interne »
arguments aux procédures – Des traitements manipulant ces
données.
La maintenance et l'ajout de • Les données et leurs traitements
nouvelles fonctionnalités difficiles. sont regroupés dans une seule
entité: objet
Absence de Modularité: Travail 5
d'équipe difficile.
Concepts de base de la POO
6
Concepts de base de la POO
1. Objet:
✓ Le concept d’objet est utilisé pour modéliser
informatiquement des "objets" concrets de la vie courante
(voiture, personne, etc.) ou des objets conceptuels (abstraits)
(date, rdv, etc.).
• Objet = identité + état + comportement
✓ L'identité : adresse en mémoire
✓ L’état d’un objet : valeur de ses attributs
✓ Le comportement d’un objet : ses méthodes.
v1:Voiture :Fenetre
Couleur="rouge" titre="WinWord"
Carburant=20 État de l’objet largeur=400
Puissance=120 hauteur=300
demarrer() Deplacer()
accelerer() Comportement agrandir() 7
Concepts de base de la POO
2. Classe
• Une classe est la description d’une famille d’objets ayant une
même structure et un même comportement. Elle est
caractérisée par :
✓ Un nom
✓ Une composante statique : des champs (ou attributs) nommés ayant
un nom et un type. Ils caractérisent l’état des objets pendant
l’exécution du programme
✓ Une composante dynamique : des méthodes représentant le
comportement des objets de cette classe. Elles manipulent les
champs des objets et caractérisent les actions pouvant être
effectuées par les objets.
• La classe est un moule et l’objet est ce qui est moulé à partir de
cette classe
• Les objets sont appelés des instances du modèle défini au travers
de la classe
✓ Une classe permet d’instancier plusieurs objets 8
✓ Chaque objet est instance d’une seule classe
Concepts de base de la POO
2. Classe (Représentation graphique)
•Une classe est représenté par un rectangle à 3 compartiments:
✓ Un compartiment qui contient le nom de la classe
✓ Un compartiment qui contient la déclaration des attributs
✓ Un compartiment qui contient les méthodes
•Exemples:
Compte Nom de la classe
code : int
Attributs
solde : float
Compte(float soldeInitial)
Méthodes Ou
verser(float mt):void Opérations
retirer(float mt):void
getSolde():float
9
Concepts de base de la POO
2. Classe
10
Concepts de base de la POO
3. L'encapsulation
• L'encapsulation consiste à rassembler les données et les
traitements afférents au sein d'une structure unique (entité)
• Elle impose de manipuler les données via les méthodes
• Elle permet de faire abstraction du fonctionnement interne (c'est-
à-dire, la mise en œuvre) d'une classe et ainsi de ne se préoccuper
que des services rendus par celle-ci.
• Elle facilite l’évolution et la réutilisation
11
Concepts de base de la POO
4. L’héritage
• L’héritage permet de définir une nouvelle classe à partir d’une
classe existante.
• La nouvelle classe comporte les mêmes propriétés de la classe de
base, auxquelles s’ajoutent des propriétés (méthodes et/ou
attributs) spécifiques à cette nouvelle classe.
• L’héritage facilite largement la réutilisation et l’extension des
applications.
Classe mère
Hérite
Classe fille
12
Concepts de base de la POO
5. Le polymorphisme
• Il permet de modifier le comportement d’une classe fille par
rapport à sa classe mère. Le polymorphisme permet d’utiliser
l’héritage comme un mécanisme d’extension en adaptant le
comportement des objets.
13
Concepts de base de la POO
5. Abstraction
• Il permet de modifier le comportement d’une classe fille par
rapport à sa classe mère. Le polymorphisme permet d’utiliser
l’héritage comme un mécanisme d’extension en adaptant le
comportement des objets.
14
Le langage JAVA
• Java est un langage de programmation orienté objet (Classe,
Objet, Héritage, Encapsulation et Polymorphisme)
• Open source: On peut récupérer le code source de java. Ce qui
permet aux développeurs, en cas de besoin, de développer ou
modifier des fonctionnalités de java.
• Avec java on peut créer des application multiplateformes. Les
applications java sont portables. C’est-à-dire, on peut créer une
application java dans une plateforme donnée et on peut
l’exécuter sur n’importe quelle autre plateforme.
• Le principe de java est : Write Once Run Every Where
(1) (2) JVM Sun
Code Source Compilation Byte-codeInterprétation JVM Mac
JVM PC
15
Le langage JAVA
• Java est utilisé pour créer :
✓ Des applications Desktop
✓ Des applets java (applications java destinées à s’exécuter dans une page web)
✓ Des applications pour les smart phones
✓ Des applications embarquées dans des cartes à puces
✓ Des application JEE (Java Entreprise Edition)
16
Le langage JAVA
• Pour créer une application java, il faut
installer un JDK kit de développement JDK (outils de
java développement javac, Javah,
appletviewer, etc.,)
• Le JDK contient l’ensemble d’outils et
d’API qui permettent le JRE (Runtime
développement de programmes avec libraries)
Java. Il contient lui-même le JRE.
• Le JRE (Java Runtime Environment) JVM (java
interpreter)
contient l’environnement d’exécution
des programmes. Le JRE seul doit être
installé sur les machines où des
applications Java doivent être
exécutées. Il contient la JVM
• La JVM la machine virtuelle Java ou
JVM (Java Virtual Machine) permet
l'interprétation du bytecode et
17
l’interaction avec le SI
Le langage JAVA
• Compilation et exécution d’un programme java
✓ Le point d'entrée pour l'exécution d'une application Java est la
méthode main() de la classe spécifiée à la machine virtuelle
public static void main(String [ ] args)
Le langage JAVA
.java javac .class java
Le langage JAVA
• Configuration de l ’environnement
✓ La configuration de l'environnement comporte deux aspects :
• Définir la variable d’environnement path qui indique le
chemin d'accès aux programmes exécutables : Cette
variable path devrait contenir le chemin du JDK utilisé:
path= C:\Program Files\Java\jdk1.8.0_13\bin
• Quand elle exécute une application java, la JVM consulte la
variable d’environnement classpath qui contient le chemin d’accès
aux classes java utilisées par cette application.
classpath= .; c:\monProjet\lib; c:\programmation
Le langage JAVA
• Configuration de l ’environnement sous windows
CHAPITRE2 OBJET ET
CLASSE EN JAVA
22
La syntaxe d’une classe
[public] class NomClasse
{
…
[private/public] typeAttributN nomAttributN [= valeurN];
[private/public] typeRetour nomMéthode1 ([type param11,…,
type param1M] ){…}
…
[private/public] typeRetour nomMéthodeN ([type paramN1,…,
type paramNM] ){…}
}
23
Les modificateurs d’accès (public/private)
◼ Pour une classe, le modificateur d’accès public donne la
possibilité d'utiliser cette classe à toutes les autres classes
de l’application.
• Les modificateurs d'accès à l'attribut ou à la méthode
private et public:
✓ private indique que l'accès est réservé aux méthodes de
la même classe
✓ public donne la possibilité d'accès à toutes les
méthodes des autres classes
• Une fois créée, la classe devient un vrai type java. Ce type
peut être utilisé :
✓ pour la déclaration de variables locales
✓ pour déclaration d'attributs d'un objet
✓ comme type de paramètre de méthode
✓ comme type de retour d'une méthode 24
Les attributs d’une classe
• Déclaration
✓ [private/public] typeAttribut nomAttribut [= valeur];
• Le type d’un attribut peut être un
✓ type primitif,
✓ un tableau ou
✓ le nom d’une classe.
Les primitives en java
• Les types primitifs en java sont:
Primitive Étendue Taille
char 0 à 65 535 16 bits
byte -128 à +127 8 bits
short -32 768 à +32 767 16
bits
int -2 147 483 648 à + 2 147 483 647 32
bits
long 64
bits
float de ± 1.4E-45 à ± 3.40282347E38 32 bits
double 64
bits
boolean true ou false 1 bit
void - 0 bit
Les primitives en java
• Les types primitifs Integers en java sont:
• Les types primitifs Floating-point en java sont:
Les attributs de type primitif
• Exemple de déclaration des attributs de type primitif
✓ int i;
les nom des variables commencent toujours
✓ char c; par un caractère en minuscule et pour
✓ boolean fini; indiquer un séparateur de mots on utilise les
✓ int nbPersonnes; majuscules
• Un attribut de type primitif peut être initialisé au même
temps que la déclaration.
✓ int i = 12;
✓ char c = 'a’;
✓ boolean fini = true;
✓ float montant= 1200,500f;
✓ float taux= 12,50F;
✓ double moyenne =14,77;
• Valeurs par défaut des attributs de type primitif
✓ Toutes les primitives de type numérique utilisées comme membres
d'un objet sont initialisées à la valeur 0. Le type boolean est
initialisé à la valeur false.
Les méthodes d’une classe
• Déclaration
✓ [private/public] typeRetour nomMéthode ([type param11,…,
type param1M] ){…}
• Exemple
Local variable
Attention les variables locales
doivent être initialisées
Exercice 1
• Ecrire une classe nommée Rectangle comportant deux attributs longueur
et largeur de type int ,
• Ajouter à la classe Rectangle les deux méthodes suivantes:
• La méthode initialise qui initialise les deux attributs de la classe avec
des valeurs données en paramètres de la méthode
• La méthode calculSurface qui calcule et renvoie la surface du
rectangle
class Rectangle {
private int longueur ;
private int largeur ;
class Test {
public int calculSurface ( ) { public static void main (String [] args) {
return (longueur*largeur) ; Rectangle rec=new Rectangle();
} rec.initialize(3,4);
public void initialise (int x, int y) { int s = rec.surface();
longueur =x ; largeur = y ;} System.out.print(s);
}
}// fin classe Rectangle
}//fin classe Test
La méthode main
• Une application exécutable en java doit avoir une classe qui
comporte la méthode main qui représente le point d’entrée à
l’application
• La méthode main doit respecter la signature suivante:
31
La méthode main
• Remaque: Une classe peut avoir plusieurs méthodes nommées
main mais il faut avoir une seul méthode qui correspond à la
signature de la méthode main
32
La notion de Constructeur
• Le constructeur d'une classe est une méthode appelée une
seule fois par objet et ce au moment de sa création. Le
constructeur porte le même nom que la classe
• Le constructeur est toujours publique et ne possède pas de
type de retour (même pas void).
33
La notion de Constructeur
• Le rôle du constructeur est d'initialiser les attributs de
l'objet
34
La notion de Constructeur
• Le programmeur peut définir plusieurs constructeurs pour
initialiser certains attributs
Que ce passe si le développeur
ne définit pas un constructeur?
35
La notion de Constructeur
• En l’absence d’un constructeur défini par le
programmeur, JAVA offre un constructeur non
paramétré qui initialise les attributs de l'objet crée par
les nulls correspondant à leurs types (0 pour int, null
pour les références aux objets, …)
36
L’attribut final
• Un attribut peut être déclaré avec le mot clé final, afin
d’imposer qu’il ne soit initialisé qu’une seule fois.
• Un attribut déclaré final doit être initialisé au plus tard
dans le constructeur.
• Toute tentative de modification d’un attribut final
conduira à une erreur de compilation.
Erreur de compilation 37
La déclaration et la création d'objets
• La déclaration des objets de type classe est :
nomClasse nomObjet;
• Pour créer un objet, on utilise l'opérateur new suivi de
l’appel à un constructeur de la classe de l’objet :
new nomClasse(expr1, expr2, ... )
38
La déclaration et la création d'objets
• La déclaration ne crée pas un objet, mais uniquement
une référence nulle du type mentionné.
39
La déclaration et la création d'objets
• l'opérateur new se charge de :
✓ Allouer l'espace mémoire nécessaire pour stocker les attributs de
l'objet en cours de construction
✓ Appeler le constructeur de l'objet adéquat pour initialiser les
attributs. Le choix du constructeur se fait en fonction des
paramètres passés
✓ Retourner une référence sur l'objet créé
40
La déclaration et la création d'objets
• Il est possible d'avoir à un instant t plusieurs références
pour désigner un même objet.
41
La déclaration et la création d'objets
• Les opérateurs possibles sur les références d'objets sont :
✓ = pour l’affectation
✓ == et != pour la comparaison de références
✓ instanceof pour la vérification du type d’un objet
• Un objet qui n'est référencé par aucune référence est
détruit par le ramasse miettes (Garbage Collector) qui
s'exécute en permanence.
42
La manipulation d’objets
• Accès aux attributs: les attributs d’objet sont désignés
selon la syntaxe suivante: nomObjet.nomAttribut
✓ person.age
• Invocation de méthodes: les méthodes sont invoquées
selon la syntaxe suivante: nomObjet.nomMethode()
✓ person.calculAge(DateNaissance)
• Remarque: Au sein de la classe propriétaire, on peut
désigner un attribut ou une méthode uniquement par son
nom.
• On ne peut accéder à un attribut de l’extérieur de la classe
là où il a été défini que si on est autorisé à le faire
• On ne peut invoquer une méthode de l’extérieur de la classe
là où elle a été définie que si on est autorisé à le faire 43
Exercice 1 (suite)
• Ecrire une classe nommée Test qui comporte la méthode main permettant
de
• Créer un rectangle
• Intialiser sa longueur à 3 et sa largeur à 4
• Claculer et afficher sa surface
• Ajouter à la classe Rectangle un constructeur avec paramètre
class Rectangle {
private int longueur ;
private int largeur ;
class Test {
public int calculSurface ( ) { public static void main (String [] args) {
return (longueur*largeur) ; Rectangle rec=new Rectangle();
} rec.initialise(3,4);
public void initialise (int x, int y) { int s = rec.calculsurface();
longueur =x ; largeur = y ;} System.out.print(s);
}
}// fin classe Rectangle
}//fin classe Test
Exercice 2
• Ecrire une classe java nommée Carré qui comporte un
attribut coté de type int.
1. Ajouter à la classe Carré la méthode calculSurface() qui permet de
calculer la surface du carré
2. Ajouter à la classe Carré la méthode calculPérimètre() qui permet
de calculer la périmètre du carré
3. Ajouter à la classe un constructeur qui initialise l’attribut coté
4. Ajouter la méthode main à la classe Carré
a. Créer un objet carré c avec coté=4
b. Créer un objet carré d avec coté=5
c. Afficher la surface du carré c
d. Afficher le périmètre du carré d
Les accesseurs/ mutateurs (Getters et
Setters)
• Ce sont les méthodes d’accès aux attributs d’une classes.
On distingue :
✓ Les accesseurs en lecture (getters) de la forme getNomAttribut( ).
Ils fournissent des informations relatives à l'état d'un objet, c. à d.
des valeurs de certains attributs sans les modifier
✓ les accesseurs en écriture (setters) de la forme setNomAttribut( ).
Ils modifient l'état d'un objet, c. à d. les valeurs de certains
attributs
46
Les Getters et Setters
• Les attributs privés d’une classe ne sont accessibles qu’à
l’intérieur de la classe.
• Pour donner la possibilité à d’autres classes d’accéder
aux membres privés, il faut définir dans la classes des
méthodes publiques qui permettent de :
✓ lire la variables privés. Ce genre de méthodes s’appellent les
accesseurs ou Getters
✓ modifier les variables privés. Ce genre de méthodes s’appellent les
mutateurs ou Setters
47
Les Getters et Setters
• Les getters sont des méthodes qui commencent toujours par le mot
get et finissent par le nom de l’attribut en écrivant en majuscule la
lettre qui vient juste après le get. Les getters retourne toujours le
même type que l’attribut correspondant.
❑ Par exemple pour un attribut
private String nom;
❑ Le getter de cette variable est :
Public String getNom( )
{ return nom;}
• Les setters sont des méthodes qui commencent toujours par le mot
set et finissent par le nom de l’attribut en écrivant en majuscule la
lettre qui vient juste après le set. Les setters sont toujours de type
void et reçoivent un paramètre qui est de même type que la variable:
Public void setNom(String nouveauNom)
{nom=nouveauNom;} 48
Les Getters et Setters
• Les setters sont des méthodes qui commencent toujours par le mot
set et finissent par le nom de l’attribut en écrivant en majuscule la
lettre qui vient juste après le set. Les setters sont toujours de type
void et reçoivent un paramètre qui est de même type que la variable:
Public void setNom(String nouveauNom)
{nom=nouveauNom;}
49
Exemple 2:
• Ecrire une classe nommée Etudiant qui comporte les
attributs suivants : matricule (int), nom (String) ,
prenom (String) et filière (String) et niveau (int)
• Ajouter les getters et les setters de tous ces attributs
50
Exercice 3
• Ecrire une classe java nommée Voiture qui comporte les
attribut suivants
– private String immatriculation;
– private String modele;
– private int kilometrage;
1. Ajouter à la classe Voiture deux constructeurs (avec deux et trois
paramètres)
2. Ajouter à la classe Voiture la méthode toString() pour afficher les
caractéristiques d’une voiture
3. Ajouter les getters et setters de tous les attributs
• Ecrire une classe java nommée TestVoiture. Dans la méthode
main de cette classe ajouter les instructions nécessaires pour
1. Créer une nouvelle voiture dont le kilométrage est zéro
2. Modifier le kilométrage
3. Afficher la voiture créée
Les attributs de classe (ou attributs statiques)
• Un attribut statique (ou attribut de classe) est un attribut
déclaré avec le mot réservé static. L’existence de cet
attribut ne dépend pas des instances de la classe. S’il y a eu
une instanciation, une seule copie de cet attribut est
partagée par toutes les instances.
52
Les attributs de classe (ou attributs statiques)
• Déclaration
• Utilisation
✓ Les attributs statiques sont désignés selon la syntaxe suivante:
nomClasse.nomAttribut
53
Les attributs statiques
• Exemple
• Résultat? 54
Les attributs statiques
• La déclaration d’une constante en java se fait
par les mots clés static final
✓ static pour dire que tous les objets (instances)
partage la même valeur de la constante
✓ final pour dire que la modification est interdite
• Exemple
55
Les méthodes statiques
• Une méthode statique (ou méthode de classe) est une
méthode déclarée avec le mot réservé static. L’exécution
d’une telle méthode ne dépend pas des objets de la classe.
• Exemples
56
Les méthodes statiques
• Les méthodes statiques sont désignées selon la syntaxe
suivante : nomClasse.nomMéthode().
• Exemple
✓ Calcul.AvrageOfFirst100Integer();
57
Les méthodes statiques
• Remarque1 : Un attribut d’objet (non static) ne peut pas
être manipulé directement par une méthode de classe
(static).
58
Les méthodes statiques
• Remarque2 : Une méthode statique doit accéder
uniquement à des attributs et/ou des méthodes statiques
class TestStatic{
static int a=0;
static int m() {
Erreur de compilation return a;
}
}
• Remarque3 : Une méthode non statique peut accéder à des
attributs et/ou des méthodes statiques ou non statique
class TestStatic{
static int a=0;
int m() {
Pas d’erreur de compilation return a;
}
59
La référence sur l'objet courant « this »
Le mot-clé this représente une référence sur l'objet courant,
c.à.d., celui qui possède la méthode qui est en train de
s'exécuter
• La référence this peut être utile :
✓ Lorsqu'une variable locale (ou un paramètre) "cache",
en portant le même nom, un attribut de la classe.
✓ Lorsqu’on ne connaît pas encore une référence pour
60
l’objet en cours.
La méthode toString()
• Généralement, on décrit dans chaque classe une méthode
ayant le prototype suivant :
public String toString()
• L’objectif de cette méthode est de retourner une
description (totale ou partielle) sous forme d’une chaîne
de caractères d’un objet
• L’utilité de toString() s’accroît lorsque les attributs ne sont
pas publics
• En réalité, la description d’une méthode toString()
correspond à une redéfinition d’une autre version de cette
méthode qui se trouve par défaut dans chaque classe
61
SYNTAXE JAVA
62
Qu’est ce qu’on trouve dans le corps d’une méthode?
• Une méthode comporte des instructions permettant de
décrire le comportement des objets de cette classe.
✓ Affectations
✓ Structure de contrôle conditionnelle (if else)
✓ Structure de contrôle itérative (for , do while, while)
✓ Etc.,
Opérateurs
• Opérateur d ’affectation:
✓ x=3; // x reçoit 3
✓ x=y=z=w+5; // z reçoit w+5, y reçoit z et x reçoit y
• Exemple1:
• Exemple2
Affectation non correcte Affectation correcte
Erreur de compilation
64
Opérateurs
• Les opérateurs arithmétiques à deux opérandes:
✓ + : addition
✓ - : soustraction
✓ * : multiplication
✓ / : division
✓ % : modulo (reste de la division euclidienne)
• Les opérateurs arithmétiques à deux opérandes (Les raccourcis)
✓ x = x + 4; ou x+=4; z = z * y; ou Z*=y;
✓ v = v % w; ou v%=w;
Opérateurs
• Les opérateurs arithmétiques à deux opérandes
(Exemples)
Quelles sont les instructions correctes?
b=?
Opérateurs
• Les opérateurs relationnels:
✓ == : équivalent
✓ < : plus petit que
✓ > : plus grand que
✓ <= : plus petit ou égal
✓ >= : plus grand ou égal
✓ != : non équivalent • Exemple2
• Exemple1
• Exemple3
67
Opérateurs
• Les opérateurs d’incrémentations et de décrémentation:
✓ ++ : Pour incrémenter (i++ ou ++i)
✓ Pour décrémenter (i–- ou --i)
• Exercice (opérateur d’incrémentation)
• Solution:
Opérateurs
• Exercice (opérateur d’incrémentation)
• Solution:
Opérateurs
• Les opérateurs logiques
✓ && Et (deux opérandes)
✓ || Ou (deux opérandes )
✓ ! Non (un seul opérande)
• Exemple
70
Opérateurs
• Priorité des opérateurs
Structures de contrôle conditionnelle
• L'instruction conditionnelle if
• La syntaxe de l'instruction if peut être décrite de la façon suivante:
72
Structures de contrôle conditionnelle
• Utilisation des {} dans une instruction if
correct correct
erreur
73
Structures de contrôle conditionnelle
• L'instruction switch (syntaxe) Types de Variable
switch(variable) {
case valeur1: instr1;break;
case valeur2: instr2;break;
case valeurN: instrN; break;
default: instr; break;
}
• Exemple
Structures de contrôle itérative
• La boucle for
✓ La boucle for est une structure employée pour exécuter un bloc
d'instructions un nombre de fois connu à l'avance.
✓ Syntaxe :
for (initialisation;test;incrémentation) {
instructions;
}
✓ Exemple
:for (int i=2; i < 10; i++) {
System.out.println("I="+i);
}
Structures de contrôle itérative
• L ’instruction While
while (condition){ Exemple :
BlocInstructions;
int s=0;int i=0;
} while (i<10){
s+=i; i++;
}
System.out.println("Somme="+s);
• L ’instruction do .. while
Exemple :
do{ int s=0;int i=0;
BlocInstructions; do{
s+=i; i++;
}
}while (i<10);
while (condition); System.out.println("Somme="+s);
76