Université Abdelmalek Essaadi
Faculté des Sciences et Techniques d’Al-Hoceima
Département de Mathématiques et Informatique
Filière : LST-MI – S6
Chapitre 3 : Encapsulation en Java
Langage Java FSTH
Plan :
Structure d’un programme Java
Encapsulation
Structure des classes (getters et setters)
Packages en Java
Attributs et méthodes de classe (attributs et
méthodes statiques)
Langage Java 2 FSTH
Structure d’un programme Java
Structure d’un programme Java
Méthode principale et classe exécutable
Un programme écrit en Java est constitué d’un ensemble de classes représentant
les objets manipulés et les traitements associés.
L’exécution d’un programme Java commence par l’exécution de la classe qui
implémente la méthode principale main() :
public static void main(String[] args) ;
La classe implémentant la méthode main() est appelée classe exécutable ou
classe principale.
Exemple :
Langage Java 4 FSTH
Structure d’un programme Java
Fonction main()
Syntaxe :
public static void main(String[] args) ;
🞑 static : mot clé permettant d'appeler la fonction sans avoir besoin
d'instancier la classe (main est une méthode de classe).
🞑 args : tableau de chaînes de caractères (string) qui contient des valeurs
précisées à l’exécution du programme s’il est exécuté par ligne de commande.
Exemple :
Si la classe « HelloWorld » avait été exécutée par la ligne de commande : java
HelloWorld 17 mars 2018
Le tableau args contiendra 3
éléments dont les valeurs sont
“17”, “mars” et “2018”.
Langage Java 5 FSTH
Structure d’un programme Java
Classe exécutable
En général, un programme Java contient plusieurs classes.
La classe exécutable ne sert souvent qu’à instancier les objets.
Exemple : La classe exécutable RectangleMain crée un objet de la classe
Rectangle et affiche sa surface :
Langage Java 6 FSTH
Structure d’un programme Java
Remarques
Il est préférable d’implémenter chaque classe publique dans un fichier séparé.
Il est indispensable que ce fichier ait le même nom que celui de la classe.
🞑 Exemple : Dans l’exemple précédent, deux fichiers doivent être créés :
[Link]
[Link]
Langage Java 7 FSTH
Encapsulation
Concepts fondamentaux de la POO
Encapsulation
L‘Encapsulation est le processus de combinaison de données et de fonctions
dans une seule unité.
C’est est un mécanisme consistant à :
🞑 1) rassembler (encapsuler) les données et les méthodes au sein d'une
structure. L'objectif étant de rendre la classe autonome.
Encapsulation
🞑 2) empêcher l'accès aux attributs et aux méthodes : les rendre inaccessibles
au code extérieur (les masquer).
L’encapsulation cherche à protéger les données d’un objet.
Langage Java 4 FSTH
Concepts fondamentaux de la POO
Encapsulation
L’encapsulation interdise l’accès direct aux membres de l’objet.
On ne dialoguera avec l’objet qu’à travers une interface définissant les
services accessibles => encapsulation des membres.
Monde extérieur Objet
L'encapsulation permet donc de garantir l'intégrité des données contenues dans
l'objet.
Langage Java 10 FSTH
Concepts fondamentaux de la POO
Encapsulation
En Java, l’encapsulation précise 3 modes de visibilité des membres (attributs et
méthodes) d’un objet :
🞑 public : les membres sont accessibles par l’objet lui même ou par n’importe
quel autre objet. Il s’agit du niveau le plus bas de protection.
🞑 private : les membres de l’objet sont inaccessibles à partir d’autres objets
🞑 protected : l'accès aux membres est réservé aux fonctions membres de
la classe elle-même ainsi qu’aux classes dérivées (sous-classes).
Langage Java 11 FSTH
Concepts fondamentaux de la POO
Encapsulation
Lorsqu’aucun mode d’accès n’est spécifié, on dit que ce membre a l'accessibilité par
défaut. les membres sont accessibles par l’objet lui même ou par un autre objet
dans même package.
Langage Java 12 FSTH
Concepts fondamentaux de la POO
Encapsulation
• Public
class Personne {
public int age;
}
public class Test {
public static void main(String[] args) {
Personne p = new Personne();
[Link] = -10; // accès libre
[Link]([Link]);
}
}
Concepts fondamentaux de la POO
Encapsulation
• Private
class Personne {
Dans main:
private int age;
Personne p = new Personne();
[Link](-10); // refusé par la condition
public void setAge(int a) {
[Link]([Link]());
if (a >= 0) age = a;
}
public int getAge() {
return age;
}
}
Concepts fondamentaux de la POO
Encapsulation
• Protected
class Personne {
protected int age;
}
public class Test extends Personne {
public static void main(String[] args) {
Test t = new Test();
// Comme Test hérite de Personne, il a accès à 'age'
[Link] = 25;
[Link]("L'âge est : " + [Link]);
}
}
Concepts fondamentaux de la POO
Encapsulation
Exemple 1: Accès pour modification d’un attribut depuis l’extérieur (modification du
contenu d’un attribut) :
Langage Java 16 FSTH
Concepts fondamentaux de la POO
Encapsulation
Exemple 2 : Accès pour consultation d’un attribut depuis l’extérieur (affichage du
contenu d’un attribut) :
Langage Java 17 FSTH
Structure des classes Java
Structure des classes Java
Getters et setters
Une classe java est composée de données et de méthodes. En général, les
données de la classe sont déclarés privés.
Pour donner accès à un attribut privé depuis l'extérieur de la classe, on peut soit :
🞑 mettre le champ public => accès libre par n'importe qui.
🞑 conserver le champ privé, et définir des méthodes publiques :
getNomAttribut : pour récupérer la valeur de l’attribut getters.
setNomAttribut : pour de modifier la valeur de l’attribut setters.
Langage Java 19 FSTH
Structure des classes Java
Getters et setters
Getters (accesseurs) :
🞑 Ce sont des méthodes permettant de retourner les valeurs des attributs de la
classe.
🞑 Le nom de la méthode doit commencer par « get» suivi par le nom de
l’attribut : getNomAttribut.
🞑 Les getters retournent la valeur de l’attribut.
🞑 Les getters ne doivent avoir aucun paramètre.
Langage Java 20 FSTH
Structure des classes Java
Getters et setters
Setters (mutateurs) :
🞑 Ce sont des les méthodes permettant de modifier les attributs de la classe.
🞑 Le nom de la méthode doit commencer par « set » suivi par le nom de
l’attribut : setNomAttribut.
🞑 Les setters ne retournent aucune valeur.
🞑 Les setters doivent avoir en paramètre une variable du type de l’attribut qui
contiendra sa nouvelle valeur.
Langage Java 21 FSTH
Structure des classes Java
Getters et setters
Exemple :
Une classe Point contenant 2 attributs privés (x et y), des getters ainsi que des
setters :
Langage Java 22 FSTH
Structure des classes Java
Getters et setters
Créer une classe Voiture contenant : un attribut marque (String),
un attribut annee (int)
Travail demandé :
1- Mettre les attributs en private
2- Créer :
• un getter pour chaque attribut
• un setter pour chaque attribut
3- Dans main :
créer une voiture
• lui donner la marque Toyota
• lui donner l’année 2022
• afficher ses informations
Structure des classes Java
Getters et setters
Classe voiture: Classe principale:
class Voiture { public class TestVoiture {
private String marque; public static void main(String[] args) {
private int annee;
public String getMarque() { Voiture v = new Voiture();
return marque;
} [Link]("Toyota");
public void setMarque(String m) { [Link](2022);
marque = m;
} [Link]("Marque : " +
public int getAnnee() { [Link]());
return annee; [Link]("Annee : " +
} [Link]());
public void setAnnee(int a) { }
annee = a; }
}
}
Packages en Java
Packages en Java
Package
Java définit un ensemble de classes utilisables par un grand nombre
d’applications
Toutes ces classes sont organisées en packages (ou bibliothèques) dédiés
à un thème précis.
Un package est une unité (un fichier) regroupant des classes.
Parmi les packages les plus utilisés, on peut citer les suivants :
Langage Java 26 FSTH
Packages en Java
Package
Pour accéder à une classe d’un package donné, il faut préalablement
importer cette classe ou son package.
Exemple :
🞑 La classe Date appartenant au package [Link] qui implémente un ensemble
de méthodes de traitement sur une date peut être importée de deux
manières :
Importer une seule classe du package :
import [Link];
Importer toutes les classes du package (même les classes non utilisées) :
import [Link].* ;
Langage Java 27 FSTH
Attributs et méthodes de classe
(statiques)
Attributs et méthodes de classe
Variables de classe
Dans certains cas, il est plus judicieux d’attacher une variable
à une classe plutôt qu’aux objets instanciant cette classe.
Une telle variable est appelée variable de classe.
Les variables de classe sont communs à tous les objets de la classe=> si on
modifie la variable dans une instance de la classe, elle le sera dans toutes les
instances.
L’intérêt d’une variable de classe est qu’elle peut être utilisée (modifiée, affichée,
..) sans avoir besoin d'instancier la classe (créer un nouveau objet).
Pour déclarer une variable comme variable de classe, on utilise le mot-clé static
qui doit être précisé avant le type de la variable :
static int noteMax= 20;
Langage Java 29 FSTH
Attributs et méthodes de classe
Variables de classe
Exemple : La classe Etudiant contient la variable de classe nbrEtudiants
permettant de calculer le nombre d’étudiants crées (c’est un compteur du
nombre d’objets instanciés).
// nbrEtudiants=1
// nbrEtudiants =2
// nbrEtudiants =3
Langage Java 30 FSTH
Attributs et méthodes de classe
Variables de classe
Exemple 1 : Sans utiliser static
Id :1
Id :1
Langage Java 31 FSTH
Attributs et méthodes de classe
Variables de classe
Exemple 2 : Avec utiliser static
Id :1
Id :2
FSTH
Langage Java 32 FSTH
Attributs et méthodes de classe
Méthodes de classe
De la même manière que les variables de classe, il existe des méthodes de classe
qui sont associées directement à une classe.
On peut appeler une fonction de classe sans avoir besoin d'instancier la classe.
Pour déclarer une méthode de classe, on utilise le mot-clé static qui doit être
précisé avant le type de retour de la méthode.
Les méthodes de classes statiques sont des méthodes qui existent
indépendamment de tout objet.
Langage Java 33 FSTH
Attributs et méthodes de classe
Exemple
Langage Java 34 FSTH
Attributs et méthodes de classe
Méthodes de classe
Résume
Type de méthode Comment appeler
static [Link]()
normale [Link]()
Attributs et méthodes de classe
Exemple
Les méthodes de classe statiques ne peuvent pas utiliser ( ou appeler
directement ) les variables d’instances (attributs non statiques) ni this.
Langage Java 36 FSTH
Attributs et méthodes de classe
Exemple
Langage Java 37 FSTH
Attributs et méthodes de classe
Exemple
Langage Java 38 FSTH
Attributs et méthodes de classe
Exemple
Langage Java 39 FSTH
Exercice
Gestion d’un compte bancaire
1) Créer une classe CompteBancaire avec :
- attributs privés : titulaire, solde
- attribut static : nbComptes
2) Ajouter getters et setters
(si solde < 0 → mettre 0)
3) Ajouter méthodes :
- deposer(double montant)
- static int getNbComptes()
4) Dans main :
- créer 2 comptes
- modifier valeurs avec setters
- faire un dépôt
- afficher infos
- afficher nb de comptes