Vous êtes sur la page 1sur 19

Plan du cours 4.

Programmation orientée objets en Java

• 1. Introduction générale et historique

• 2. Première application en Java


Classe et objet
• 3. Syntaxe et sémantique de Java
Encapsulation
• 4. Programmation orientée objets en Java
Héritage
• 5. Structure des API de Java
Polymorphisme
• 6. Les collections d’Objets Interface
• 7.La gestion des Exceptions

• 8. Interfaces graphiques (Swing et AWT)

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

Paradigmes de programmation Paradigmes de programmation

 programmation procédurale : P.P.


 Le logiciel est organisé autour de la notion de procédures
 Fonctionne bien lorsque les données sont simples
 Exemple : Pascal, C, etc.

 programmation orientée objet : P.O.O.


 Grouper ensemble les données décrivant une même entité
 Aide à réduire la complexité du système
 Exemple : C++, Java, Delphi, etc.

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

 le programme est composé des fonctions


 les données (variables) sont créées à l’intérieure des
fonction ou bien passées comme paramètres
 il y a un programme principal (main)

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

Les concepts de l’OO: Qu’est-ce qu’un objet? Classes et Objets?

 Quelques exemples?  Comment les objets sont-ils définis?


 Par leur classe, qui détermine toutes leurs caractéristiques
Objet Attributs Méthodes
 Nature des attributs et comportements possibles
Plaque, marque, couleur, Tourner, accélérer, s’arrêter, faire
Voiture
vitesse le plein, klaxonner  La classe détermine tout ce que peut contenir un objet et tout
N°, marque, sonnerie, Appeler, Prendre un appel,
ce qu’on peut faire de cet objet
Téléphone  Classe = Moule, Définition, ou Structure d’un objet
répertoire, opérateur Envoyer SMS, Charger
Aboyer, chercher le baton,  Objet = Instance d’une classe
Chien Nom, race, âge, couleur
mordre, faire le beau  Une classe peut-être composite  peut contenir elle-même
des objets d’autres classes
 Ex: Une voiture contient un moteur qui contient des cylindres…
 Ex: Un chien possède des pattes…

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

Classes et Objets?: Définition Objet Résume


 Un objet  Un objet :
 est un ensemble structuré de données s’exécutant dans un  peut être construit
logiciel  est structuré : il est constitué d’un ensemble de
 a des propriétés propriétés
 représentant son état  possède un état : la valeur de ses propriétés
 a un comportement  possède une interface : l’ensemble des méthodes et
 définissant ses actions et réactions propriétés
 simulant parfois le comportement d’un objet du monde réel  accessibles par les utilisateurs de l’objet
Plan de Classe
 une classe (d’objets) définit :
construction
 une façon de construire des objets (constructeur)
 la structure des objets de la classe (propriétés)
 le comportement des objets de la classe (méthodes)
 l’interface des objets de la classe (méth. et prop. non-
Objet1 Objet2 Objet3
privées)
Une classe n'est pas un objet. Une classe est un patron d'objet.  un type "référence vers des objets de cette classe"
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 103 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 104
Exemple 1 : Date (1/3) Exemple 1 : Date (2/3)

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

• 2015 • 1990 • 1789

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

Exemple 1 : Date (3/3) Exemple 2 : Les planètes (1/3)

 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)

Ces planètes ont en commun : Planete


 Le Type : Rocheuse, Gazeuse •Type Une classe
 La Distance au Soleil : 227936640, 779 millions, 1426725400, •DistanceAuSoleil
150000000
•Diametre
 Le Diamètre : 12756.28, 120536, 142984, 6794
Ses Objets

Jupiter Terre Mars Saturne

• Gazeuse • Rocheuse • Rocheuse • Gazeuse


• 779 millions • 150000000 • 227936640 • 1426725400
• 142984 • 12756,28 • 6794 • 120536

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

Exemple 3 : Etudiant (1/3) Exemple 3 : Etudiant – 1ère possibilité (2/3)


 Sami, 19 ans, étudiant en Droit. groupe 1, sous-groupe 2. sami
 Asma, étudiante en informatique, a 18 ans. Elle est dans le • 19
sous-groupe 1 du Groupe 2. • Droit
 Ali, un garçon de 21 ans, est en Génie Electrique. Il est dans le •1
Etudiant •2
groupe 3, sous-groupe 2.
• Age • Garçon
 Ici, un étudiant se caractérise par • Departement
 age • Groupe
• SousGroupe Ses Objets
 département
• Sexe
 groupe
 sous-groupe ali asma
 sexe • 21 • 18
Une classe • INFO
• GE
•3 •2
•2 •1
• Garçon • Fille

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

Exemple 4 : Gestion d’une bibliothèque (2/2) Java : Déclaration de la classe


 Des objets similaires peuvent être informatiquement décrits par une public class Nomclasse
{
même abstraction : une classe /* Déclaration des attributs */
 même structure de données et méthodes de traitement
 valeurs différentes pour chaque objet /* Déclaration des constructeurs */
/* Déclaration des méthodes */
// commentaire sur une seule ligne
/* commentaires sur
………
………
plusieurs lignes */
}

♦ Le fichier .java doit avoir le même nom que la classe


♦ Le nom de la classe doit commencer par une majuscule

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

Modificateurs d’accès Le modificateur « static »

 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;

public static void float perimetre( float rayon )


{ return rayon * 2 * pi; }
} Erreur car pi n'est pas statique.
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 119 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 120
La classe : Déclaration des attributs : static La classe : Déclaration des attributs : static

 Si le modificateur « static » s’applique à un attribut d’une classe,


on dit que c’est une variable de classe. Sinon c’est une variable  Variable d’instance:
d’instance.
Chaque instance de la classe possède
 Chaque objet a sa propre “mémoire” de ses variables d’instance.
ses propres valeurs des variables.
 Le système alloue de la mémoire aux variables de classe dès Etudiant [class]
qu’il rencontre la classe.
String nom;
 Chaque instance possède la même valeur d’une variable de
classe. Class Etudiant{
String nom;

}
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

La classe : Déclaration des attributs : static Le modificateur « final »

 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

La classe : Le constructeur La classe : Le constructeur


 Toutes variables doivent être initialisées
 A le même nom que la classe
 Or la déclaration des attributs n’inclut généralement pas
 Utilise comme arguments des variables public Voiture(String m,int
d’initialisation initialisant son état interne v,double e)
 De plus, comment pourrait-on connaître à l’avance la valeur des  On peut surcharger les constructeurs, i.e {
différentes variables membres, puisqu’elle sera propre à chaque définir de multiples constructeurs marque=m ;
instance (objet) de la classe? (Chaque voiture a sa propre (plusieurs recettes existent pour vitesse=v;
reserveEssence=e;
marque, sa propre couleur et sa propre vitesse) fabriquer un même objet avec des
ingrédients différents) }
 Il faut donc définir dans la classe un mécanisme permettant de
donner une valeur aux variables membres (aux états) de l’objet  Il existe toujours un constructeur. S’il
public Voiture(String m)
n’est pas explicitement défini, il sera un
 Ce mécanisme s’appelle le « constructeur » constructeur par défaut, sans arguments.
{
marque=m ;
 Une classe doit avoir au minimum un constructeur  Signature d’un constructeur: vitesse=0;
 Le constructeur recevra les valeurs à attribuer aux variables et  Modificateur d’accès (en général public) reserveEssence=0;
les y affectera  Pas de type de retour }
 Le constructeur servira ainsi à « matérialiser » la classe et sera  Le même nom que la classe
donc appelé chaque fois qu’un objet de la classe doit être créé  Les arguments sont utilisés pour
 Le constructeur est donc la « Recette » pour fabriquer un objet initialiser les variables de la classe

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

Interaction entre objets : Création d’objets Création d ’une instance de classe


Déclaration et création d’objets  Pour supprimer une instance d'une classe on doit affecter la
 Déclaration : Voiture v1; v1 ???? référence de celle-ci à « null »
 Création : v1 = new Voiture("Peugeot", 120, 35.3); monInstance = null;
 L'instance n'est pas détruite immédiatement mais uniquement
lors de la mise en route du garbage collector.
1. Réservation espace mémoire v1 ???? m 0 x09ab5
v 0  On peut activer le garbage collector par l'instruction :
e 0 System.gc();
m Peugeot x09ab5
2. Exécution du constructeur v1 ???? v 120
e 35.3

3. Création du pointeur v1 x09ab5 m Peugeot x09ab5


v 120
e 35.3

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)

 Signature d’une méthode:


 Modificateurs d’accès : public, protected, private, aucun  Le comportement d’une méthode statique ne dépend pas de la
 [modificateurs optionnels] : static, native, synchronized, final, abstract valeur des variables d'instance
Signature

 Type de retour : type de la valeur retournée


 Nom de la méthode (identificateur) class MaClassMath{ Utilisation:
 Listes de paramètres entre parenthèses (peut être vide mais les parenthèses sont int x; L'appel à une méthode statique se fait en
indispensables) int y; utilisant le nom de la classe.
 [exception] (throws Exception)
 Au minimum: static int min(int a , int b){
 La méthode possède un identificateur et un type de retour if(a<b){ class Test {
return a; public static void main ( String [] args ){
 Si la méthode ne renvoie rien  le type de retour est void } else { int z = MaClassMath .min (21 ,4);
return b; }
} }
}
}

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

Les méthodes static (2/2) La classe : Déclaration des méthodes

 Qu’est-ce que « l’interface » d’une méthode


Puisque les méthodes static appartiennent à la classe,  L’interface d’une méthode, c’est sa signature
elles ne peuvent en aucun cas accéder aux variables
d'instances qui appartiennent aux instances de la classe.  Cette signature, qui définit l’interface de la méthode, correspond en
fait au message échangé quand la méthode est appelée
 Le message se limite uniquement à la signature de la méthode

 Les méthodes d’instances accèdent :  Type de retour


 aux variables d’instance et méthodes d’instances  Nom
 Arguments
 aux variables de classe (static) et méthodes de classe (static)
 Les méthodes de classe (static) accèdent :  L’expéditeur du message n’a donc jamais besoin de connaître
 aux variables de classe (static) et méthodes de classe (static) l’implémentation ou le corps de la méthode
 Les méthodes de classe (static) n’accèdent pas aux variables de  On a donc:
d’instance et méthodes d’instance  Déclaration = Signature = Message de la méthode
 Dans une méthode static on ne peut pas utiliser this  Bloc d’instruction = Corps = Implémentation de la méthode

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

 Réaliser une classe Point permettant de représenter un


point sur un axe. Chaque point sera caractérisé par un nom
(de type char) et une abscisse (de type double). On prévoir :
 un constructeur recevant en arguments le nom et
l’abscisse d’un point.
 une méthode affiche imprimant (en fenêtre console) le
nom du point et son abscisse,
 une méthode translate effectuant une translation
définie par la valeur de son argument.
 Écrire un programme utilisant cette classe pour créer
un point, en affichant les caractéristiques,
 le déplacer et en affichant à nouveau les
caractéristiques.

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

Analyse d’un problème en utilisant l’approche OO Exercice Chemise: Identification de l’objet

 Etude de cas: Vente chemise


Une société nommé “Direct Clothing” vend des chemises
par catalogue.
On veut développer un programme pour cette société. Objet
On sait qu’une chemise possède les caractéristiques Chemise
suivantes: ID
Prix
Chaque chemise: Taille
Couleur
possède un identifiant- code à barre
Description
est disponible en plusieurs couleurs: bleu, gris, etc Quantité dans le stock
Attributs Méthodes
est disponible en plusieurs tailles
Ajouter chemise dans le stock
a un prix
Diminuer une chemise du stock
a une description – type du tissu, style, etc
quantité dans le stock

On peut ajouter ou diminuer des chemises du stock.

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’;
} }
} }

Instanciation de la classe Chemise Création d’un objet.


Création d’une variable maChemise de type Chemise Cet objet possède une adresse de son emplacement dans
la mémoire (0x034009)

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

maChemise maChemise 0x034009


public class Test{ public class Test{

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’

prix 0.0f prix 0.0f


maChemise=new Chemise(); description null maChemise=new Chemise(); description null
quantite 0 quantite 0
maChemise.couleur=‘R’; maChemise.couleur=‘R’;
} }
} }

En utilisant la référence maChemise, on peut accéder


Lier l’objet créé et la variable maChemise aux attributs de l’objet
maChemise est la référence de l’objet créé

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

public class Test{ taChemise 0x99f311 L’opérateur new fait appel au


public class Test{
constructeur de la classe
public static void main(String[] args){
0x034009 id 0 public static void main(String[] args){
Chemise maChemise; couleur R
'\u0000’

prix 0.0f Chemise maChemise; class Chemise{


maChemise=new Chemise(); description null
quantite 0 maChemise= new Chemise(); Chemise () {}
maChemise.couleur=‘R’;
}
Chemise taChemise=new Chemise(); }
0x99f311 id 0 }
}
} couleur '\u0000’

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

 Si le constructeur surchargé est crée, le constructeur par défaut implicite


 Constructeur par défaut
ne sera plus créer par le compilateur.
Le constructeur par défaut initialise les
Chemise(){}
variables de la classe aux valeurs par  La plateforme java différencie entre les différents constructeurs déclarés
défaut. au sein d’une même classe en se basant sur le nombre des paramètres et
leurs types.
Chemise(){
id=0;
couleur=‘B’ On ne peut pas créer deux constructeurs ayant
prix=10.2f; le même nombre et types des paramètres.
}
Chemise(int id) {
 Constructeur surchargé this.id=id
}
Chemise(int id, char couleur, float prix){ Erreur de compilation
this.id=id; Chemise(int id) {
this.couleur=couleur; this.id=id*2
this.prix=prix; }
}

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

Exercice Chemise : Les constructeurs 4/4 Exercice 6

 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();

Chemise(int id) { Chemise ch1=new Chemise(122);


this.id=id;
}
Chemise(int id, char couleur) { Chemise ch1=new Chemise(122, ‘B’);
this.couleur=couleur;
}
}
2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 159 2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 160
Exercice 7 Exercice 8

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

 Définissez une classe Individu composée d'un nom, d'une


adresse, et d'un numéro de téléphone. Vous écrivez aussi les
méthodes constructeur (3 constructeurs), affectation et
consultation des champs et affichage des informations.

2020/2021 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 163