ISIMA POO Java Part2 PDF
ISIMA POO Java Part2 PDF
ISIMA POO Java Part2 PDF
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 89 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 90
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 91 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 92
Programmation procédurale (rappel de C) Un programme en C
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 93 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 94
Les concepts de l’OO: Pourquoi l’OO? Les concepts de l’OO: Qu’est-ce que l’OO?
Durant des décennies, on a programmé en informatique en se
La programmation Orientée Objet consistera à définir les
concentrant sur ce qui « devait se passer » dans le programme.
différents acteurs (objets), leurs caractéristiques et
On a ainsi structuré les programmes en ensembles de comportements et à les faire interagir.
« traitements », définis sous forme des fonctions ou procédures, La programmation OO permet de découper les problèmes
que l’on pouvait appeler à tout moment et qui pouvaient informatiques non en termes de fonctions (que se passe-t-il?)
manipuler toutes les données du programme. mais en termes de données (qui intervient dans le problème?) et
Mais les problèmes que doivent résoudre les programmes des services que celles-ci peuvent rendre au reste du programme
informatiques sont devenus de plus en plus complexes et ce (les comportements).
découpage en fonctions ou traitements est devenu sous-optimal. Programmer en OO, c’est donc définir des objets et les faire
interagir.
De fait, il présente 3 inconvénients majeurs:
Il rend difficile la réutilisation d’un bout de programme hors de son contexte
Il force l’information (les données), à se plier aux traitements (fonctions /
procedures) alors qu’elles devraient être le point de départ
Il est inadapté à la façon dont l’homme décrit les problèmes
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 95 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 96
Les concepts de l’OO: Qu’est-ce qu’un objet? Les concepts de l’OO: Qu’est-ce qu’un objet?
La programmation Orienté Objet consiste à définir des Que contient cette boîte?
objets et à les faire interagir Des données L’information traitée par les instructions et qui
caractérise l’objet Etats ou Attributs
Qu’est-ce qu’un objet?
Du code Traitements composés d’instructions
Une boîte noire qui reçoit et envoie des messages
Comportements ou Méthodes
Données et traitements sont donc indissociables
How are Les traitements sont conçus pour une boîte en particulier et ne
you? peuvent pas s’appliquer à d’autres boîtes
I’m fine!
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 97 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 98
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 99 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 100
Classes et Objets? Classes et Objets?: Définition Classe
Une classe:
On appelle classe la structure d'un objet, c'est-à-dire la
Est une unité d’abstraction dans un programme orienté-objet
déclaration de l'ensemble des entités qui composeront un objet.
Représente des objets similaires
Les objets sont des représentations dynamiques (instanciation), ses instances
du modèle défini pour eux au travers de la classe.
Est un module logiciel
Une classe permet d’instancier (créer) plusieurs objets Décrivant la structure de ses instances (propriétés)
Contenant des méthodes définissant leur comportement
Chaque objet est instance d’une (seule) classe
Une classe est composée de deux parties :
Les attributs (parfois appelés données membres) : il s'agit des
données représentant l'état de l'objet
Les méthodes (parfois appelées fonctions membres): il s'agit
des opérations applicables aux objets
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 101 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 102
Date
Prenons ces informations :
14 Juillet 1789 (date de découverte) • Jour
Une classe
11 Novembre 1990 (date de naissance) • Mois
07 Mars 2015 (date d’embauche)
• Année
Ce sont des dates.
Ses Objets
Chaque date se caractérise par :
un jour
un mois
une année. dateEmbauche dateNaiss dateDecouv
Le Jour, le Mois et l’Année sont les attributs d’une Date. • 11 • 14
•7
Cet ensemble d’attributs est appelé une Classe.
• Mars • Novembre • Juillet
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 105 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 106
Le 07 mars 2015, le 14 Juillet 1789 et le 11 Novembre 1990 Saturne : planète gazeuse. Son diamètre est de 120.536 km. Elle
sont chacune des instances de la classe Date. est à une distance moyenne de 1.426.725.400 km du Soleil.
Mars : planète rocheuse. Son diamètre est de 6794 km. Elle est à
Chacune de ces dates est appelée un Objet. une distance moyenne de 227.936.640 km du Soleil.
Jupiter : planète gazeuse. Son diamètre est de 142.984 km. Elle
est à une distance moyenne de 779 millions de km du Soleil.
Terre : planète rocheuse. Son diamètre est de 12.756,28 km. Elle
est à une distance moyenne de 150.000.000 km du Soleil.20
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 107 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 108
Exemple 2 : Les planètes (2/3) Exemple 2 : Les planètes (3/3)
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 109 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 110
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 111 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 112
Exemple 3 : Etudiant – 2ème possibilité (3/3) Exemple 4 : Gestion d’une bibliothèque (1/2)
Etudiant1
• sami Etudiant3
• 19 • asma
• Droit • 18
Etudiant •1 • INFO
• Prénom •2 •2
• Age • Garçon •1
• Departement • Fille
• Groupe
• SousGroupe
• Sexe Etudiant2
Approche procédurale :
• ali "Que doit faire mon programme ? "
• 21 Ses Objets
Une classe • GE
•3 Approche orientée-objet :
•2 "De quoi doit être composé mon programme ?"
• Garçon
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 113 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 114
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 115 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 116
Java: Déclaration d’une Classe: Exemple La classe : Déclaration des attributs
Déclaration de la classe public class Voiture { Class Body Les variables membres sont des variables déclarées à l’intérieur du
private String marque; corps de la classe mais à l’extérieur d’une méthode particulière,
Variables d’instance private int vitesse; c’est ce qui les rend accessibles depuis n’importe où dans la classe.
private double reserveEssence;
public Voiture (String m; int v; double e){ <modificateur> <static> <final> <volatile> <type> <nom>;
Définition du constructeur marque=m ;
vitesse=v; La signature de la variable :
reserveEssence=e;
Les modificateurs d’accès: indiquent le niveau d’accessibilité de la
}
variable : private / protected / public / aucun
public String getMarque(){return marque;}
optionnels
Méthodes d’accès [static]: permet la déclaration d’une variable de classe
public void setMarque (String m){marque=m;}
… [final]: empêche la modification de la variable ( Crée une constante)
public void accelere (int acceleration) {
[volatile]: pour le multithreading
vitesse += acceleration;
Le type de la variable (ex: int, String, double, …)
Définition des méthodes }
public void ravitaille (double quantite){ Le nom de la variable (identificateur)
reserveEssence+=quantite; Exemples:
} private int maVitesse; // Je possède un entier « maVitesse »
} private final String maPlaque; // « maPlaque » est constante
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 117 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 118
Chaque classe, constructeur, méthode et attribut peut être Le modificateur « static » peut s'appliquer à une méthode ou
paramétré par un modificateur qui peut être : un attribut d’une classe. Dans ce cas, l'élément statique est
public : accès non contrôlé partagé par toutes les instances de la classe. On dit que
private : accès limité à la classes ou l'interface courante l’élément est porté par la classe.
protected : accès limité au membre du package et à ses descendantes Il est aussi possible d’y accéder sans disposer d’une instance,
friend : accès limité au membre du package. Il n'existe pas de mot clé mais directement par la classe.
pour ce type de modificateur, de ce fait si aucun mot clé parmi public, Une méthode ou un attribut statique ne doit employer pour ses
private ou protected n'est utilisé alors l'élément est considéré comme traitements que des méthodes ou attributs statiques.
friend. Exemple :
public class Exemple
Une interface et une classe peuvent uniquement être publiques ou
friends. {
public final float pi = 3.14;
}
Etudiant [instance] Etudiant [instance]
nom nom
Ahmed Marwa
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 121 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 122
Variable de classe: Une classe, un attribut, une méthode et une interface peuvent
être spécifiés comme « final ».
n'appartient pas à une instance particulière, elle appartient à la classe.
On emploi le mot clé « final » pour signaler qu'un élément est
est partagée par toutes les instances de la classe
final.
Etudiant [class]
Dans ce cas on ne pourra pas soit surcharger ( dans le cas
Class Etudiant{ d'une classe, d'une méthode ou d'une interface ), soit
String nom; nbrEtudiants modifier ( dans le cas d'un attribut ).
static int nbrEtudiants; 0
3
2
1 Exemple :
}
public class Exemple
Etudiant [instance]
nom Etudiant [instance] {
Ahmed
nom
Fatma
public final float pi = 3.14;
}
Etudiant [instance]
nom
Marwa
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 123 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 124
Le modificateur « abstract » L ’Attribut caché « this »
Une classe, une interface ou une méthode peuvent être spécifiés Chaque instance de classe comporte un attribut appelé « this »
comme étant abstraite en utilisant le mot clé « abstract ». qui désigne l'instance courante de la classe.
On ne pourra pas créer d'instance d'une classe abstraite, ou d'une Cette attribut peut être utile pour retourner une référence vers
classe possédant une méthode abstraite. l'instance ou pour lever certaines ambiguïtés sur les
identifiants.
De plus une classe qui possède une méthode abstraite doit
Exemples :
obligatoirement marquée abstraite.
public float longueur;
Implicitement, toutes les interfaces sont abstraites, l'utilisation du
public void fixeLongueur( float longueur )
mot clé « abstract » est obsolète.
{
Le modificateur « abstract » intervient en complément des autres
this.longueur = longueur;
modificateurs comme « public » ou « private ».
}
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 125 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 126
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 127 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 128
Exemple Exercice 1
Exemple 1:
class Circle {
public double x, y; // coordonnées du centre
Deux constructeur explicite
private double r; // rayon du cercle
public Circle(double r) {
this.r = r;
}
public Circle(double a, double b, double c) {
x = a; y = b; r = c;
}
}
Exemple2: Le constructeur Personne()
public class Personne { est déclaré par défaut
public String nom; Constructeur implicite
public int anneeNaissance;
public int age() {
return (2019 – anneeNaissance);
}
}
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 129 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 130
Exercice 2 Exercice 3
Réaliser une classe Point permettant de représenter un point sur Ecrire une classe Employe permettant de sauvegarder les
un axe. Chaque point sera caractérisé par un nom (de type char) informations d’un employer d’une société. Les informations a
et une abscisse (de type double). On prévoire: retenir sont : nom, prénom, salaire. Ajouter un champs qui
un constructeur sans paramètre et qui permet d’initialiser un retourne le nombre totale des employés crées. Cette classe
point à l’origine de l’axe. présente :
un constructeur recevant en arguments le nom et l’abscisse un constructeur recevant en arguments le nom et le
d’un point. prénom d’un employé.
un constructeur recevant en arguments le nom, le prénom
Réaliser une classe Point2D permettant de représenter un point et le salaire d’un employé.
dans un repère. Chaque point sera caractérisé par un nom (de
type char), une abscisse x (de type double) et une ordonnée y
(de type double). Ajouter trois constructeurs à cette classe.
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 131 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 132
Interaction entre objets : Création d’objets Interaction entre objets : Création d’objets
On note toutefois qu’il ne « se passe » toujours rien dans notre L’appel au constructeur
programme à ce stade Se fait pour initialiser un objet
En effet, nous avons conçu une classe, dont on a défini les Provoque la création réelle de l’objet en mémoire
caractéristiques, les constructeurs et les comportements Par l’initialisation de ses variables internes propres
possibles, mais on n’a pas créé aucun objet. Se fait par l’emploi du mot clé « new »
On a en faite défini ce que sera une voiture si on va l’utiliser dans
notre programme MaClasse monInstance = new MaClasse();
Pour traiter une voiture dans un notre programme, il faudrait Ou bien
donc qu’on matérialise notre classes, autrement dit qu’on va MaClasse monInstance;
l’instancier, ce qui signifie qu’on « crée des objets » monInstance = new MaClasse();
Pour ce faire, il faut appeler le constructeur de la classe dont on
souhaite créer une instance Exemple
Voiture v1, v2;
v1 = new Voiture("Peugeot", 120, 35.3);
v2 = new Voiture("Ferrari");
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 133 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 134
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 135 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 136
Manipulation des références (1/3) Manipulation des références (2/3)
Reprenons la classe Circle: // Dans une méthode, par exemple, main:
Circle c1, c2;
class Circle { c1 = new Circle(2.0, 3.0, 4.0);
public double x, y; // coordonnées du centre
c2 = c1; // c2 et c1 pointent vers le même objet
private double r; // rayon du cercle
c2.r = c2.r – 1; // l’objet a le rayon réduit
public Circle(double r) { c1 = new Circle(2.0); /* c1 point vers un autre objet, mais c2
this.r = r; ne change pas */
} c1.x = 2.0; // on modifie le deuxième objet
c2 = c1; /* maintenant, c2 pointe vers le 2ième
public Circle(double a, double b, double c) { objet aussi */
x = a; y = b; r = c;
Que faire du premier objet?
}
} Aucune référence ne pointe vers lui
L’objet est perdu et inutilisable
Ramasse miette (garbage collector) va récupérer l’espace occupé
par l’objet
Comparaison des références
(c1 == c2): est-ce que c1 et c2 pointent vers le même objet?
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 137 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 138
Manipulation des références: illustration (3/3) La classe : Déclaration des méthodes (1/2)
c1
null
1. Cercle c1, c2; 1 c2 Une méthode est composée de:
x: 2.0
c1 y: 3.0 public void deposit (int amount) { Sa déclaration
2. c1 = new Cercle(2.0, 3.0, 4.0); 2 r: 4.0
solde+=amount ; Son corps
c2
x: 2.0
null
c1
}
y: 3.0
3. c2 = c1; 3 r: 4.0 Syntaxe :
c2 x: 2.0
null c1 y: 3.0
exemple : public, type de la valeur couples d'un type et d'un
r: 3.0 static renvoyée ou void identificateur séparés par des ","
4
4. c2.r = c2.r – 1; c2
null x: 2.0
y: 3.0 <modificateur> <type-retour> <nom> (<liste-param>)
c1 r: 3.0
5. c1 = new Cercle(2.0); 5 {<bloc>}
x: 0.0
x: 2.0
c2
y: 0.0
c1 y: 3.0 r: 2.0 Exemple : public double add ( double number1, double number2 )
r: 3.0
6. c1.x = 2.0; 6 c2 x: 2.0 { return (number1 +number2);
x: 2.0 c1 y: 3.0
y: 0.0
7 } Cette méthode
r: 2.0 7. c2 = c1; c2
r: 3.0
retourne ici une valeur
x: 2.0
y: 0.0
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM r: 2.0 139 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 140
La classe : Déclaration des méthodes (2/2) Les méthodes static (1/2)
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 141 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 142
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 143 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 144
Exercice 4 Exercice 5
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 145 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 146
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 147 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 148
Exercice Chemise : Classe et objet Java Exercice Chemise : Classe chemise
public class Chemise{
Classe « Chemise » int id;
char couleur;
float prix;
String description;
int quantite;
public Chemise () {}
Objet 1 Objet 2
void ajouterChemise (int nombre) {
Id: 101 Id: 201
quantite += nombre;
Prix: 20$ Prix: 30$
}
Taille 40 Taille 35
Couleur: Bleu Couleur: Rouge void dimunierChemise (int nombre) {
Quantite: 200 Quantite: 180 quantite - = nombre;
}
void afficherInfoChemise() {
System.out.println(id + couleur +
prix + description + quantite); }
}
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 149 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 150
Exercice Chemise : Notion de référence 1/5 Exercice Chemise : Notion de référence 2/5
Mémoire Mémoire
maChemise maChemise
public class Test{ public class Test{
public static void main(String[] args){ public static void main(String[] args){
0x034009 id 0
Chemise maChemise; Chemise maChemise; couleur '\u0000’
prix 0.0f
maChemise=new Chemise(); maChemise=new Chemise(); description null
quantite 0
maChemise.couleur=‘R’; maChemise.couleur=‘R’;
} }
} }
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 151 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 152
Exercice Chemise : Notion de référence 3/5 Exercice Chemise : Notion de référence 4/5
Mémoire Mémoire
public static void main(String[] args){ public static void main(String[] args){
0x034009 id 0 0x034009 id 0
Chemise maChemise; couleur '\u0000’ Chemise maChemise; couleur R
'\u0000’
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 153 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 154
Exercice Chemise : Notion de référence 5/5 Exercice Chemise : Les constructeurs 1/4
Mémoire
maChemise 0x034009
prix 0.0f
description Dans le cas ou il n y a pas un constructeur explicite.
null
quantite le compilateur va automatiquement créer un constructeur par
0
défaut implicite
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 155 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 156
Exercice Chemise : Les constructeurs 2/4 Exercice Chemise : Les constructeurs 3/4
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 157 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 158
Quel constructeur va choisir Java lorsque vous allez créer votre objet ?
class Chemise{
int id;
char couleur;
float prix;
String description;
int quantite; Utilisation:
Chemise () {} Chemise ch1=new Chemise();
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 161 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 162
Exercice 9
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 163