Vous êtes sur la page 1sur 32

Université Abdelmalek Essaadi

Faculté des Sciences et Techniques d’Al-Hoceima


Département de Mathématiques et Informatique
Filière : LST-MI – S6
Année universitaire : 2020 - 2021

Cours du Module M32 : Programmation orientée objet Java


Chapitre 2 : Fondements de la POO

Pr. Abderrahim El Mhouti


Département de Mathématiques et Informatique
Faculté des Sciences et Techniques d’Al-Hoceima
a.elmhouti@uae.ac.ma

Pr. A. El Mhouti FSTH


Plan :

 Abstraction de données

 Encapsulation

 Héritage

 Polymorphisme

Pr. A. El Mhouti 2 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.
Pr. A. El Mhouti 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.

Pr. A. El Mhouti 5 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 : seules
les méthodes de l’objet lui même pourront y accéder (niveau le plus fort de protection).
 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).

Pr. A. El Mhouti 6 FSTH


Concepts fondamentaux de la POO
Encapsulation
 Remarques :
❖ Lorsqu’aucun mode d’accès n’est spécifié, on dit que ce membre a l'accessibilité par
défaut (comme private).
❖ Une classe dérivée a un accès direct aux membres déclarés avec le mode d’accès
protected, mais pas aux membres déclarés avec le mode d’accès private.

Pr. A. El Mhouti 7 FSTH


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) :

Pr. A. El Mhouti 8 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) :

Pr. A. El Mhouti 9 FSTH


Abstraction des données
Concepts fondamentaux de la POO
Abstraction des données
 L'abstraction des données (information hiding) est un des concepts
fondamentaux de la POO.
 L'abstraction consiste à identifier les caractéristiques (atributs) et traitements
(méthodes) applicables à une entité, et à les placer dans un modèle
informatique convenable : la classe.

Objet: Voiture
Marque : Renault Clio
Carburant : Diesel
Abstraction
Démarrer {…}
Voiture Arreter {…}
Accelerer {…}
Monde réel Monde de programmation

Pr. A. El Mhouti 11 FSTH


Concepts fondamentaux de la POO
Abstraction des données
 L’une des caractéristiques de l'abstraction est la capacité d'ignorer les détails
d'un objet pour en avoir une vision globale.

 ➔ ne retenir que les propriétés (attributs et méthodes) pertinentes d’un objet


pour un problème précis.

 D’un contexte à un autre on ne retiendra donc pas nécessairement les mêmes


attributs et méthodes pour modéliser une même classe.
Vente de
Location de voitures
voitures

Voiture
 L’abstraction est donc :
◼ relative à la perspective de l’observateur.
◼ focalisée sur la vue de l’extérieur de l’objet.
Pr. A. El Mhouti 12 FSTH
Concepts fondamentaux de la POO
Abstraction des données
 Exemple : Principe d'abstraction :
Une classe « Personne » aura :
 dans le contexte universitaire les attributs : nom, prénom, CNE, Filière,...

 dans le contexte de l’entreprise les attributs : nom, prénom, salaire, fonction,

Abstraction 1 Abstraction 2

Etudiant Personne Employé

 ➔ Une même entité réelle peut donc donner différentes abstractions


informatiques, toutes construites en fonction du problème posé.
Pr. A. El Mhouti 13 FSTH
Héritage
Concepts fondamentaux de la POO
Héritage
 Le concept d’héritage est l’un des grands principes de la POO.
 Un enfant hérite des caractéristiques de ses parents et développe les siennes.
➔ Une classe peut hériter des caractéristiques de sa classe mère, mais aussi
en développer de nouvelles.

Pr. A. El Mhouti 15 FSTH


Concepts fondamentaux de la POO
Héritage
 Une classe B hérite d’une classe A, si :
◼ La classe B possède les membres (attributs et méthodes) de la classe A sans avoir à
les redéfinir, plus d’autres membres qui lui sont propres.
◼ La classe B redéfinie des méthodes déjà définies dans la classe A.

Pr. A. El Mhouti 16 FSTH


Concepts fondamentaux de la POO
Héritage
 L’héritage peut être :
◼ simple : la classe fille hérite d’une seule classe mère.
◼ multiple : la classe fille hérite de plusieurs classes mères.

 Exemple 1 : Héritage simple :


relation d'héritage entre les classes Exemple 2 : Héritage multiple :
"personne" et "étudiant". relation d'héritage entre les
classes "Hotel" et "Restaurant" et
"Hotel-Retaurant".

Pr. A. El Mhouti 17 FSTH


Concepts fondamentaux de la POO
Héritage : Terminologie
 Si la classe B hérite d’une classe A, on dit que :
◼ A est la super-classe de B.
◼ B est une sous-classe de A

◼ A est la classe mère.


◼ B est la classe fille.

◼ A est la classe de base.


◼ B est la classe dérivée de la classe A.

◼ la classe B étend la classe A.

 Dans la sous classe on ne mentionne que les nouveaux attributs et les nouvelles
méthodes, qui viennent s’additionner à ceux et celles de la super classe.
Pr. A. El Mhouti 18 FSTH
Concepts fondamentaux de la POO
Héritage : spécialisation/généralisation
 L'héritage est une relation de spécialisation/généralisation entre deux classes.
 On dit que :
◼ la classe mère généralise la classe fille.
◼ la classe fille spécialise la classe mère.

 On pourra donc envisager le concept d’héritage de deux façons différentes :


1) procéder par généralisation (vision ascendante).
2) procéder par spécialisation (vision descendante) .
Pr. A. El Mhouti 19 FSTH
Concepts fondamentaux de la POO
Héritage : spécialisation/généralisation
 1) Procéder par généralisation (vision ascendante) :
 Si on a des attributs et des méthodes communs à des classes différentes, l’héritage
permet alors de les factoriser afin de faciliter la conception et la maintenance du code.
 Exemple : On considère les classes "étudiant en informatique" et "étudiant en commerce" :

➔ Les deux classes ont un attribut et une méthode en commun, on les factorise donc dans
une classe "étudiant" :

Pr. A. El Mhouti 20 FSTH


Concepts fondamentaux de la POO
Héritage : spécialisation/généralisation
 2) Procéder par spécialisation (vision descendante) .
 Le niveau de spécialisation dépend alors du niveau d’abstraction que l’on souhaite.
 On procède par spécialisation quand on veut réutiliser des classes déjà existantes.

 Exemple : A partir de la classe « Vehicule" on se spécialise de plus en plus jusqu'à la classe


« Voiture » :

Pr. A. El Mhouti 21 FSTH


Concepts fondamentaux de la POO
Héritage : intérêts
 Le principe de l’héritage a deux intérêts majeurs :
 simplifier la conception et la modélisation : cela évite d'avoir à réécrire le
même code à plusieurs reprises en encourageant la réutilisation de code.
 construire une hiérarchie de classes. On évite ainsi des répétitions dans le
code, en encourageant la réutilisation de classes déjà existantes.
 Il permet le polymorphisme.

Pr. A. El Mhouti 22 FSTH


Concepts fondamentaux de la POO
Héritage : intérêts
 Remarques :
 En Java, une classe ne peut avoir qu’une seule classe mère (pas d’héritage
multiple).
 Par contre, une classe A peut avoir plusieurs classes filles (B, C, D E, …).
 Les constructeurs ne sont pas hérités par une sous-classe.
 Une relation d’héritage se définit en Java par le mot-clé extends comme
suit :
Class B extends A {
//nouveaux attributs de B
//nouvelles méthodes de B
}

Pr. A. El Mhouti 23 FSTH


Concepts fondamentaux de la POO
Héritage
 Exemple : La classe Rectangle hérite de la classe Forme.
Rectangle utilise les membres de Forme, et peut définir ses propres attributs et méthodes.

Pr. A. El Mhouti 24 FSTH


Concepts fondamentaux de la POO
Héritage
 L’héritage permet de mettre en place une hiérarchie de classe.

 Dans une hiérarchie de classe, les liens entre classes sont des liens
d'héritage.

 Les relations d'héritage sont à considérer comme une arborescence où


chaque classe hérite non seulement de son parent immédiat mais
aussi de tous les ancêtres de ce parent.

Pr. A. El Mhouti 25 FSTH


Polymorphisme
Concepts fondamentaux de la POO
Polymorphisme
 Le polymorphisme est littéralement la faculté de prendre plusieurs formes :
◼ poly => plusieurs
◼ morphisme => forme

 En POO, le polymorphisme traite de la capacité de l'objet à posséder plusieurs


formes.
 Cette capacité dérive directement du principe d'héritage :
◼ un objet peut hériter des attributs et méthodes de ses ancêtres.
◼ un objet peut redéfinir une méthode afin de la réécrire ou la compléter.

 En POO, le polymorphisme est un mécanisme qui permet à une sous-classe de


redéfinir une méthode dont elle a hérité tout en gardant la même signature.
 Selon le contexte, le programme optera pour la "bonne" méthode".

Pr. A. El Mhouti 27 FSTH


Concepts fondamentaux de la POO
Polymorphisme
 Exemple 1 : La méthode surface() est présente dans la classe mère Forme et
dans ses classes filles Cercle, Rectangle et Triangle :

 L’appel de la méthode surface() sur les objets héritant de la classe Forme produira
alors un résultat différent selon la sous classe à laquelle ils appartiennent.

Pr. A. El Mhouti 28 FSTH


Concepts fondamentaux de la POO
Polymorphisme
 Exemple 2 : Soit la classe Rectangle et la classe dérivée Carre suivantes :

 L’héritage des attributs de la classe Rectangle par la classe Carre pose deux
problèmes :
◼ Pour un carré : longueur =largeur => il faut un constructeur avec 1 seul paramètre.
◼ la méthode affiche écrit le mot “rectangle” en début de chaîne. Il serait souhaitable
que ce soit “carré” qui s’affiche au lieu de “rectangle” .
Pr. A. El Mhouti 29 FSTH
Concepts fondamentaux de la POO
Polymorphisme
 Exemple 2 : (suite)

 Pour résoudre le 1er problème, il faut écrire un constructeur spécifique pour Carre.
 Puisque les constructeurs ne sont pas hérités, le constructeur de Carre doit faire appel
au constructeur de Rectangle en utilisant le mot-clé super.

 NB: en Java, le mot clé super fait appel au constructeur de la classe mère.
Pr. A. El Mhouti 30 FSTH
Concepts fondamentaux de la POO
Polymorphisme
 Exemple 2 : (suite)
 Le 2ème problème peut être résolu en appliquant le principe de polymorphisme par
une redéfinition de la méthode affiche() :
 ➔ même signature mais le traitement effectué est réécrit :

 NB : En Java, lors de la redéfinition d’une méthode, il est encore possible d’accéder à la


méthode redéfinie dans la classe supérieure en écrivant super.affiche();

Pr. A. El Mhouti 31 FSTH


Concepts fondamentaux de la POO
Remarques
 Les constructeurs ne sont pas hérités par une sous-classe. Il faut donc écrire un
constructeur spécifique pour chaque sous classe.
 L’appel au constructeur d’une classe supérieure doit toujours se situer dans un
constructeur et toujours en tant que première instruction ;
 Si aucun appel à un constructeur d’une classe supérieure n’est fait, le constructeur fait
appel implicitement à un constructeur vide de la classe supérieure (comme si la ligne
super() était présente). Si aucun constructeur vide n’est accessible dans la classe
supérieure, une erreur se produit lors de la compilation.

Pr. A. El Mhouti 32 FSTH

Vous aimerez peut-être aussi