Université Alioune DIOP
UFR SATIC – Licence 2 SRT
Introduction à Java
Dr Lamine YADE
[Link]@[Link]
Année académique 2024-2025
Chapitre 3: POO
1. Qu’est ce que la POO ?
2. Classe & Objet
3. Constructeur
4. Encapsulation
5. Héritage
6. Polymorphisme
7. Classe Abstraite
8. Interface
Qu’est ce que la POO ?
La programmation orientée objet (POO) modélise des objets réels.
Chaque objet a :
des attributs (données)
des méthodes (actions ou comportements).
La POO consistera donc à définir les différents acteurs=Entités
(objets), leurs caractéristiques et comportements et à les faire
interagir.
Qu’est ce que la POO ?
Principe:
Placer les entités, objets ou acteurs du problème à la base de la conception
Etudier les traitements comme des interactions entre les différentes entités
Penser aux données AVANT de penser aux traitements
Penser un programme en modélisant le monde tel qu’il nous apparaît
Définir des objets et les faire interagir
Classe & Objet
En POO, toutes les variables sont des objets associés à une classe
Une classe est un type
qui se veut plus complexe que juste un nombre ou un caractère
Un objet est une collection
de données membres (ou attributs)
de fonctions membres manipulant les données membres (ou méthodes)
On peut créer autant d’objets de classe (i.e. de variables du type décrit par la
classe) que l’on veut
Un objet est aussi appelé une instance de classe
Classe & Objet
Exemple:
Classes/Entités
• Personne(Nom, prenom, age, taille)
• Telephone(Num, marque, sonnerie, repertoire, operateur)
• Voiture(Plaque, marque, couleur, vitesse)
Classe & Objet
Exemple:
La classe(Entité) Personne(Nom, prenom, taille, age) définit
• Les attributs d’une personne (nom, prenom, taille, âge…)
• Les comportements d’une personne (Parler, marcher, boire…)
Il peut exister dans le monde plusieurs objets (ou instances) d’une personne
Le Constructeur
En java, les variables doivent être initialisées
Or la déclaration des attributs n’inclut généralement pas d’initialisation
De plus, comment pourrait-on connaître à l’avance la valeur des différentes
variables membres, puisqu’elle sera propre à chaque instance (objet) de la
classe? (Chaque voiture a sa propre marque, sa propre couleur et sa propre
vitesse)
Il faut donc définir dans la classe un mécanisme permettant de donner une
valeur aux variables membres (aux états) de l’objet
Ce mécanisme s’appelle le « constructeur »
Le Constructeur
Une classe doit toujours avoir au minimum un constructeur
Le constructeur recevra les valeurs à attribuer aux variables et les
y affectera
Le constructeur servira ainsi à « matérialiser » la classe et sera
donc appelé chaque fois qu’un objet de la classe doit être créé
Le constructeur est donc la « Recette » pour fabriquer un objet
C’est une méthode spéciale appelée à la création d'un objet.
Le Constructeur
Signature d’un constructeur
Modificateur d’accès: public
Pas de type de retour
même nom que la classe
Les arguments sont utilisés
pour initialiser les variables
de la classe
Le Constructeur
On peut surcharger les constructeurs,
c.à.d. définir plusieurs constructeurs; mais ne doivent pas avoir le même
nombre d’argument
« Plusieurs recettes existent pour fabriquer un même objet avec des
ingrédients différents »
Il existe toujours un constructeur. S’il n’est pas explicitement défini, il sera un
constructeur par défaut, sans arguments
Le Constructeur
On peut surcharger les constructeurs
Exemple:
Création d’objets
Notons toutefois qu’il ne « se passe » toujours rien dans notre programme à ce
stade (la classe Personne).
En effet, nous avons conçu une classe, avec ses caractéristiques et les
constructeurs, mais nous n’avons toujours créé aucun objet.
Nous n’avons en fait encore que défini ce que seraient une personne.
Pour qu’il « se passe » quelque chose, il faudrait donc que nous matérialisions
nos classes, autrement dit que nous les instancions, ce qui signifie que nous
« créions des objets »
Pour ce faire, il faut appeler le constructeur de la classe dont nous souhaitons
créer une instance.
Création d’objets
L’appel au constructeur
Se fait pour initialiser un objet
➔ Provoque la création réelle de l’objet en mémoire
➔ Par l’initialisation de ses variables internes propres
Se fait par l’emploi du mot clé « new »
Affichage d’objets:
Affichons les deux objets (person1 et person2) créés:
Affichage d’objets: méthode toString()
La fonction membre spéciale toString() retourne la chaîne de caractère qu’il
faut afficher lorsque l’on appelle la fonction [Link](objet) sur l’objet.
Affichage d’objets:
Affichage des deux personnes.
Encapsulation: Déclaration des attributs
Toute variable doit être déclarée et initialisée
Les variables membres sont des variables déclarées à l’intérieur
du corps de la classe mais à l’extérieur d’une méthode particulière,
c’est ce qui les rend accessibles depuis n’importe où dans la classe.
La signature de la variable :
• Les modificateurs d’accès: indiquent le niveau d’accessibilité de la variable
• [static]: permet la déclaration d’une variable de classe
• [final]: empêche la modification de la variable (➔ Crée une constante)
• [transient]: on ne tient pas compte de la variable en sérialisant l’objet
• [volatile]: pour le multithreading
• Le type de la variable (ex: int, String, double, boolean,…)
• Le nom de la variable (identificateur)
Encapsulation: Déclaration des attributs
Les modificateurs d’accès qui caractérisent l’encapsulation sont
justifiées par différents éléments:
Préservation de la sécurité des données
• Les données privées sont simplement inaccessibles de l’extérieur
• Elles ne peuvent donc être lues ou modifiées que par les méthodes
d’accès rendues publiques
Préservation de l’intégrité des données
• La modification directe de la valeur d’une variable privée étant impossible,
seule la modification à travers des méthodes spécifiquement conçues est
possible, ce qui permet de mettre en place des mécanismes de
vérification et de validation des valeurs de la variable
Encapsulation: Déclaration des attributs
Les modificateurs d’accès qui caractérisent l’encapsulation sont
justifiées par différents éléments:
Cohérence des systèmes développés en équipes
• Les développeurs de classes extérieures ne font appel qu’aux méthodes
et, pour ce faire, n’ont besoin que de connaître la signature.
• Leur code est donc indépendant de l’implémentation des méthodes
Encapsulation: Déclaration des attributs
En java, les modificateurs d’accès sont utilisés pour protéger l’accessibilité des
attributs et des méthodes. Les accès sont contrôlés en respectant le tableau
suivant:
Encapsulation: les Accesseurs
De manière générale, on évitera de déclarer un attribut “public”
Ou alors, n’importe qui pourra modifier la variable.
Les données doivent donc être privées. On utilise des getters/setters pour y
accéder de manière sécurisée.
Principe:
• Déclaration : private type variable;
• Getter: public type getViriable() {}
Retoune la valeur de l’attribut
• Setter: public void setViriable(type nouvellValeur) {}
Modifie la valeur de l’attribut
Encapsulation: les Accesseurs
Exemple:
Encapsulation: les Accesseurs
On peut aussi paramétrer les accès en utilisant les packages : seules les
classes du même package (que vous contrôlez vous même!!!) pourront modifier
les variables packagées.
Pour packager une variable, une méthode ou une classe, ne mettez aucun accesseur
devant celle-ci. Créez juste un package (c.à.d. un répertoire dans le système de fichiers)
et déclarez que votre classe appartient au package au tout début du fichier via :
package nomdepackage;