PROGRAMMATION ORIENTÉE OBJET
1ère année Génie Informatique
Semestre 2
PRÉSENTÉ PAR
M. Said TAKTAK Mme. Sihem LOUKIL
[Link]@[Link] [Link]@[Link]
2024-2025
Plan du cours
Chapitre 1 : Introduction
Chapitre 2 : Classe et Objet
Chapitre 3 : Encapsulation
Chapitre 4 : Héritage et Polymorphisme
Chapitre 5 : Les classes abstraites et le Interfaces
Chapitre 6 : Les collections
Chapitre 7 : Les exceptions
2
Chapitre 1 : INTRODUCTION
3
Les langages de programmation
Il existe de nombreux langages de programmation :
Langages impératifs et procéduraux (C, Pascal, Fortran...)
Langages logiques (Prolog...)
Langages fonctionnels (OCaml, Haskell, Erlang...)
Langages à pile (PostScript...)
Langages à objets (Java, C++, C#...)
L’exécution se fait soit par :
Interprétation (Python, PHP, JavaScript, Ruby...)
Compilation et exécution (C++, C, Pascal...)
Semi-compilation et exécution sur machine virtuelle
(Java...)
4 Saïd Taktak 25/02/2025
La programmation orientée objet (POO)
Les objectifs :
Faciliter le développement et l’évolution des applications ;
Permettre le travail en équipe ;
Augmenter la qualité des logiciels (moins de bugs).
Solutions proposées :
Découpler (séparer) les parties des projets ;
Limiter (et localiser) les modifications lors des évolutions ;
Réutiliser facilement du code.
5 Saïd Taktak 25/02/2025
La programmation orientée objet (POO)
Java
C++ : très utilisé
C# : langage de Microsoft (appartient à .NET)
Objective C : langage utilisé par Apple
PHP : langage très utilisé sur le Web
Python
Ruby
Eiffel
Ada
Smalltalk
...
6 Saïd Taktak 25/02/2025
Java c’est quoi ?
Un langage : Orienté objet fortement typé avec classes
Un environnement d’exécution (JRE) : Une machine
virtuelle et un ensemble de bibliothèques
Un environnement de développement (JDK) : Un
compilateur et un ensemble d’outils
7 Saïd Taktak 25/02/2025
Java pourquoi ?
Java est devenu aujourd’hui l’un des langages de programmation les
plus utilisés.
Il est incontournable dans plusieurs domaines :
Systèmes dynamiques : Chargement dynamique de classes
Internet : Les Applets java
Systèmes communicants : RMI, Corba, EJB, etc.
8 Saïd Taktak 25/02/2025
Java versus C++
Filiation historique :
1983 (AT&T Bell) : C++
1991 (Sun Microsystems) : Java
Java est très proche du langage C++ (et donc du langage C).
Toutefois Java est plus simple que le langage C++, car les
points "critiques" du langage C++ (ceux qui sont à l’origine des
principales erreurs) ont été supprimés.
Cela comprend :
Les pointeurs
La surcharge d’opérateurs
L’héritage multiple
9 Saïd Taktak 25/02/2025
Java versus C++
De plus,
Tout est dynamique : les instances d’une classe sont instanciées
dynamiquement.
La libération de mémoire est transparente pour l’utilisateur. Il
n’est pas nécessaire de spécifier de mécanisme de destruction.
La libération de l’espace mémoire est prise en charge un
gestionnaire appelé garbage collector chargé de détecter les
objets à détruire.
10
Java versus C++
Une fois achevée la production du logiciel, un choix doit être
fait entre fournir le source ou le binaire pour la machine du
client.
Généralement, une entreprise souhaite protéger le code
source et distribuer le code binaire.
Le code binaire doit donc être portable sur des architectures
différentes (processeur, système d’exploitation, etc.).
11
Java versus C++
À l’instar du compilateur C, le compilateur C++ produit du
code natif, i.e., qu’il produit un exécutable propre à l’environnement
de travail ou le code source est compilé.
On doit donc créer les exécutables pour chaque type
d’architecture potentielle des clients.
12
Java versus C++
En Java, le code source n’est pas traduit directement dans le
langage de l’ordinateur.
Il est d’abord traduit dans un langage appelé "bytecode",
langage d’une machine virtuelle (JVM – Java Virtual Machine)
définie par Sun.
13
Java versus C++
Le langage Java est :
« C-like » : Syntaxe familière aux programmeurs de C
Orienté objet : Tout est objet, sauf les types primitifs
(entiers, flottants, booléens, ...)
Robuste : Typage fort, pas de pointeurs, etc.
Code intermédiaire : Le compilateur ne produit que du
bytecode indépendant de l’architecture de la machine où a
été compilé le code source
14
Les versions de Java
Plusieurs versions au fil des années
Les versions avant Java SE 7 sont devenues obsolètes
Depuis 2017, Oracle décide de faire deux versions par an : une version
en Mars et une autre en Septembre
15
Caractéristiques de Java
Libre (utilisation gratuite)
01 Open-Source Contribuer à l’évolution du langage
Large communauté
Une syntaxe simple
02 Simple et facile Ressemble à du langage parlé
Pas de pointeurs
Fait abstraction des caractéristiques
03 Haut-niveau techniques du matériel
Classe = Données + Comportement
04 Orienté Objet Objet (attributs et méthodes)
05 Fortement typé Toute donnée manipulée par Java a un
type bien déterminé.
16
Caractéristiques de Java
06 Bibliothèque riche Une large bibliothèque standard qui
couvre plusieurs domaines.
Fonctionne sur les différents OS
07 Multi-Plateforme (Windows, Linux et Mac)
Même programme sur les différents
08 Portable OS comme l’exprime l’accroche
"Write Once Run Anywhere”
Le code source est compilé en bytecode,
09 Compilé i.e., code intermédiaire indépendant
de la machine
10 Interprété Le bytecode est interprété par une
machine virtuelle Java (JVM)
17
Java: un langage et une plateforme
Java est aussi une plateforme : JVM + APIs (Application
Programming Interfaces) regroupées
Trois plateformes d'exécution (ou éditions) Java sont définies
pour des cibles distinctes selon les besoins des applications à
développer :
Java Standard Edition (J2SE / Java SE) :pour développer des
applications classiques, desktop.
Java Entreprise Edition (J2EE / Java EE) : pour développer
des applications serveur, des services web, etc.
Java Mobile Edition (J2ME / Java ME) : pour développer des
applications embarquées et mobiles
18
JDK, JRE, IDE
Afin de pouvoir créer une application Java consistante, on a besoin
du JDK (Java Development Kit)
C’est un kit de développement qui représente l’outillage indispensable
au développeur Java avec plein de commandes bien utiles :
javac (compiler), java (exécuter), javadoc (générer de la documentation)
Pour tester et lancer le code écrit, on doit, nécessairement, disposer
du JRE (Java Runtime Environment)
C’est l’environnement qui permet l’exécution des applications Java. Il
comporte une JVM en particulier
Pour faciliter le développement des applications Java, on utilise
généralement un IDE (Integrated Development Environment)
Un software qui regroupe un ensemble d’outils (éditeur de texte,
compilateur, débogueur, …) pour le développement de logiciels.
19
IDE (Integrated Development Environment)
20
Mon premier programme en Java
Le programme [Link]
Compilation et exécution
>javac [Link]
>java HelloWorld
>HelloWorld !
21 Saïd Taktak 25/02/2025
Mon premier programme en Java
Le programme [Link]
Compilation et exécution
>javac [Link]
>java HelloWorld
>HelloWorld !
22 Saïd Taktak 25/02/2025
Commentaires et documentation en Java
Les commentaires ne sont pas pris en compte par le compilateur
Commentaires d’une seule ligne
// Ceci est un commentaire d’une ligne
Commentaires sur plusieurs lignes
/* Ceci est un long commentaire qui
s’étale sur plusieurs lignes... */
Commentaires de type documentation automatique (avec javadoc)
Java exige que ces commentaires figurent avant la définition de la classe,
d'un membre de la classe ou d'un constructeur.
/**
* commentaire de la méthode
* @param val la valeur à traiter
* @return la valeur de retour
23 …*/
Instructions, Variables et expressions
24
Les Variables
25
Les Types Primitifs
26
Les Opérateurs
27
Incrémentation et affectation
28
Les instructions conditionnelles if
29
Les instructions conditionnelles switch
30
Les instructions conditionnelles switch
Un switch ne fonctionne qu’avec les types de données suivants :
Les entiers (byte, short et int)
Les caractères (char)
Les chaînes de caractères (String)
Les énumérations (enum)
La clause case doit prendre des valeurs claires au moment de la
compilation:
Des littéraux: 2, 'A‘, "Bonjour",…
Des constantes
Des valeurs d’une énumération
pas de variables ni d’appelle de méthodes
31
Les instructions conditionnelles switch
public enum FeuTricolore {
VERT, ORANGE, ROUGE
}
FeuTricolore feu;
switch (feu) {
case ROUGE: [Link]("arreter");
break;
case VERT: [Link]("passer");
break;
case ORANGE:[Link]("ralentir");
break;
}
32
Les boucles while et do/while
33
Les boucles for
34
Les boucles for
A partir de Java 1.5, une forme améliorée de la boucle for a
été introduite pour faciliter le parcours d’une collection
d’éléments.
La syntaxe for (type compteur : collection)
{
instructions
}
Exemple
int [ ] tableau = {0,1,2,3,4,5,6,7,8,9};
for (int elt : tableau)
[Link](elt);
35
Chapitre 2 : CLASSES & OBJETS
36
Classe et Objet Java
Une classe est un modèle de définition des objets
Ayant la même structure
Ayant le même comportement
Une classe définit un nouveau type
Une classe est composée de deux parties :
Les attributs : des propriétés qui décrivent l’« état » de l’objet
Les méthodes : un ensemble de fonctions ou méthodes qui décrivent
son « comportement »
Le processus de création d’un objet à partir d’une classe est appelé
instanciation (objet = instance)
Une classe permet d’instancier (créer) plusieurs objets
Chaque objet est une instance d’une classe et une seule
37
Classe et Objet Java
Par exemple, pour une application d’une agence de location de
voiture, chaque voiture est caractérisée par :
un identifiant : matricule
une couleur: noir, vert, bleu, rouge
une marque : Seat, VolksWagen, Renault, Toyota
un prix de location / jour
nombre de jours de location
…
Il est possible de :
augmenter ou de diminuer le nombre de jours de location
calculer le prix total de location
…
38
Classe : Notations
Nom de la classe Voiture
- matricule : String
- marque : String
Attributs - couleur : String
- prixParJour : double
- nbJoursLocation : int
+ augmenterNbJours(int jours) : void
Méthodes + diminuerNbJours(int jours) : void
+ calculerPrixTotal() : double
39
Déclaration d’une classe
Syntaxe
[public] class NomClasse {
/*déclaration des attributs*/
/*déclaration de méthodes*/
}
En Java une classe se declare par le mot-clé class
Le mot-clé public indique que d’autres classes peuvent
utiliser cette classe.
40
Déclaration des attributs
Syntaxe type nom_attribut [=value];
Un attribut est une variable « globale » de la classe : déclaré en dehors des
méthode
Il peut être de type primitif ou de type objet.
En Java, on n'est pas obligé d'initialiser les attributs. Ils ont une valeur par
défaut selon le type de l’attribut:
0 pour les numériques
'\u0000' pour les caractères
false pour les booléens
null pour les objets.
41
Déclaration des méthodes
Syntaxe
typeRetour nomMethode ([arguments]) {
// déclaration des variables locales;
// instructions de la méthode
[return var_résultat;]
}
arguments : liste de paramètres typés et nommés séparés par
des virgules, cette liste peut être vide.
Syntaxe : (type1 arg1, type2 arg2, . . . )
42
Style de nommage (très fortement conseillé)
Classe :
Commence par un Majuscule, puis majuscule à chaque nouveau mot
Exemple : class PremierProgramme
Variable/Attribut
Commence par une minuscule, puis majuscule à chaque nouveau mot
Exemple : int largeurCercle;
Constante
Les constantes sont en majuscules
les mots sont séparés par le caractère souligné «_»
Exemple : final int LARGEUR_MAXIMALE = 50 ;
Méthode
verbe à l'infinitif (suivi éventuellement d'un complément)
Commence par une minuscule, puis majuscule à chaque nouveau mot
Exemple : void decalerAGauche();
43
Exemple de classe en Java
Voiture
- matricule : String
- marque : String
- couleur : String
- prixParJour : double
- nbJoursLocation : int
+ augmenterNbJours(int jours) : void
+ diminuerNbJours(int jours) : void
+ calculerPrixTotal() : double
44
Où déclarer les classes?
Déclaration de chaque classe dans un fichier séparé (.java)
C'est le cas le plus courant : chaque classe est définie dans un
fichier du même nom.
Déclaration de plusieurs classes dans un même fichier (⚠ Une
seule peut être public)
Si une classe n'est pas public, elle peut être déclarée dans le
même fichier qu'une autre classe public.
45
Objet : Définition
On définit l’objet comme l’instance d’une classe :
La classe représente pour l’objet ce que représente le type pour la
variable. (l’objet se conforme à la description fourni par la classe)
admet un état qui constitue l’ensemble des valeurs des attributs
de cet objet
un comportement qui est défini à travers les méthodes définies
par la classe.
Tout objet est identifié et manipulé par sa référence:
une adresse en mémoire (utilisation de pointeur caché)
46
Classe et Objet Java
Voiture
- matricule : String
- marque : String
- couleur : String
- prixParJour : double
- nbJoursLocation : int
+ augmenterNbJours(int jours) : void
+ diminuerNbJours(int jours) : void
+ calculerPrixTotal() : double
instanciation
matricule : 134Tunisie1999
marque : Fiat matricule : 157Tunisie1897
couleur : Mauve marque : Mercedes
prixParJour: 100.0 couleur : Gris
nbJoursLocation : 14 prixParJour: 200.0
47 nbJoursLocation : 10
Instanciation des objets
Déclaration d’une variable maVoiture de type Voiture
public class Main {
public static void main(String[] args) {
Voiture maVoiture; maVoiture
null
}
}
maVoiture contient une référence mémoire
La référence qui ne pointe sur aucun objet contient la valeur
null.
48
Instanciation des objets
Création et allocation mémoire
en utilisant l’opérateur new et appelle de méthode particulière
(constructeur)
allouer l'espace mémoire nécessaire pour stocker les attributs de l'objet
(l’objet a une adresse de son emplacement : 0x065007)
public class Main {
public static void main(String[] args) { maVoiture matricule
Voiture maVoiture; couleur
maVoiture= new Voiture(); marque
prixPar Jour
} nbJoursLocation
}
Lier l’objet crée et la variable maVoiture
maVoiture est la référence de l’objet créé
49
Le constructeur
La création d'un objet à l'aide de l'opérateur new se charge de faire
appel à une méthode particulière appelée le constructeur.
Un constructeur est appelée automatiquement une seule fois par objet
et ce au moment de sa création afin d'initialiser ses attributs.
Le constructeur porte le même nom que le nom de la classe.
Le constructeur ne possède pas de type de retour (même pas void).
Toute classe possède au moins un constructeur. Si le programmeur ne
l'écrit pas, il en existe un par défaut, sans paramètres, de code vide
(constructeur implicite)
Pour une même classe, il peut y avoir plusieurs constructeurs, de
signatures différentes.
50
Le constructeur
La constructeur par défaut de la classe «Voiture » initialise:
« matricule », « couleur » et « marque » à null
« prixParJour » à 0.0
« nbJoursLocation » à 0
public class Main {
public static void main(String[] args) { maVoiture matricule null
Voiture maVoiture; couleur null
maVoiture= new Voiture(); marque null
prixPar Jour 0.0
} nbJoursLocation 0
}
51
Le constructeur
L'appel de ces constructeurs est réalisé avec le new auquel on
fait passer les paramètres.
Déclenchement du "bon" constructeur
Il se fait en fonction des paramètres passés lors de l'appel
(nombre et types).
Attention
Si un constructeur est créé (même si un constructeur avec
paramètres), le constructeur par défaut n'est plus disponible.
On ne peut pas créer deux constructeurs ayant le même nombre
et types des arguments d’entrée.
52
Le constructeur
class Voiture {
// Attributs
String matricule;
String couleur;
String marque;
double prixParJour; Redéfinition d’un constructeur
int nbJoursLocation; par défaut
//constructeurs Voiture v1 = new Voiture();
public Voiture() {}
public Voiture(double prix, int jours) {
prixParJour = prix;
nbJoursLocation = jours;
Définition d’un
}
constructeur paramétré
// Méthodes Voiture v2 = new Voiture(100, 7);
//....
}
53
Accès aux attributs
On peut accéder aux attributs de l’objet en utilisant une
notation pointée via la référence
[Link]
public class Main {
public static void main(String[] args) {
Voiture maVoiture; maVoiture matricule null
maVoiture= new Voiture(); couleur null
marque Toyota
// Accès aux attributs en écriture prixPar Jour 0,0
[Link]="Toyota"; nbJoursLocation 0
// Accès aux attributs en lecture
[Link]([Link]);
}
}
54
Appel de méthodes
Pour « demander » à un objet d’effectuer un traitement, il faut lui
envoyer un message
Un message est composé de trois parties
Une référence permettant de désigner l’objet à qui le message est
envoyé
Le nom de la méthode
Les éventuels paramètres de la méthode
[Link](« paramètres éventuels »)
Envoi de message similaire à un appel de fonction
Le code défini dans la méthode est exécuté
Le contrôle est retourné au programme appelant
55
Appel de méthodes
public class Main {
public static void main(String[] args) {
Voiture maVoiture;
maVoiture= new Voiture();
// Accès aux attributs en écriture
[Link]="Toyota";
// Accès aux attributs en lecture
[Link]([Link]);
double prix= [Link]();
}
}
Envoi d’un message à l’objet
56 maVoiture
Passage des paramètres
Un paramètre d’une méthode peut être
Une variable de type simple
Une référence d’un objet typée par n’importe quelle classe
Les types primitifs
Leur valeur est recopiée
Leur modification dans la méthode n’entraine pas celle de
l’original
Les objets
Leur référence est recopiée et non pas les attributs
Leur modification dans la méthode entraine celle de l’original !!!
57
Passage des paramètres : type primitif
Dans le cas des types primitifs, c'est la valeur de l'argument
qui est recopiée dans le paramètre de la méthode
Les modifications sur le paramètre de la méthode sont sans
effet sur l'argument
58
Passage des paramètres : type objet
Dans le cas des types « objet », c'est la référence de
l’argument qui est transmise à la méthode
Les modifications effectuées en suivant cette référence (e.g.
modification d'un champ de l'objet) sont répercutés dans la
mémoire et sont donc visibles sur l'argument
59
L’objet courant : le mot clé « this »
Le mot clé this, représente une référence de l’objet en cours
d’utilisation dans une méthode.
this est un objet qui est égale à l’instance de l’objet dans lequel
il est utilisé.
Il peut être utilisé pour rendre explicite l'accès aux propres
attributs et méthodes définies dans la classe
Il peut être utile :
Pour enlever les ambiguïtés lorsqu’une variable locale ou un
paramètre d’une méthode porte le même nom qu’un attribut.
lorsqu’on veut invoquer ou lancer le constructeur de classe actuel
pour faire passer une référence de l’objet en cours en argument
dans l'appel de méthode ou d’un constructeur
pour renvoyer l'instance de classe actuelle
60
L’objet courant : le mot clé « this »
Exemple
dans le cas où un attribut est masqué
(par un paramètre ou une variable
locale) this doit être explicitement
utilisé pour lever les ambiguïtés
serait sans effet sur l'objet
61
L’opérateur « instanceof »
L’opérateur instanceof permet de tester si l'objet référencé est
une instance d'une classe donnée
il retourne true si c’est le cas et false sinon.
Il est généralement utilisée dans une condition if.
Exemple:
public static void main(String[] args) {
Voiture voit= new Voiture(100,7);
if(voit instanceof Voiture)
[Link](“C’est une voiture”);
else
[Link](“Ce n’est pas une voiture”);
}
62
Affectation et comparaison d’objets
Affecter un objet
« a=b » signifie a devient identique à b
Les deux objets a et b pointent vers la même adresse mémoire et
toute modification de a entraine celle de b.
Comparer deux objets
« a==b » compare les références
Si deux variables v1 et v2 pointent vers le même objet, v1==v2
retourne true, et false sinon.
63
Affectation et comparaison d’objets
Exemple de la classe Voiture
public static void main(String[] args) {
Voiture voit= new Voiture(100, 7);
Voiture v1=voit;
Voiture v2= new Voiture(100 , 7);
if(voit==v1){. . . }; //true
if(voit==v2){. . . }; //false
}
64
Gestion des objets
Afficher son type et son emplacement mémoire : [Link]()
[Link](maVoiture) //Voiture@119c082
Récupérer son type : méthode « Class getClass() »
[Link](); //Retourne un objet de type Class
Class classVoiture = [Link]();
Tester son type : opérateur « instanceof » ou mot-clé « class »
if (maVoiture instanceof Voiture){…} //C’est vrai
ou
if ([Link]()==[Link]){…} //C’est vrai également
65
Chapitre 2 : ENCAPSULATION
66
Notion de package
Package = répertoire
Les classes Java peuvent être regroupées dans des packages
67
Notion de package
Les packages sont organisés d’une manière hiérarchique
Un package peut contenir des classes, sous-packages, des sous-sous-
packages, ...
Exemple :
le package java contient les sous-packages « util », « lang » et « awt »
Le sous-package « awt » contient le sous-sous package « color »
68
Utilisation des classes d’un package
Déclaration d’un package
package package2;
Utilisation d’un package
Nom du package suivi de nom de la classe
[Link] now = new [Link]() ;
[Link] (now) ;
Import de la classe du package
import [Link] ;
...
Date now = new Date(); [Link] (now) ;
Import de tout le package
import [Link].*;
...
Date now = new Date() ; [Link] (now) ;
69
Remarques
Si l’on veut utiliser deux classes portant le même nom et
définies dans deux packages différents, on doit obligatoirement
utiliser la première méthode.
L’instruction : import package1.* ;
ne concerne que les classes du paquetage package1. Si, par
exemple, vous avez créé un sous-paquetage nommé
package1.package11, ses classes ne seront nullement concernées.
Le package [Link] est automatiquement importé par le
compilateur. Ceci vous permet d’utiliser des classes standard
telles que Math, System ou String sans import.
70
Problème sans encapsulation
Considérons la classe Personne suivante
public class Personne {
String nom;
int age;
//...
}
📌 Ici, les attributs nom et age sont accessibles et modifiables directement, en
dehors de la classe Personne ce qui peut poser des problèmes d'intégrité des
données.
public class TestPersonne {
public static void main(String[] args) {
Personne p = new Personne();
[Link]= -5;
}
} Cela peut entraîner des erreurs et
une incohérence des données.
71
Solution : Encapsulation
L'encapsulation en Java est l’un des principes fondamentaux de la
programmation orientée objet (POO) en Java
Elle repose sur l’idée de cacher les détails internes d’un objet
et de ne permettre l’accès à ses données qu’à travers des méthodes
spécifiques.
L’encapsulation offre plusieurs avantages :
Sécurité : Les données sensibles ne peuvent pas être modifiées
n’importe comment.
Contrôle : On peut imposer des règles sur les modifications des
attributs (comme empêcher un dépôt négatif).
Facilité de maintenance : Si on veut changer la manière dont une
valeur est stockée, on n’a pas besoin de modifier tout le programme,
seulement les getters et setters.
72
Encapsulation et modificateurs d’accès
L'encapsulation repose sur plusieurs niveaux d'accès, définis par les
modificateurs d’accès. Ces niveaux déterminent qui peut accéder aux
attributs et méthodes d'une classe:
private (le plus restrictif) : L'attribut ou la méthode est accessible uniquement
dans la même classe.
default (ou package-private, si aucun modificateur n’est précisé) :
L’attribut ou la méthode est accessible dans la même classe et dans les
classes du même package.
protected : L’attribut ou la méthode est accessible dans la même classe,
dans les classes du même package, et dans les sous-classes même si
elles sont dans un autre package.
public (le moins restrictif) : L’attribut ou la méthode est accessible de partout.
73
Encapsulation et modificateurs d’accès
En Java, il y a quatre niveaux d'encapsulation basés sur les
modificateurs d'accès :
On peut parler d’encapsulation à différents niveaux en Java :
Encapsulation de classes
Encapsulation des méthodes
Encapsulation des attributs (la plus courante)
74
Encapsulation des classes
75 Saïd Taktak 25/02/2025
Encapsulation des classes
76 Saïd Taktak 25/02/2025
Encapsulation des classes
77 Saïd Taktak 25/02/2025
Encapsulation des attributs
78 Saïd Taktak 25/02/2025
Encapsulation des attributs
79 Saïd Taktak 25/02/2025
Encapsulation des attributs
80 Saïd Taktak 25/02/2025
Encapsulation des attributs
81 Saïd Taktak 25/02/2025
Encapsulation des méthodes
82 Saïd Taktak 25/02/2025
Encapsulation des méthodes
83 Saïd Taktak 25/02/2025
Encapsulation des méthodes
84 Saïd Taktak 25/02/2025
Encapsulation des méthodes
85 Saïd Taktak 25/02/2025
Encapsulation des attributs : Comment ça
marche en Java ?
Protéger les données : on marque les attributs d’une classe comme private
pour empêcher un accès direct.
Fournir des méthodes d’accès publiques : ce sont des méthodes publiques
appelés des accesseurs (getters) et des mutateurs (setters), qui sont utilisées
respectivement pour lire et modifier les valeurs des attributs.
public class Personne {
private String nom;
private int age;
public String getNom() {
return nom; public class TestPersonne{
} public static void main(String[] args){
public void setNom(String nom){ Personne p = new Personne();
[Link] = nom; [Link]("Ali");
} [Link](30);
public int getAge() { [Link]("Nom: " + [Link]());
return age; [Link]("Age: " + [Link]());
} }
public void setAge(int age) { }
if (age>0)
[Link] = age;
}
86
}
Encapsulation : Les bonnes pratiques
Bonnes pratiques Mauvaises pratiques
Déclarer les attributs en private Déclarer les attributs public, ce qui casse
l'encapsulation
Utiliser des getters et setters pour un Permettre une modification directe des
accès contrôlé données sensibles
Cacher les méthodes utilitaires en Rendre publiques des méthodes qui ne
private devraient pas être utilisées ailleurs
Ajouter final pour les attributs constants Modifier accidentellement un attribut qui
devrait être immuable
Restreindre l'accès aux classes si Laisser toutes les classes accessibles
nécessaire librement
87
Attribut d’instance
Dans l’exemple de la classe Voiture, chaque objet de type Voiture
possède ses propres attributs marque, couleur, prixParJour,etc.
Ces attributs sont appelés des attributs d’instance
Un attribut d’instance est spécifique à chaque instance
Si on modifie un attribut d’instance il sera modifié seulement
pour l’objet actuel
Les attributs d’instance sont référencés :
simplement par leur nom, au sein des méthodes de la classe
notation pointée via une instance
88
Attribut de classe
Les objets d’une même classe peuvent partager un même attribut.
Par exemple, le nombre de voitures crées pour la classe Voiture, le
nombre de roues pour une voiture, etc.
Cet attribut s’appelle attribut statique ou attribut de classe
Un attribut de classe est déclaré avec le mot clé static
Il peut avoir une valeur même si aucun objet n’existe (il appartient
à la classe pas à une instance particulière)
Si on modifie un attribut de classe, il sera modifié pour toutes les
instances.
Les attributs de classe sont référencés :
simplement par leur nom, au sein des méthodes de la classe
notation pointée via la classe
notation pointée via une instance, mais ce n'est pas recommandé
89
Attribut de classe : Exemple
public class Voiture {
// Attributs d’instance - Attribut qui comptabilise le nombre
String matricule; d’objets crées de type Voiture.
String couleur;
String marque; - L’initialisation de cet attribut se fait
double prixParJour; une seule fois
int nbJoursLocation;
// Attribut de classe
static int nbVoitures;
public Voiture(double prixParJour, int nbJoursLocation) {
[Link] = prixParJour;
[Link] = nbJoursLocation;
nbVoitures++;
}
//.... Incrémente le nombre de voitures chaque
} fois qu'un objet de type Voiture est créé.
90
Attribut de classe : Exemple
public class Main {
public static void main(String[] args) {
// Affichage du nombre de voitures via la classe
[Link]("Nombre de voitures créés : " +
[Link]); //affiche 0
Voiture v1= new Voiture(100 , 7);
Voiture v2= new Voiture(150 , 10);
[Link]("Nombre de voitures créés : " +
[Link]);// affiche 2
}
}
91
Attribut d’instance VS. Attribut de classe
Attribut d’instance Attribut de classe
Appartient à chaque objet Appartient à la classe
Indépendant pour chaque objet Partagé entre toutes les instances
Nécessite un objet pour être Accessible sans créer d’objet
utilisé
Cas d'utilisation courants de l’attribut de classe:
• Compter le nombre d'instances créées (compteur).
• Stocker des constantes (public static final).
• Partager une ressource commune, comme une connexion à une base de
données.
92
Méthode de classe
Comme un attribut statique, une méthode peut être déclarée
statique
Elle s’appelle méthode statique ou méthode de classe
Un méthode de classe est déclaré avec le mot clé static
Elle peut être invoquée même si aucun objet n’existe (elle
appartient à la classe pas à une instance particulière)
Les méthodes de classe sont référencés :
simplement par leur nom, au sein des méthodes de la classe
notation pointée via la classe
notation pointée via une instance, mais ce n'est pas recommandé
93
Méthode d’instance VS. Méthode de classe
Méthode d’instance Méthode de classe
Appartient à un objet Appartient à la classe
S’appelle via [Link]() S’appelle via [Link]()
Peut utiliser this Ne peut pas utiliser this
Peut accéder à tout Ne peut pas accéder aux
attributs/méthodes d’instance
Cas d'utilisation courants de l’attribut de classe:
• Méthodes utilitaires (ex: [Link](), [Link]())
• Gestion de ressources globales (ex: connexion DB partagée)
94
Les tableaux
Les tableaux permettent de stocker un ensemble fini d'éléments
d'un type particulier (un type primitif ou un type objet).
Java permet de placer les crochets sur le type ou sur le nom de
la variable dans la déclaration :
int ti [ ]; // ti est un tableau de int
char[ ] tc; // tc est un tableau de char
La déclaration d'un tableau ne fait qu'associer son identificateur
à une variable de nature référence initialisée à null
int ti[ ]; // déclaration
L'allocation de la mémoire se fait en utilisant l'opérateur new,
tout en précisant le nombre maximum d'éléments que peut
contenir le tableau.
int ti[ ] = new int [10]; // ti est un tableau de 10 entiers int
95
Les tableaux
Chaque élément du tableau est initialisé selon son type par
l'instruction new : 0 pour les numériques, '\0' pour les
caractères, false pour les booléens et null pour les chaînes de
caractères et les autres objets.
Une fois le tableau est déclaré et crée (instancié), nous pouvons
accéder ses éléments via les indices. Les éléments d’un tableau
sont indicés à partir de 0.
ti [0] = 5 ;// premier élément du tableau ti
ti [9] = 3 ;// dernier élément du tableau ti
Un tableau possède un attribut length qui permet de connaître
le nombre d’éléments d’un tableau :
96
[Link] vaut 10
Les tableaux
Exemple
int[] tab = new int[5]; //déclaration et instanciation du tableau
tab[0]= 10; //initialiser le premier élément
tab[1]= 20; //initialiser le deuxième élément
tab[2]= 30;
tab[3]= 40;
tab[4]= 50;
int[] tab = {10,20,30,40,50}; //déclaration + initialisation
97
Les tableaux
Un tableau contenant des éléments de type primitif
Un tableau contenant des éléments de type objet
98
Les tableaux
Accès et modification des éléments d’un tableau
[Link]("Valeur du troisième élément : " + tab[2]); // Affiche 5
tab[2] = 8; // On modifie la valeur du troisième élément
Parcours d’un tableau
int [] tab = new int [5];
tab[0]=1;
tab[1]=2;
tab[2]=5;
tab[3]=4;
tab[4]=7;
int s=0;
for (int i=0;i<[Link];i++)
s+=tab[i];
[Link]("la somme des éléments du tableau est " + s);
99
Les matrices
Une matrice est simplement un tableau de tableaux. Elle est utilisée
pour représenter des données structurées en lignes et colonnes, comme
une image, une matrice mathématique, etc.
int[][] matrice = new int[3][3]; // Matrice 3x3 initialisée à 0
int[][] matrice = {{1, 2, 3},
ou bien {4, 5, 6},
{7, 8, 9}
};
Avec une matrice, l’attribut length s’utilise de deux façons :
[Link] : donne le nombre de lignes.
matrice[i].length : donne le nombre de colonnes dans la ligne i.
[Link]("Nombre de lignes : " + [Link]); // 3
[Link]("Nombre de colonnes dans la première ligne : "
+ matrice[0].length); // 3
100
Les matrices
Accès et modification des éléments d’une matrice
[Link]("Élément ligne 2, colonne 3 : "
+ matrice[1][2]); // Affiche 6
matrice[1][2] = 10; // Modifier un élément
Parcours d’une matrice
for (int i = 0; i < [Link]; i++) {//Parcourir les lignes
for (int j = 0; j < matrice[i].length; j++) {//Parcourir les colonnes
[Link](matrice[i][j] + " ");
}
[Link]();
}
101