0% ont trouvé ce document utile (0 vote)
3 vues101 pages

Poo 24 25

Le document présente un cours de programmation orientée objet pour la première année en génie informatique, couvrant des concepts clés tels que les classes, objets, encapsulation, héritage, polymorphisme, et exceptions. Il met en avant le langage Java, ses caractéristiques, et les différences avec C++, ainsi que les outils nécessaires pour le développement Java comme le JDK et le JRE. Le cours inclut également des exemples pratiques et des instructions sur la syntaxe et la structure des programmes Java.

Transféré par

rekikemna01
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues101 pages

Poo 24 25

Le document présente un cours de programmation orientée objet pour la première année en génie informatique, couvrant des concepts clés tels que les classes, objets, encapsulation, héritage, polymorphisme, et exceptions. Il met en avant le langage Java, ses caractéristiques, et les différences avec C++, ainsi que les outils nécessaires pour le développement Java comme le JDK et le JRE. Le cours inclut également des exemples pratiques et des instructions sur la syntaxe et la structure des programmes Java.

Transféré par

rekikemna01
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi