Vous êtes sur la page 1sur 14

Cours P.O.O.

ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

CHAPITRE 3

CONCEPTS DE BASE DE LA
PROGRAMMATION ORIENTÉE OBJET

Faten BEN HMIDA Université de La Manouba – ENSI – 2012/2013

Plan
2

Introduction
Objet
Classe
Encapsulation
Héritage
Polymorphisme

Faten Ben Hmida 1


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Introduction
3

Programmation structurée

Un programme = ensemble de modules fonctionnels (fonctions et


procédures) qui manipulent des données (variables).

Séparation complète entre données et traitements.

Accès libre aux données par n’importe quel module.

Communication entre modules par passages d’arguments ou à


travers les données globales.

Introduction
4

Programmation orientée objet

Un programme = ensemble d’objets indépendants en


coopération.

Regroupement des données et des traitements dans une même


structure.

Accès réglementé aux données par les différents objets.

Communication entre objets par envoi de messages.

Principes de base de la programmation orientée objet :


encapsulation, héritage, polymorphisme.

Faten Ben Hmida 2


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Objet
5

Objet : entité informatique regroupant des données et les


traitements associés à ces données.
Un objet permet de représenter une entité du monde réel qui
peut être concrète (personne, voiture, maison, …) ou abstraite
(emploi, compte bancaire, sécurité sociale, …)
Un objet est défini par :
Une identité : identifiant, nom permettant de le distinguer.
Des attributs (données membres) : ensemble de données dont les
valeurs permettent de caractériser l’état de l’objet.
Des méthodes (fonctions membres) : ensemble d’opérations qui
permettent de caractériser le comportement de l’objet.

Objet
6

X : Point CB : CompteBancaire
abscisse : 25 titulaire : "John Doe"
ordonnée : 34 solde : 1290
Identité
initialiser() débiter()
déplacer() Attributs créditer()
afficherSolde()
Méthodes
R : Rectangle V1 : Voiture
largeur : 30 marque : "Renault"
hauteur : 12 couleur : "bleue"
vitesse : 50
périmètre()
surface() X, R, CB et V1 sont des accélérer()
diagonale() objets. freiner()
afficher() tourner()

Faten Ben Hmida 3


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Classe
7

La notion de classe est une généralisation de la notion d’objet.

Classe : modèle qui fournit la description d’un ensemble d’objets


ayant des données et des fonctions communes (mêmes attributs et
méthodes).

Une classe peut être assimilée à un moule qui permet de


fabriquer des objets (instanciation).

Chaque objet est issu d’une classe, on dit qu’un objet est une
instance d’une classe.

La relation classe/objet est analogue à la relation type/variable.

Classe
8

Point CompteBancaire
abscisse : réel titulaire : chaîne
ordonnée : réel solde : réel
Classe
initialiser() déposer(réel) : réel
déplacer() Attributs retirer(réel) : réel
afficherSolde() : réel
Méthodes
Rectangle Voiture
largeur : entier marque : chaîne
hauteur : entier couleur : chaîne
vitesse : entier
périmètre() : entier
Point, Rectangle, Voiture et
superficie() : entier accélérer(entier)
CompteBancaire sont des freiner()
modifier() : réel
afficher() classes d’objets. tourner(entier)

Faten Ben Hmida 4


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Classe
9

r1 r2

instanciation

instanciation
largeur : 30 largeur : 30
hauteur : 12 hauteur : 12
périmètre() périmètre()
superficie() superficie()
Rectangle
modifier() instanciation modifier()
afficher() largeur : entier afficher()
hauteur : entier
r périmètre() : entier r1, r2 et r sont des objets
largeur : 65 superficie() : entier issus de la classe Rectangle.
hauteur : 42 modifier() : réel
afficher() r1 et r2 possèdent les
périmètre()
mêmes valeurs d’attributs,
superficie()
modifier() pourtant il s’agit bien
afficher() d’objets différents !

Classe
10

Constructeur / Destructeur

Constructeur : méthode qui permet de créer et éventuellement


d’initialiser une nouvelle instance de la classe (un objet).
Méthode appelée automatiquement à l’instanciation d’un nouvel objet.
Porte le même nom que la classe et ne retourne pas de valeur.
Peut prendre des paramètres pour initialiser un ou plusieurs attributs.
Le programmeur peut définir plusieurs constructeurs (ou aucun) pour
une classe, toutefois il existe un constructeur par défaut pour chaque
classe créée.

Destructeur : méthode optionnelle qui permet de supprimer une


instance de la classe (un objet).

Faten Ben Hmida 5


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Classe
11

Accesseur / Mutateur

Accesseur : méthode qui permet de lire la valeur d’un attribut.


Porte généralement un nom défini comme suit : getNomAttribut().
Retourne la valeur de l’attribut correspondant et ne prend pas
d’arguments.

Mutateur : méthode qui permet de modifier la valeur d’un


attribut.
Porte généralement un nom défini comme suit : setNomAttribut().
Modifie l’attribut correspondant avec une valeur passée en argument
et ne retourne rien.

Exemple
12

Instanciation
CompteBancaire CompteBancaire CB1: CompteBancaire
("Dupont", 935)
titulaire : chaîne titulaire : "Dupont"
solde : réel solde : 935
CompteBancaire(réel) déposer()
CompteBancaire(chaîne, réel) retirer()
déposer(réel) : réel
retirer(réel) : réel
getSolde()
getSolde() : réel CB1.getSolde()
setSolde()
setSolde(réel) getTitulaire()
935
getTitulaire() : chaîne setTitulaire()
setTitulaire(chaîne)

Messages envoyés à l’objet par


CB1.getTitulaire() "Dupont"
d’autres objet ou par le
programme principal

Faten Ben Hmida 6


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Exemple
13

Instanciation
CompteBancaire CompteBancaire CB1: CompteBancaire
("Dupont", 935)
titulaire : chaîne titulaire : "Dupont"
solde : réel solde : 935 970 70
CompteBancaire(réel) déposer()
CompteBancaire(chaîne, réel) retirer()
débiter(réel) : réel
créditer(réel) : réel
getSolde()
getSolde() : réel CB1.déposer(35)
setSolde()
setSolde(réel) getTitulaire()
970
getTitulaire() : chaîne setTitulaire()
setTitulaire(chaîne)

Messages envoyés à l’objet par


CB1.retirer(900) 70
d’autres objet ou par le
programme principal

Encapsulation
14

Encapsulation : principe de base de la P.O.O. qui consiste à :

Rassembler dans une même entité les données et les


traitements associés à ces données.

Masquer les détails d’implémentation derrière une interface


d’utilisation bien définie.

Assurer la protection et l’intégrité des données en


réglementant l’accès à ces dernières de l’extérieur.

Faten Ben Hmida 7


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Encapsulation
15

Rassembler dans une même entité les données et les traitements


associés à ces données.

La définition même d’un objet repose sur ce principe :


Objet = Attributs + Méthodes

largeur et hauteur sont les données membres


(Attributs). largeur
hauteur
périmètre(), superficie(), modifier() et
afficher() sont les fonctions membres
(Méthodes) qui manipulent ces données.

Rectangle

Encapsulation
16

Masquer les détails d’implémentation derrière une interface


d’utilisation bien définie.
Interface de l’objet
Un objet est caractérisé par un état "privé" et un Éléments "publics"
comportement "public". (partie visible)

L’utilisateur d’un objet n’a pas besoin de


connaitre les détails de son implémentation.
Corps de l’objet
Corps de l’objet : attributs et corps des Éléments "privés"
méthodes. (partie invisible)

Interface de l’objet : prototypes des


méthodes.

Objet

Faten Ben Hmida 8


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Encapsulation
17

Assurer la protection et l’intégrité des données en réglementant


l’accès à ces dernières de l’extérieur.
Seules les méthodes de la classe elle-même peuvent accéder et
manipuler les attributs de cette dernière.
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). largeur
hauteur
largeur et hauteur ne peuvent être manipulés
qu’à travers les méthodes périmètre(),
superficie(), modifier() ou afficher().
Rectangle

Encapsulation
18

Assurer la protection et l’intégrité des données en réglementant


l’accès à ces dernières de l’extérieur.

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.

Niveau de Accès depuis la Accès depuis une Accès depuis une


protection même classe classe dérivée classe extérieure
public Oui Oui Oui
protected Oui Oui Non
private Oui Non Non

Faten Ben Hmida 9


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Encapsulation
19

Avantages

L’encapsulation permet d’assurer à l’objet, d’une part, une forte


cohésion interne, et d’une autre part, un faible couplage avec
l’extérieur.

L’encapsulation facilite la modularité, la réutilisation et


l’extensibilité du code, ainsi que sa maintenance.

La représentation interne d’un objet peut être modifiée sans


affecter l’interface : occultation des détails de réalisation.

Héritage
20

Héritage : principe de base de la P.O.O. qui permet de définir une


nouvelle classe à partir d’une classe existante en spécialisant cette
dernière.
Spécialisation

Classe de base Classe dérivée


Classe mère Classe fille
Super classe Sous classe

Généralisation

2 types d’héritage :
Héritage simple : la classe fille ne peut avoir qu’une seule classe mère (Java).
Héritage multiple : la classe fille peut avoir plusieurs classes mères (C++).

Faten Ben Hmida 10


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Héritage
21

La classe fille hérite de tous les attributs et les méthodes de la


classe mère avec la possibilité de :
Ajouter des attributs spécifiques.
Ajouter des méthodes spécifiques.
Redéfinir ou surcharger des méthodes héritées.

Un objet issu d’une classe fille peut accéder à tous les membres
(attributs et méthodes) publics et protégés (protected) d’un objet
issu de sa classe mère.

Héritage
22

Polygone Les classes Triangle et Rectangle


nombreCotes : entier héritent de la classe Polygone.
Polygone : Classe mère
périmètre() : réel
superficie() : réel Triangle, Rectangle : Classes filles
Triangle et Rectangle héritent
l’attribut nombreCotes et les
méthodes périmètre() et
Rectangle Triangle
superficie() de la classe Polygone
Largeur : réel coteAB : réel
Hauteur : réel coteBC : réel La classe Rectangle possède en
coteAC : réel plus deux attributs spécifiques
carré() : booléen (largeur et hauteur) et une
isocèle() : booléen méthode spécifique carré()

Faten Ben Hmida 11


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Héritage
23

Avantages

L’héritage permet de faciliter considérablement la réutilisation de


produits déjà existants.

Le concepteur d’une application n’a pas besoin de tout écrire de


nouveau puisqu’il peut étendre des classes existantes en leur
ajoutant des fonctionnalités.

L’héritage permet d’éviter la redondance de code.

Polymorphisme
24

Polymorphisme : principe de base de la P.O.O.

Mécanisme par lequel on peut avoir le même nom d’une méthode


pour des objets de types différents.

Il existe 3 types de polymorphisme :


Le polymorphisme ad hoc
Le polymorphisme paramétrique
Le polymorphisme d’héritage

Faten Ben Hmida 12


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Polymorphisme
25

Polymorphisme ad hoc

Définir des méthodes de même nom avec des fonctionnalités


similaires dans des classes sans aucun rapport entre elles.

La classe Rectangle et la classe CompteBancaire peuvent avoir chacune


une méthode afficher()

Définir des opérateurs dont l’utilisation est différente selon le type


des opérandes qui leur sont passés (surcharge des opérateurs).

Il est possible par exemple de surcharger l'opérateur + et de lui faire


réaliser des actions différentes : addition si les opérandes sont deux
entiers ou concaténation si les opérandes sont deux chaînes de
caractères.

Polymorphisme
26

Polymorphisme paramétrique

Définir, dans la même classe, des méthodes ayant le même nom et


des paramètres différents en nombre et/ou en type.

La méthode appelée est reconnue grâce à sa signature (nombre


et types des paramètres)

Il est possible par exemple de définir dans la même classe les


méthodes suivantes :
entier ma_méthode(entier)
réel ma_méthode(réel)
réel ma_méthode(entier, réel)
entier ma_méthode(entier, entier, réel)

Faten Ben Hmida 13


Cours P.O.O. ENSI - II1
Chapitre 3 : Concepts de Base de la P.O.O. A.U. : 2012/2013

Polymorphisme
27

Polymorphisme d’héritage

Permet à une classe dérivée de modifier localement un


comportement hérité de sa classe de base pour prendre en
considération sa spécificité.

Redéfinir dans la classe dérivée une ou plusieurs méthodes de la


classe de base.

Les méthodes périmètre () et superficie() de la classe Polygone seront


redéfinies dans ses classes héritières Triangle et Rectangle (modification
ou réécriture du code correspondant) pour prendre en considération les
particularités de ces dernières.

Faten Ben Hmida 14

Vous aimerez peut-être aussi