Vous êtes sur la page 1sur 86

Concepts de base de la POO

 Programmation orientée objet « POO »


 La POO est un paradigme de programmation (méthode de
formulation des solutions à des problèmes informatiques)
 Parmi les paradigmes de programmation les plus connus, on
trouve :
 Programmation orientée objet
 Programmation procédurale
 Programmation fonctionnelle
 Programmation orientée processus…
 Il y a des langages de programmation qui sont conçus pour
supporter un seul paradigme (C, pascal …) et d’autres qui
supportent des paradigmes multiples (C++, Python, JAVA
…)
2 Mohamed Aymen CHARRADA 23/10/2023
 POO Vs Programmation procédurale
 Programmation procédurale :
 Le programme est définit comme un ensemble de données sur
lesquelles agissent des procédures et des fonctions
 Les données constituent la partie passive (statique) du
programme
 Les procédures et les fonctions constituent la partie active
(dynamique) du programme
 Exemple de langages procéduraux : C, Pascal…
 Programmer dans ce cas revenait à :
 définir un ensemble de variables (structures, tableaux…)
 écrire des procédures et des fonctions pour manipuler ces variables

3 Mohamed Aymen CHARRADA 23/10/2023


 POO Vs Programmation procédurale
 Programmation procédurale :

Programme Données

Traitement 1

Traitement 2

Traitement 3

 Les données et les procédures (les traitements) sont traitées


indépendamment les unes des autres

4 Mohamed Aymen CHARRADA 23/10/2023


 POO Vs Programmation procédurale
 POO :
 Elle repose sur l’idée de rassembler dans une même entité appelée
objet les données (partie statique) et les traitements (partie
dynamique) qui s'y appliquent
 Les objets communiquent et interagissent entre eux
 Chaque objet est construit en utilisant un modèle appelé « classe »

Traitement Programme Objet 1 Données

Données Traitement

Identité
Objet 4
Objet 2
Objet 3

5 Mohamed Aymen CHARRADA Objet 23/10/2023


 La programmation orientée objet (POO)
 L'idée de base de la POO est de rassembler dans une même
entité appelée objet les données et les traitements qui s'y
appliquent
 POO définit plusieurs concepts de base y compris :
 Classe
 Objet
 Attribut
 Méthode
 Encapsulation
 Héritage
 Polymorphisme
…

6 Mohamed Aymen CHARRADA 23/10/2023


 Classe
 Une classe est un ensemble de données et de traitements
encapsulés (regroupés dans une même entité)
 Une classe se compose de deux parties : un entête et un
corps. Le corps contient la déclaration des données
(Attributs) et la définition des traitements (méthodes)
 Une classe est une description abstraite d'objets. Une classe
sert à créer un ou plusieurs objets (une moule à objets)
 La syntaxe de déclaration d'une classe est :

[modificateurs] class nom_Classe {


//Déclaration des attributs
//Définition des méthodes
...
}
7 Mohamed Aymen CHARRADA 23/10/2023
 Classe
 Par convention, le nom de la classe doit commencer par une
lettre majuscule. Dans le cas des noms composés de plusieurs
mots, ces mots doivent être liés par « _ » et commencent par
une lettre majuscule
 Les modificateurs de classe sont :
Modificateur Signification
La classe contient une ou plusieurs méthodes abstraites, qui n'ont pas
abstract
de définition explicite (voir la suite du cours)
final La classe ne peut être ni modifiée ni héritée
private La classe n'est accessible qu'à partir du fichier où elle est définie
public La classe est accessible partout
néant La classe n’est accessible que dans son package
 Les modificateurs « abstract » et « final » ainsi que « public » et
« private » sont mutuellement exclusifs
8 Mohamed Aymen CHARRADA 23/10/2023
 Classe
 Exemple :

public final class A { private abstract class B {


… …
} }

public private class C { final abstract class D {


… …
} }

9 Mohamed Aymen CHARRADA 23/10/2023


 Attribut
 Un attribut est une variable membre déclarée dans une
classe
 Syntaxe de déclaration d’un attribut :
[modificateur] Type nom_attribut [= valeur ] ;
 Les modificateurs des attributs les plus connus sont :
public, private, protected ou néant
 Exemple :

 Les attributs peuvent être des variables d'instances,


des variables de classes ou des constantes
10 Mohamed Aymen CHARRADA 23/10/2023
 Attribut
 Les modificateurs de visibilité d’un attribut :
Modificateur Signification
L’attribut est visible pour toutes les autres classes. Dans la
public philosophie orientée objet aucune donnée d'une classe ne
devrait être déclarée publique
L’attribut n’est visible qu’à l’intérieur de sa classe. C’est le
private
niveau de visibilité le plus réduit
L’attribut n’est visible que pour les classes présentes dans le
protected
même package de sa classe ou pour ses sous-classes
Il n'existe pas de mot clé pour définir ce niveau, qui est le
Ne rien mettre niveau par défaut lorsqu'aucun modificateur n'est
(néant) précisé. L’attribut est visible uniquement pour les classes
présentes dans le même package de sa classe

11 Mohamed Aymen CHARRADA 23/10/2023


 Variable d’instance (d’objet)
 Une variable d'instance (d’objet) nécessite simplement une
déclaration dans le corps de la classe
 Exemple :

public class Ma_Classe {


public int valeur1 ;
int valeur2 ;
protected int valeur3 ;
private int valeur4 ;
}

 Chaque instance (objet) de la classe a sa propre occurrence


(copie) de la variable d’instance

12 Mohamed Aymen CHARRADA 23/10/2023


 Variable de classe
 C’est une variable partagée, accessible et modifiable par
toutes les instances (objets) d’une même classe
 Une telle variable permet de stocker une valeur modifiée
tour à tour par les instances de la classe
 Sa déclaration est accompagnée du mot clé « static »
 Exemple

public class Ma_Classe {


static int compteur = 0;
}

 Les variables de classe appartiennent à la classe entière et


non pas à un objet spécifique, elle n'existe donc qu'une
seule fois en mémoire
13 Mohamed Aymen CHARRADA 23/10/2023
 Constante
 Une constante est définie avec le mot clé « final » : sa
valeur ne peut pas être modifiée
 Exemple :

public class Ma_Classe {


final double pi = 3.14 ;
}

14 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Une méthode est une fonction qui implémente des traitements
spécifiques de la classe
[modificateurs] type_de_retour nom_methode (liste_parametres)
{
// Définition des variables locales et du bloc d'instructions

}
 Les modificateurs de méthodes les plus connus : public, private,
protected ou néant
 Le type de retour peut être un type primitif ou un objet. Si la
méthode ne retourne rien, on utilise alors le mot « void » comme
type de retour
 Les paramètres sont les données nécessaires au bon fonctionnement de
la méthode. Si la méthode n’a pas besoin de paramètres, il faut laisser
15
les Aymen
Mohamed parenthèses
CHARRADAvides 23/10/2023
 Méthode
 Les modificateurs de méthodes sont :
Modificateur Signification
public La méthode est accessible aux méthodes des autres classes
La méthode peut être utilisée uniquement par les autres méthodes de
private
la même classe
La méthode n’est visible que pour les classes présentes dans le même
protected
package de sa classe ou pour ses sous-classes
Ne rien mettre La méthode est visible uniquement pour les classes présentes dans le
(néant) même package de sa classe
final La méthode ne peut être modifiée
C’est une méthode de classe (elle appartient simultanément à tous les
static
objets de la classe)

16 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Si le type de retour est différent de « void » alors la
dernière instruction de la méthode doit être l’instruction «
return » suivit du résultat à retourné
 Les paramètres sont passés à la méthode comme des
variables, séparés par des virgules
int somme (int a, int b) { private void affiche ( ) {
int s = a+b ; System.out.println("Bonjour");
return s; }
}

 Il n'est pas possible d'indiquer des valeurs par défaut pour


les paramètres lors de la déclaration de leur méthode
public int somme (int a = 2, int b) {
return (a+b);
}
Mohamed Aymen CHARRADA 23/10/2023
17
 Méthode
 Les paramètres d’une méthode peuvent être de types
primitifs (numérique, chaine, tableau…) ou des objets
 Les paramètres passés à une méthode, lors de sa
déclaration, s’appellent paramètres formels
 L’appel d’une méthode se fait comme suit :
nom_methode ( liste_parametres )

 Les paramètres passés à une méthode, lors de l’appel,


s’appellent paramètres effectifs

18 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Le type, le nombre et l’ordre des paramètres effectifs
transmis à une méthode lors de son appel doivent
correspondre aux paramètres formels passés à la méthode
lors de sa déclaration
float somme (int a, float b){ private void affiche ( ) {
float s = 0 ; int x = 3;
s = a+b ; float y = 5.1;
return s; System.out.println(somme(x,y));
} }
Paramètres Paramètres
formels effectifs

19 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Dans le corps d’une méthode, on peut avoir besoin
d’utiliser des variables (outre que les attributs et les
arguments) pour implémenter les traitements nécessaires
 Ces variables sont créées à l’intérieur de la méthode, s’appellent
variables locales, et ne sont visibles et utilisables qu’à
l’intérieur de la méthode où elles ont été déclarées
 Exemple :
float somme (int a, float b){ private void affiche ( ) {
float s = 0 ; int x = 3;
s = a+b ; float y = 5.1;
return s; System.out.println(somme(x,y));
} }

Variables locales
20 Mohamed Aymen CHARRADA 23/10/2023
 Méthode
 Il est également possible de créer une méthode avec un
nombre variable de paramètres. On le signale avec trois
points après le type du paramètre
public int additionner (int... valeurs) {
int resultat = 0;
La méthode
for (int valeur : valeurs) { « additionner » admet
resultat += valeur; } un nombre variable de
return resultat; paramètres formels
}
 Le paramètre variable est vu comme un tableau dans le
corps de la méthode (dans sa forme formelle). Par contre, il
s’agit bien d’une liste de paramètre au moment de l’appel
(dans sa forme effective)
21 Mohamed Aymen CHARRADA 23/10/2023
 Méthode
 Exemple
System.out.println(additionner(1)); // 1
System.out.println(additionner(1, 2, 3)); // 6
System.out.println(additionner(1, 2, 3, 4)); // 10
 L’utilisation d’un paramètre variable obéit à des règles :
 Si la méthode admet plusieurs paramètres, le paramètre variable
doit être placé en dernière position
public int fct1 (double b, int… args, char c) {…}
public void fct2 (int a, float… args) {…}
 Il n’est pas possible de déclarer un paramètre variable acceptant
plusieurs types
 Au moment de l’appel, le paramètre variable peut être
omis. Dans ce cas le tableau passé au corps de la méthode
est un tableau vide
Mohamed Aymen CHARRADA
22 23/10/2023
 Méthode
 Exemple
System.out.println(additionner()); // 0
 Il est possible d’utiliser un tableau pour passer des valeurs à
un paramètre variable
int[] valeurs = {1, 2, 3};
System.out.println(additionner(valeurs)); // 6

23 Mohamed Aymen CHARRADA 23/10/2023


 Activité 1
 Ecrire une classe « Test » qui contient une méthode
publique « produit » qui permet de calculer et retourner
le produit d’un certain nombre d’entiers
 Dans la méthode « main » de la classe « Test », afficher, à
chaque fois en utilisant la méthode « produit », les
résultats des produits suivants :
 5*8
 7*9*6*14

24 Mohamed Aymen CHARRADA 23/10/2023


 Solution

25 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Pour qu’un programme, écrit en Java, puisse être exécuté,
il doit contenir une classe principale qui doit contenir à son
tour une méthode principale appelée « main »
 La méthode « main » doit obligatoirement être déclarée de
la façon suivante :
public static void main (String [ ] args) {
// liste des instructions à exécuter
}

 La machine virtuelle considère la méthode « main »


comme le point d’entrée de toute application Java : elle
contient les instructions à exécuter

26 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Exemple :

27 Mohamed Aymen CHARRADA 23/10/2023


 Constructeur
 Chaque classe doit contenir obligatoirement une
méthode spécifique appelée constructeur
 Il est systématiquement utilisé lors de la création d’un objet
de la classe correspondante
 Il doit avoir le même nom que sa classe, elle n’a pas
un type de retour, donc elle ne contient pas
d’instruction « return » et elle doit être publique
(afin de pouvoir l’utiliser dans la création des instances)
 Si le constructeur d’une classe n'est pas défini, la machine
virtuelle crée pour elle automatiquement un constructeur
par défaut (sans paramètres)
 Une classe peut avoir un ou plusieurs constructeurs
28 Mohamed Aymen CHARRADA 23/10/2023
 Constructeur
Il existe plusieurs types de constructeurs :
 Le constructeur simple : ce type de constructeur ne
nécessite pas de définition explicite: son existence découle
automatiquement de la définition de la classe
 Exemple :

class A {
public A ( ) { }
}

29 Mohamed Aymen CHARRADA 23/10/2023


 Constructeur
Il existe plusieurs types de constructeurs :
 Le constructeur avec initialisation fixe : C’est un
constructeur sans paramètres. Son corps sert à initialiser les
attributs de la classe avec des valeurs fixes
 Exemple :
class A {
int nombre; // Attribut

public A ( ) {
nombre = 5;
}
}

30 Mohamed Aymen CHARRADA 23/10/2023


 Constructeur
Il existe plusieurs types de constructeurs :
 Le constructeur avec initialisation des variables :
Ce type de constructeur permet d’initialiser les attributs de
la classe avec ses paramètres
 Exemple :
class A {
int nombre; // Attribut

public A (int valeur) {


nombre = valeur;
}
}

31 Mohamed Aymen CHARRADA 23/10/2023


 Activité 2
 Créer une classe Etudiant avec quatre attributs privés :
nom, prenom, note1 et note2, qui définit deux
constructeurs : un constructeur avec initialisation fixe et un
autre avec initialisation variable, et qui contient une
méthode publique qui calcul et retourne la moyenne des
deux notes

32 Mohamed Aymen CHARRADA 23/10/2023


 Solution

33 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Les attributs déclarés « private » à l'intérieur d'une classe ne
sont accessibles qu’à l’intérieur de leur classe
 Si une classe veut accéder aux attributs privés d’une autre classe,
ceci n'est possible que par l'intermédiaire de méthodes
spécifiques appelées accesseurs et modificateurs
 Un accesseur est une méthode publique permettant de
récupérer le contenu d'un attribut privé
 Un accesseur
 Doit avoir comme type de retour le même type de la variable à
renvoyer
 Ne possède pas d'arguments
 Par convention, les noms des accesseurs commencent par
« get »
34 Mohamed Aymen CHARRADA 23/10/2023
 Méthode
 Un modificateur est une méthode publique permettant de
modifier le contenu d'un attribut privé
 Un mutateur
 Doit avoir un paramètre ayant le même type de l’attribut à
modifier
 Ne retourne pas de valeur (il possède « void » comme type de
retour)
 Par convention, les noms des mutateurs commencent par
« set »

35 Mohamed Aymen CHARRADA 23/10/2023


 Méthode
 Exemple

class A {

private int val;

public int getVal ( ) {


return (val);
}

public void setVal (int x) {


val = x;
}
}

36 Mohamed Aymen CHARRADA 23/10/2023


 Activité 3
 Etant donnée
la classe
« Etudiant »,
ajoutez les
accesseurs et
les
modificateurs
nécessaires

37 Mohamed Aymen CHARRADA 23/10/2023


 Solution
 Voici ce que vous devez ajouter dans la classe « Etudiant »

38 Mohamed Aymen CHARRADA 23/10/2023


 Surcharge des méthodes
 La surcharge est la possibilité d'utiliser le même nom
pour déclarer des méthodes ayant la même sémantique
(traitement) mais avec des paramètres différents
(Différence en ordre, en nombre et/ou en type)
 Nous avons déjà vu le mécanisme de surcharge lorsque
plusieurs constructeurs sont définis dans une seule classe
 En fonction du type et de nombre de paramètres lors de
l’appel, la méthode correspondante sera déterminée
 Le mécanisme de surcharge permet de réutiliser le nom
d’une méthode déjà définie, par une autre méthode qui sera
différente par ses paramètres

39 Mohamed Aymen CHARRADA 23/10/2023


 Surcharge des méthodes
 Exemple :

Class A { Class B { Class C {


void min (int a, int b) { void min (int a, double b) { void min (int a, int b) {
… … …
} } }
void min (int a, int b, int c) void min (float a, int b) { void min (int c, int d) {
{… … …
} } }
} } }

On dit qu’on a surchargé une méthode par une (des) autre(s) lorsque le
nombre, le type et/ou l’ordre des paramètres de ces méthodes sont
différents

40 Mohamed Aymen CHARRADA 23/10/2023


 Surcharge des méthodes
 Le surcharge permet aussi de modifier le type de retour de
la méthode mais attention il doit être obligatoirement
couplé avec la modification des paramètres (en nombre,
type et/ou ordre)
 Exemple
Class A { Class B {
int min (int a, int b) { void min (int a, int b) {
… …
} }
void min (int a, int b) { int min (int a, int b, int c) {
… …
} }
} }

41 Mohamed Aymen CHARRADA 23/10/2023


 Activité 4
 Pour chaque appel de la méthode « sqr », indiquez si
l’appel est possible et quelle est la méthode utilisée:
public class Calcul {
public static byte sqr (byte b) { return (byte)(b*b); }
public static int sqr (int b) { return (b*b); }
public static double sqr (double b) { return (b*b); }
public static void main (String[] args) {
byte a = sqr(2);
byte b=2, c=4;
byte d = sqr(b);
byte e = sqr(b+c);
int i = sqr(4);
double x = sqr(2);
}
}

42 Mohamed Aymen CHARRADA 23/10/2023


 Mot clé « static »
 Ce mot clé s'applique aux attributs, aux variables et aux
méthodes
 Une méthode « static » est une méthode de classe qui
n'agit pas sur des variables d'instance mais uniquement
sur des variables de classe
 Exemple :
public static void A ( ) { … }
 Il n'est pas possible d'appeler une méthode d'instance ou
d'accéder à une variable d'instance à partir d'une méthode
statique

43 Mohamed Aymen CHARRADA 23/10/2023


 Mot clé « static »
 Exemple
class A {
private int val;
public static String ch;
public int getVal ( ) {
return (val);
}
public static void fct1 ( ) { … }
public static void fct2 ( ) {
val += 1;
ch = "Bonjour";
fct1 ( );
System.out.print(getVal ( ));
}
44
} CHARRADA
Mohamed Aymen 23/10/2023
 Activité 5
 Trouver la ou les bonnes réponses. On considère la classe:
class X { static int i=0; int j=2; }
a) On peut ajouter à cette classe: void f( ) { i=i+j; }
b) On peut ajouter à cette classe: static void g( ) { i=j+i; }
c) On peut ajouter à cette classe: static void h( ) { i=X.j+i; }
d) On peut ajouter à cette classe:
static void i( ) { i++; }

45 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Un objet (appelé aussi instance) est une variable
construite à partir d’une classe. Son type n’est que la classe
à partir de laquelle il est construit
 Un objet permet d’activer les méthodes de sa classe et
donne des valeurs particulières à ces attributs
 Un objet est caractérisé par :
 Son identité (nom) : valeur unique qui caractérise l’objet
 Son comportement : qui est défini à travers les méthodes
applicables à cet objet et qui caractérisent sa façon d’agir et de
réagir dans le programme
 Son état interne : qui constitue l’ensemble des valeurs des
attributs de cet objet

46 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Exemple Objet 1 : Etudiant1
Nom : Ben salem
Prenom : Ali
Classe « Etudiant » Note1 : 20
Attributs : Note2 : 17,5
Nom : String
Prenom : String Objet 2 : Etudiant2 Trois objets
Note1 : double (instances)
Nom : Sassi
Note2 : double
Prenom : Amel
créés à partir
Méthodes : Note1 : 10 de la classe
Etudiant ( ) Note2 : 8,5 « Etudiant »
Etudiant (…)
double getMoyenne (…)
Objet 3 : Etudiant3
void afficheEtudiant ( )
Nom : Ajmi
Prenom : Walid
Note1 : 14,25
Note2 : 12,5

47 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Créer un objet consiste à instancier une classe. Un objet est
l’instance d’une classe
 L’instanciation fait appel au constructeur de la classe pour
construire l’objet correspondant
 Pour instancier un objet, on passe par deux étapes :
 Déclarer une variable de la classe. Cette variable est une
référence de l’objet que l’on va créer. La déclaration est de la
forme :
[modificateurs] nom_classe nom_obj ;
 Utiliser l’opérateur « new » et le constructeur de la classe pour
allouer la mémoire nécessaire à l’objet et l’initialiser
nom_obj = new nom_Constructeur (…);

48 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Ces deux étapes peuvent être fusionnées en une seule
instruction
[modifs] nom_classe nom_obj = new nom_Constructeur ( );
 Exemple
Etudiant E = new Etudiant ( );
 Plusieurs variables peuvent référencier le même objet
 Exemple
 Si « E2 » désigne un objet de type « Etudiant », l'instruction :
E2 = E;
ne définit pas un nouvel objet mais « E » et « E2 » désignent tous
les deux le même objet. On dit que « E » et « E2 » sont deux
références vers le même objet. En effet, Les variables de type objet
que l'on déclare ne contiennent pas un objet mais une référence
vers cet objet
Mohamed Aymen CHARRADA 23/10/2023
49
 Activité 6
 Donnez le résultat du code suivant :
String s1 = new String("Bonjour");
String s2 = new String("Bonjour");
System.out.println(s1 == s2);

50 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Exemple de création d’objets :
 Considérant la classe « Etudiant » définit tout à l’heure (Activité 1),
voici comment peut on créer deux objets à partir de cette classe :
//Utilisation du premier constructeur
Etudiant e1 = new Etudiant ( ) ;
//Utilisation du euxième constructeur
Etudiant e2 = new Etudiant ("ali", "mohamed", 14, 10.5) ;

 La durée de vie d’un objet :


 la déclaration de l'objet et l'instanciation grâce à l'opérateur new
 l'utilisation de l'objet en accédant à ses attributs ou appelant ses
méthodes
 la suppression de l'objet (qui se fait automatiquement en Java grâce
à la machine virtuelle)
51 Mohamed Aymen CHARRADA 23/10/2023
 Activité 7
 Combien d’instances de la classe « A » crée le code suivant?
A x,u,v;
x=new A();
A y=x;
A z=new A();
a) Aucune
b) Cinq
c) Trois
d) Deux

52 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 L’utilisation des objets se manifeste selon deux axes : l’accès
à ses attributs et l’appel de ses méthodes
 Accès aux attributs :
 Pour accéder aux attributs d’une classe de l’intérieur de cette
classe, il suffit d’indiquer le nom de l’attribut que l’on veut y
accéder
 Pour accéder aux attributs d’une classe de l’extérieur de cette
classe, on utilise la syntaxe suivante :
 Si l’attribut est statique, il est accessible à travers :
nom_classe.nom_attribut
 Sinon, il n’est accessible qu’à travers la référence d’un objet :
nom_objet.nom_attribut

53 Mohamed Aymen CHARRADA 23/10/2023


 Activité 8
 Etant donnée une classe « Livre » qui admet un attribut
d’instance « nom » de type chaine de caractères et le code
suivant :
Livre l1 = new Livre( );
l1.nom = "UN";
Livre l2 = l1 ;
l2.nom = "DEUX";
System.out.println(l1.nom);
 Ce code affiche ?
a) UN
b) DEUX

54 Mohamed Aymen CHARRADA 23/10/2023


 Objet
 Accès aux méthodes:
 A l’intérieur d’une classe, les méthodes de cette classe seront
appelées en indiquant le nom et la liste des paramètres effectifs de
la méthode
 A l’extérieur de la classe, l’appel d’une méthode se fait comme
suit:
 Si la méthode est statique, elle accessible à travers :
nom_classe.nom_méthode (liste des arguments effectifs)
 Sinon, elle n’est accessible qu’à travers la référence d’un objet :
nom_objet.nom_méthode (liste des arguments effectifs)
 La liste des arguments effectifs (de l’appel) doit être conforme en
nombre, en ordre et en type avec la liste des arguments formels (de
la déclaration)

55 Mohamed Aymen CHARRADA 23/10/2023


 Activité 9

56 Mohamed Aymen CHARRADA 23/10/2023


 Activité 9 (suite)
 Etant donnée la classe « Etudiant » du diapo précédent,
créez la classe principale « Test ». La méthode « main »
doit contenir les instructions permettant de :
 Créer deux objets de type « Etudiant » nommés « e1 » et « e2 »
(vous devez utiliser les deux constructeurs de la classe « Etudiant »)
 Mettre à jours la valeur de l’attribut « compteur » (cet attribut doit
contenir le nombre des objets créés de type « Etudiant »)
 Modifier le nom de « e1 »
 Afficher le prénom de « e2 »
 Calculer et afficher la moyenne de « e1 »

57 Mohamed Aymen CHARRADA 23/10/2023


 Solution

58 Mohamed Aymen CHARRADA 23/10/2023


 Mot clé « this »
 C’est un mot clé qui sert à référencer dans une méthode
l'instance de l'objet courant
 Le mot clé « this » peut être utile :
 Lorsqu’une variable locale (ou un paramètre) cache, en portant le
même nom, un attribut de la classe
 Pour appeler un constructeur depuis un autre constructeur de la
même classe (1ère instruction dans le constructeur appelant)
 Pour appeler une méthode de la classe dans une autre méthode de
la même classe
 Quand un objet doit appeler une méthode en se passant lui même
en paramètre de l'appel

59 Mohamed Aymen CHARRADA 23/10/2023


 Mot clé « this » (Exemple)

60 Mohamed Aymen CHARRADA 23/10/2023


 Activité 10
 Pour la classe B définie comme suit:
class B {
public B( ) {System.out.print(”Ciao ”); };
public B(int i) {this( ); System.out.println(”Bonjour ”+i);};
}
 qu’affichera l’instruction suivante?
B monB=new B(2023);
a) Erreur de compilation
b) Ciao 2023
c) Ciao Bonjour 2023
d) Bonjour 2023

61 Mohamed Aymen CHARRADA 23/10/2023


 Mot clé « null »
 Le mot clé « null » définit une référence nulle, c'est-à-dire
ne désigne aucun valeur réelle en mémoire. Il s'agit de la
valeur par défaut des variables non initialisées de type
référence d'objet
 Exemple
Etudiant E ;
 « E » est une référence d’un objet « null »

62 Mohamed Aymen CHARRADA 23/10/2023


 Passage de paramètres
 Le passage des paramètres à une méthode diffère en
fonction de la nature des paramètres :
 Si le paramètre est un objet, il est passé par référence
 Si le paramètre est une valeur primitive, il est passé par copie

Après l’appel, « p » est à (0,0)

Après l’appel, « i » vaut 20


63 Mohamed Aymen CHARRADA 23/10/2023
 Package (paquetage)
 Un package peut être considéré comme une bibliothèque
des classes : il permet de regrouper un certain nombre des
classes relativement liées
 Les packages peuvent être organisés d’une manière
hiérarchique en sous-packages et ainsi de suite
 Par convention, chaque classe doit être placée dans un
package
 Java propose une arborescence assez riche de packages qui
contiennent plusieurs classes prédéfinies regroupées par
domaine
 Ces classes peuvent être utilisées à condition qu’on les
importe ou qu’on importe leurs packages
64 Mohamed Aymen CHARRADA 23/10/2023
 Package (paquetage)
 Pour importer une classe d’un package, il y a
essentiellement deux méthodes possibles :
Exemple Rôle
toutes les classes du package sont
import nomPackage.*;
importées
appel à une seule classe : l'avantage de
import nomPackage.nomClasse; cette notation est de réduire le temps de
compilation
 Exemple
Le package « util » contient une classe prédéfinie appelée
« Scanner » qui permet de créer un flux nécessaire pour
communiquer avec les périphériques d’E/S. Pour créer un objet de
type « Scanner », on doit importer cette classe comme suit :
import java.util.Scanner ; ou import java.util.* ;
65 Mohamed Aymen CHARRADA 23/10/2023
 Package (paquetage)
 Exemple
import java.util.Scanner; //import java.util.*;
class A {
int x;
public lireX ( ) {
System.out.println("Donnez X :");
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
}

66 Mohamed Aymen CHARRADA 23/10/2023


 Package (paquetage)
 Exemple 2

67 Mohamed Aymen CHARRADA 23/10/2023


 Encapsulation
 L'encapsulation est un mécanisme consistant à rassembler
les données et les méthodes au sein d'une structure (objet)
en empêchant l'accès aux données par un autre moyen autre
que les services proposés (les méthodes)
 L'encapsulation permet donc de garantir l'intégrité des
données contenues dans l'objet
 L'encapsulation permet de définir des niveaux de visibilité
des éléments de la classe, ces niveaux de visibilité
définissent les droits d'accès aux données au niveau de la
classe elle-même, ou bien d'une autre classe
 Il existe quatre niveaux de visibilité: publique (« public »),
privée (« private »), protégé (« protected ») et néant (par
68
défaut)
Mohamed Aymen CHARRADA 23/10/2023
 Encapsulation
 Exemple :

Class Date { Class Billet { Class Programme {


// attributs // attributs ...
private int jour; private Date d; void Reservation (Billet b){
int mois; ... b.d.jour = 12;
int annee; } b.d.mois = 10;
... }
} }

 Est-ce que cet exemple est exacte ? Pourquoi?

L’attribut « jour » de la classe « Date » est privé, il


n’est visible qu’à l’intérieur de sa classe et n’ai pas
accessible dans la classe « Programme »

69 Mohamed Aymen CHARRADA 23/10/2023


 Encapsulation
 Exemple (suite) :

Class Date { Class Billet { Class Programme {


// attributs // attributs ...
int jour; Date d; void Reservation (Billet b){
int mois; ... b.d.jour = 12;
int annee; } b.d.mois = 10;
... }
} }

 Dans quelle condition cet exemple sera exacte?


Les trois classes doivent appartenir au même
package

70 Mohamed Aymen CHARRADA 23/10/2023


 Encapsulation
 Exemple (suite) :
Supposons que les classe « Date » et « Billet » appartiennent
au paquetage « A » et « Programme » appartient au
paquetage « B », cet exemple est il exacte ?
Class Date { Class Billet { Class Programme {
// attributs // attributs ...
int jour; Date d; void Reservation (Billet b){
int mois; ... b.d.jour = 12;
int annee; } b.d.mois = 10;
... }
} }

L’exemple n’est pas exacte


Proposez une solution pour corriger cet exemple ?
71 Mohamed Aymen CHARRADA 23/10/2023
 Encapsulation
 Solution :

Class Date { Class Billet { Class Programme {


// attributs // attributs ...
int jour; Date d; void Reservation (Billet b){
int mois; ... b.d.jour = 12;
int annee; } b.d.mois = 10;
... }
} }
Proposez une solution pour corriger cet exemple ?
 Rendre les attributs des classes « Date » et « Billet » publique
 Ajouter des accesseurs pour les attributs des classes « Date » et «
Billet » et les utiliser dans la classe « Programme » pour accéder
aux variables d’instances « d », « jour » et « mois »

72 Mohamed Aymen CHARRADA 23/10/2023


 Exercice 1
 Dites si les instructions en gras sont justes ou fausses et justifiez
vos réponses.
class Rectangle
{ private int longueur ;
private int largeur ;
// constructeur avec 2 paramètres
Rectangle (int x, int y) {longueur =x ; largeur = y ;}
// constructeur avec 1 paramètre
Rectangle (int x) {longueur =2*x ; largeur = x ;}
public int calcul_surface ( ) {return (longueur*largeur) ;}
}
Rectangle r1 = new Rectangle (10,4) ;
Rectangle r1 = new Rectangle (10) ;
Rectangle r1 = new Rectangle () ;
73 Mohamed Aymen CHARRADA 23/10/2023
 Exercice 2
 Corrigez les erreurs du programme suivant :
public class Math {
static double PI = 3.14 ;
static double getPI () {Return (PI) ;}
static double diametre () {return (PI*2*r);}
double puissance (double x) {return (x*x);}
}
class Test_Math {
public static void main (String [] args) {
double i= Math.puissance (6);
System.out.println ("I=" + i);
Math m = new Math ();
Math m1 = new Math (1,3);
double d = diametre (5.1);
System.out.println ("Le diametre = "+ d);
}
}
Mohamed Aymen CHARRADA
74 23/10/2023
 Exercice 3
 Ecrire une classe « Voiture » qui comporte deux attributs
privés « marque » et « prix », ainsi qu’un constructeur
simple et des accesseurs/mutateurs pour tous les attributs.
Ajouter dans cette classe une méthode « affiche () » qui
permet d’afficher les attributs d’une voiture.
 Ecrire une classe principale « Test » qui permet de créer deux
objets de type « Voiture » et d’afficher leurs détails. Le résultat
d’affichage doit être équivalent à :

75 Mohamed Aymen CHARRADA 23/10/2023


 Solution

76 Mohamed Aymen CHARRADA 23/10/2023


 Exercice 4
 Ecrire une classe « Point » qui comporte :
 Deux attributs réels privés « x » et « y »,
 Deux constructeurs : un simple et l’autre avec initialisation variable à
deux arguments,
 Des accesseurs/mutateurs pour tous les attributs,
 La méthode « double distance(Point p) » qui retourne la distance
(euclidienne) entre le point appelant et « p »
 La méthode « boolean egaux(Point p) » qui renvoie « true » si le
point appelant et « p » sont les mêmes (i.e. ont les mêmes coordonnées),
 La méthode « String toString() » qui renvoie une représentation
textuelle du point appelant

77 Mohamed Aymen CHARRADA 23/10/2023


 Exercice 4 (suite)
 Ecrire une classe « Rectangle » qui comporte :
 Quatre attributs privés : deux de type Point « p1 » et « p2 », deux de
type réel double « longueur » et « hauteur »
 Deux constructeurs :
 Un constructeur « Rectangle (Point p, Point q) » qui construit un
rectangle dont les points « p » et « q » sont les extrémités d'une
diagonale p

q
 Un constructeur « Rectangle (Point p, double l, double h) » qui
construit un rectangle dont « p » est le coin supérieur gauche, « l » la
longueur et « h » la hauteur, l
p
h

78 Mohamed Aymen CHARRADA 23/10/2023


 Exercice 4 (suite)
 Ecrire une classe « Rectangle » qui comporte (suite):
 La méthode « double longueur() » qui retourne la longueur du
rectangle appelant,
 La méthode « double hauteur() » qui retourne la hauteur du rectangle
appelant,
 La méthode « double surface() » qui retourne la surface du rectangle
appelant,
 La méthode « boolean contient(Point p) » qui renvoie « true » si le
point paramètre « p » est à l'intérieur du rectangle appelant, « false »
sinon

79 Mohamed Aymen CHARRADA 23/10/2023


 Solution

80 Mohamed Aymen CHARRADA 23/10/2023


 Solution (suite)

81 Mohamed Aymen CHARRADA 23/10/2023


 Exercice 5
 Ecrire une classe « Personne » qui comporte :
 un attribut privé de type String nommé nom ;
 un attribut privé de type Personne nommé ami ;
 un constructeur ayant un paramètre de type String servant à
initialiser l'attribut nom ;
 un constructeur ayant deux paramètres, un de type String et un de
type Personne, servant à initialiser les attribut nom et ami ;
 un accesseur pour l'attribut ami qui retourne la valeur de cet
attribut ;
 un modificateur pour l'attribut ami qui sert à changer la valeur de
cet attribut ;
 une méthode « public String toString() » qui retourne une
chaîne de caractères contenant le nom et, si ami vaut null, le fait
qu'il n'y a pas d'ami, ou bien le nom d’ami.
82 Mohamed Aymen CHARRADA 23/10/2023
 Exercice 5 (suite)
 Ecrire une classe « EssaiAmi » qui comporte uniquement
une méthode main ; cette méthode possède trois variables
locales de type Personne, nommée personneSeule (avec
le nom « Ali »), ami1 (avec le nom «Walid ») et ami2 (avec
le nom « Sami »); elle doit faire en sorte que ami1 soit
l'ami de ami2 et vice-versa. Le résultat d’exécution doit
être similaire à ce que suit :

83 Mohamed Aymen CHARRADA 23/10/2023


 Solution

84 Mohamed Aymen CHARRADA 23/10/2023


Accès
 Ce cours est accessible sur le lien suivant :
https://drive.google.com/drive/folders/1RL0N
DDsgGG2hdyNQv1sq8voeGAwQdv6r

85 Mohamed Aymen CHARRADA 23/10/2023


86 Mohamed Aymen CHARRADA 23/10/2023

Vous aimerez peut-être aussi