Vous êtes sur la page 1sur 24

65 Les constantes

POO - Ichrak Amdouni - Eniso 2020-2021


Les constantes
66

 Les constantes ont des valeurs qui ne peuvent


être affectée qu'une fois
Elles sont définies avec le mot clé final
Exemple:
 la date de naissance et le N°CIN sont des constantes à
initialiser par le constructeur.

final int n = 6;
final int t;
t = 8;
n = 60; //erreur; n est déclaré final

POO - Ichrak Amdouni - Eniso 2020-2021


67 Packages

POO - Ichrak Amdouni - Eniso 2020-2021


Packages
68

 Java fournit un grand nombre de classes utilisables


par plusieurs applications et qui forment l’API
(Application Programmer Interface) du langage
Java.
 Toutes ces classes sont organisées en packages (ou
bibliothèques) dédiés à un thème précis.
 Exemple:
import java.lang.Math;

POO - Ichrak Amdouni - Eniso 2020-2021


Packages
69

 Parmi les packages les plus utilisés, on peut citer les


suivants :

Package Description
java.awt Classes graphiques et de gestion d’interfaces

java.io Gestion des entrées/sorties

java.lang Classes de base (importé par défaut)

java.util Classes utilitaires

javax.swing Autres classes graphiques


POO - Ichrak Amdouni - Eniso 2020-2021
Packages
70

 Pour accéder à une classe d’un package donné, il faut


préalablement importer cette classe ou son package.
 Par exemple, la classe Date appartenant au package
java.util qui implémente un ensemble de méthodes de
traitement sur une date peut être importée de deux
manières :
1. Une seule classe du package est importée
 import java.util.Date ;
2. Toutes les classes du package sont importées (même les
classes non utilisées) :
 import java.util.*
POO ;- Ichrak Amdouni - Eniso 2020-2021
Packages
71

 Le programme suivant utilise la classe Date pour


afficher la date actuelle :

POO - Ichrak Amdouni - Eniso 2020-2021


Packages
72

 Il est possible de créer vos propres packages en précisant,


avant la déclaration d’une classe, le package auquel elle
appartient.
Pour assigner la classe DateMain à un package, nommé
POO.examples, il faut modifier le fichier de cette classe

Le fichier DateMain.java
package POO.examples;

import java.util.Date; Le fichier DateMain.java est dans


public class DateMain le répertoire POO/examples
{
….
…. POO - Ichrak Amdouni - Eniso 2020-2021
}
73 Encapsulation

POO - Ichrak Amdouni - Eniso 2020-2021


Principe d’encapsulation
74

 On parle d’encapsulation pour désigner le regroupement de


données et méthodes dans une classe (capsule) en empêchant l'accès
aux données par un autre moyen que les services proposés
 Ça permet de cacher ou non leur existence aux autres objets du
programme
L’utilisateur n’a pas le droit de manipuler directement les attributs,
il doit obligatoirement passer par les méthodes prévues à cet
effet (interface d’utilisation)
 C'est alors le rôle des méthodes de modifier ou de retourner la
valeur des attributs.

POO - Ichrak Amdouni - Eniso 2020-2021


Principe d’encapsulation
75

 Exemple: en interdisant l'utilisateur de modifier directement les


attributs, et en l'obligeant à utiliser les fonctions définies pour les
modifier (appelées interfaces), on est capable de s'assurer de
l'intégrité des données (on pourra par exemple s'assurer que le
type des données fournies est conforme à nos attentes, ou encore
que les données se trouvent bien dans l'intervalle attendu).

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - public
76

 Le mécanisme d’encapsulation définit des niveaux de


visibilité pour les données et fonctions membres pour
réglementer les droits d’accès.
 3 niveaux de visibilité : public, protected et private.
 public :
Degré d’encapsulation le moins strict
toutes les classes sans exception y ont accès

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - public
77

 Exemple: Les méthodes Math.pow et l’attribut Math.PI


sont accessibles dans la classe MathUtil car ils étaient
déclarés public.

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - public
78

 La class MyProgram a le droit d’accéder aux


méthodes cubeRoot et area de la classe MathUtil

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - private
79

 private : niveau de
protection le plus strict.
Une variable ou
méthode private est
uniquement visible dans
la classe où elle est
définie.

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - private
80

 Autant que possible l’état d’un objet (les variables


d’instance) doit être private
 Si on veut autoriser la lecture d’une variable depuis
l’extérieur de la classe, on lui associe un accesseur,
avec le niveau d’accessibilité que l’on veut
 Si on veut autoriser la modification d’une variable,
on lui associe un modificateur, qui permet la
modification tout en contrôlant la validité de la
modification

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - private
81

Getter

Setter

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - protected
82

 Accès possible uniquement:


la classe elle même
depuis toutes les classes du même package
des classes héritières de cette classe

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - protected
83

 La méthode eat() est déclarée


protected.

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation - protected
84

Accès NOT OK car la classe Chair


N’hérite pas de la classe Animal
Accès OK car la classe Dog
hérite de la classe Animal
POO - Ichrak Amdouni - Eniso 2020-2021
Degrés d’encapsulation –
comportement par défaut
85

 Si on ne met aucun droit d’accès devant l’attribut ou la


méthode, qu’est ce qui se passe?
Accès possible pour:
 La classe elle-même
 Les classes du même paquetage que la classe dans laquelle
l’attribut ou la méthode sont déclarés
 On appelle ce mode « package protected »

POO - Ichrak Amdouni - Eniso 2020-2021


Degrés d’encapsulation – Résumé
86

POO - Ichrak Amdouni - Eniso 2020-2021


Visibilité d’une classe
87

 La visibilité d’une classe indique qui peut créer des


objets ou des références de la classe :
private, public, visibilité par défaut (pas de visibilité
protected comme pour les objets)

POO - Ichrak Amdouni - Eniso 2020-2021


Visibilité d’une classe
88

 La visibilité private ne concerne que la classe interne: une classe à


l’intérieur d’une autre classe
class Englobante
{
int a;
private class Englobee{
……
……
} . . .
Englobee classE = new Englobee(); //la classse interne est un
attribut accessible
}
 une classe interne privée, n’est visible que pour sa classe englobante

POO - Ichrak Amdouni - Eniso 2020-2021