Vous êtes sur la page 1sur 59

Programmation Orientée

Objets

R. Ben Abbou & A. Zahi


FSTF, Fez, Maroc
Plan du cours
 Concepts de la POO
 Améliorations de C++
 Classes et objets
 Héritage
 Patrons
 Exceptions

2011-2012 LST INFO, FSTF 2


Programmation Orientée
Objets

Chapitre 1
Concepts de la POO
Plan

 Introduction

 Programmation Structurée
 Principes
 Critiques et limitations

 Programmation Orientée Objets


 Principes
 Apports de la POO
 Concepts de la POO

2011-2012 LST INFO, FSTF 4


Introduction

 Programmation Orientée Objets

 Évolution de la programmation structurée

 Conception proche du monde réel

2011-2012 LST INFO, FSTF 5


Programmation structurée
(procédurale)
 Un programme = Structures de
données + fonctions (ou procédures )
Données
agissant sur les données

fonction 1
 Dissociation entre données et
traitement fonction 2

 Modularité assurée par le découpage


fonction n
du programme en fonctions et
procédures

2011-2012 LST INFO, FSTF 6


Programmation structurée
(critiques et limitations)
Le moindre changement des
structures de données

Changement profond des


fonctions
2011-2012 LST INFO, FSTF 7
Programmation structurée
(critiques et limitations)
 Changement des structures de données

 Exemple

Calculer le produit de deux matrices complexes

C3 = C1*C2

2011-2012 LST INFO, FSTF 8


Programmation structurée
(critiques et limitations)
 Choix des structures de données

 Solution 1

 Un nombre complexe est représenté par deux variables


réelles

 Une matrice de complexe est représentée par deux


matrices réelles

2011-2012 LST INFO, FSTF 9


Programmation structurée
(critiques et limitations)
 Solution 1 : listes des fonctions
 Une fonction qui saisit une matrice de complexes
 Une fonction qui affiche un nombre complexe.
 Une fonction qui affiche une matrice de complexes
 Une fonction qui calcule le produit de deux nombres
complexes
 Une fonction qui calcule le produit d’une ligne de la matrice
C1 et d’une colonne de la matrice C2
 Une fonction qui calcule le produit de deux matrices de
complexes C1 et C2
 Un programme principal qui saisit deux matrices C1 et C2,
et qui calcule et affiche leur produit.
2011-2012 LST INFO, FSTF 10
Programmation structurée
(critiques et limitations)
 Changement des structures de données
 Solution 2
 Un nombre complexe est représenté par une structure à
deux champs réels

 Une matrice complexe est représentée par un tableau


bidimensionnel de structures de complexe

Peut-on garder les fonctions précédentes ?


NON

2011-2012 LST INFO, FSTF 11


Programmation structurée
(critiques et limitations)
 Les fonctions s’appellent entre elles à
plusieurs endroits avec imbrication des appels

 En cas de modification d’une fonction il faut :

 Identifier tous les endroits d’appel de cette


fonction dans le programme (tâche délicate)

 Changer toutes les instructions d’appel

2011-2012 LST INFO, FSTF 12


Programmation structurée
(critiques et limitations)
 Conception "plat de spaghettis" des fonctions
Fonction1( )
------- Fonction 2( )
------ -------
------

Fonction 5( )
------- Fonction 3( )
------ -------
------
Fonction 4( )
-------
------
2011-2012 LST INFO, FSTF 13
Programmation structurée
(critiques et limitations)
 Conception "plat de spaghettis" des
fonctions

 Comment identifier la responsabilité d’une


fonction? qui fait quoi?

 Lisibilité faible

2011-2012 LST INFO, FSTF 14


Programmation structurée
(critiques et limitations)
 Pas de protection des données : toute fonction peut
accéder et agir sur n’importe quelle donnée

 Manque de réutilisabilité

 Impossible de réutiliser une fonction existante qui opère sur des


structures de données différentes

 Réutiliser une fonction

Il faut intégrer toutes les fonctions appelées


(directement ou indirectement) dans cette fonction

2011-2012 LST INFO, FSTF 15


Peut – on faire mieux?

Programmation Orientée
Objet

2011-2012 LST INFO, FSTF 16


Programmation Orientée Objets
 Principes de la POO
 Intégration des données et des traitements
(méthodes) au sein d’une même entité : objet
Objet = données + méthodes

Fonction1 Fonction2

Fonction 5 Fonction 3
Données

Fonction 4

2011-2012 LST INFO, FSTF 17


Programmation Orientée Objets
 Principes de la POO
 Un programme = ensemble d’objets qui interagissent
et communiquent par messages

Fonction1 Fonction2
Fonction1 Fonction2

Fonction
Fonction Fonction
5 Fonction
Données 3 5
Données 3

Fonction
Fonction
4
4

Fonction1 Fonction2

Fonction
Fonction
5
Données 3

2011-2012 LST INFO, FSTF


Fonction 18
4
Programmation Orientée Objets

 Principes de la POO : Encapsulation

2011-2012 LST INFO, FSTF 19


Programmation Orientée Objets

 Principes de la POO : Encapsulation


 Permet la protection des données d’un objet en y
contrôlant l’accès
 La partie données d’un objet est inaccessible (cachée) de
l’extérieur(les autres objets du programme)
 Seuls les méthodes de cet objet peuvent y accéder.

 Conséquences
 Un objet n’est vu que par ses spécifications
 Une modification interne n’influence pas le fonctionnement
général du programme

2011-2012 LST INFO, FSTF 20


Programmation Orientée Objets
POO

 Principes de la POO : Abstraction

2011-2012 LST INFO, FSTF 21


Programmation Orientée Objets
POO

 Principes de la POO : Abstraction


 L’interaction d’un objet vis-à-vis de l’extérieur est
définie par un ensemble de méthodes (interface).

 Ceci nous épargne de connaître la structure


interne de l’objet et le détail d’implémentation de
ses méthodes pour communiquer avec lui.

 L’objet est défini par son comportement et non


par sa structure
2011-2012 LST INFO, FSTF 22
Programmation Orientée Objets
POO

 Encapsulation/Abstraction
Interface

Méthodes Données
( champs)

2011-2012 LST INFO, FSTF 23


Programmation Orientée Objets
POO

 Apports de la POO

 Plus de modularité : l’unité de modularité est


l’objet
plus de réutilisabilité et d’extensibilité

 Plus de sécurité
 Protection des données de l’objet
 Interaction avec l’objet est définie par une interface

2011-2012 LST INFO, FSTF 24


Programmation Orientée Objets
POO

 Apports de la POO
 Meilleure lisibilité: Les données et méthodes
sont spécifiées au même endroit

 Facilité d’extensibilité : Les données et les


méthodes sont traitées en même temps
 Nouvelles fonctionnalités (objets)
 Modification d’un objet: ajout, correction,
changement

Meilleure conception
2011-2012 LST INFO, FSTF 25
Programmation Orientée Objets
POO
 Concepts de la POO

 Classe et Objets
 Message et méthodes
 Héritage (simple, multiple)
 Polymorphisme
 Agrégation

2011-2012 LST INFO, FSTF 26


Programmation Orientée Objets
POO
 Concepts de la POO: Objet
 Un objet est une entité qui représente les
objets du monde réel (le problème)

 Un objet du problème peut être:


 Une entité tangible: voiture, personne, avion,
etc.
 Une entité conceptuelle: date, nombre,
planning, etc.

2011-2012 LST INFO, FSTF 27


Programmation Orientée Objets
POO
 Concepts de la POO: Objet
 Un objet possède
 Une identité unique (code)

 Un état interne (valeurs des attributs à un


instant )

 Un comportement (les méthodes exécutées en


réaction aux messages des autres objets )

2011-2012 LST INFO, FSTF 28


Programmation Orientée Objets
POO
 Concepts de la POO: Objet
 Caractérisation d’un objet

2011-2012 LST INFO, FSTF 29


Programmation Orientée Objets
POO
 Concepts de la POO: Classe
 Une classe est la description d’un ensemble d’objets ayant la
même structure (attributs) et le même comportement
(méthodes)

2011-2012 LST INFO, FSTF 30


Programmation Orientée Objets
POO
 Concepts de la POO: instanciation
 Instanciation: Création d’un objet d’une classe

 Les objets d’une classe sont appelés instances

 Analogie

Programmation Variable Type


Procédurale
Programmation Objet Classe
orientée Objet s
2011-2012 LST INFO, FSTF 31
Programmation Orientée Objets
POO
 Concepts de la POO: Structure d’une classe
 Une classe est composée de deux parties :
 Partie données : attributs ou champs
 Partie traitement : méthodes ou opérations
appliquées aux objets
Champs
Champs1
Classe A Champs2

Méthodes
Méthode1( )
Méthode2( )
Objet de la classe A
O1

2011-2012 LST INFO, FSTF 32


Programmation Orientée Objets
POO
 Exemple de classe: compte bancaire
Champs
numéro
CIN
Nom
Classe Prénom
Adresse
Solde

Méthodes
Créer_compte( )
Afficher_solde( )
Retirer( )
Déposer( )
Fermer_compte()
Compte 2
Compte 1
Instances
2011-2012 LST INFO, FSTF 33
Programmation orientée objets
POO
 Concepts: Méthodes et envoi de message
 Le comportement des objets est décrit au niveau
de leur classe par un ensemble de méthodes

 L’interaction (communication) avec un objet est


assurée par l’envoi de message
 Indiquer à l’objet ce qu’il doit faire

Afficher( )
Affiche toi Classe
O1

2011-2012 instance LST INFO, FSTF 34


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage
 Relation entre classes de type " est une "

2011-2012 LST INFO, FSTF 35


Programmation Orientée Objets
POO
 Concepts de la POO : Héritage
 Permet de définir une classes à partir d’une
ou plusieurs classes existantes

 Utilisé dans un objectif de:


 Spécialisation: ajouter de nouveaux attributs et de
nouvelles méthodes

 Généraliser : factoriser les propriétés communes


aux classes dérivées
2011-2012 LST INFO, FSTF 36
Programmation Orientée Objets
POO
 Concepts de la POO : Héritage Simple
 Soit B une classe qui hérite d’une classe A
 B dispose implicitement de tous les attributs et de
toutes les méthodes de la classe A

 Les attributs et les méthodes de la classe B sont


prioritaires par rapport aux attributs et méthodes
de même nom définis dans la classe A

2011-2012 LST INFO, FSTF 37


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage simple
 Terminologie et Représentation graphique
 La classe B hérite de la classe A
A


 La classe A est dite la super-classe ou la B
classe de base

 La classe B est dite la sous-classe ou la


classe dérivée

2011-2012 LST INFO, FSTF 38


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage simple A1
 L’héritage n’est pas limité à un seul
niveau
A2
 Une hiérarchie de classes peut être
définie
A3

 La profondeur de la hiérarchie doit être


raisonnable

An
2011-2012 LST INFO, FSTF 39
Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Simple
 Exemple d’hiérarchie
Personne

Employé Etudiant

Etudiant_ Etudiant_non
Ingénieur Technicien boursié _boursié
2011-2012 LST INFO, FSTF 40
Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Simple
A éviter
 Hiérarchies trop lourdes
– il ne faut pas en abuser !!!

 Héritage de construction
– La classe voiture ne doit pas hériter de la classe roue

 Incohérences conceptuelles
– Les attributs ou les méthodes de la classe de base ne
sont pas compatibles avec la classe dérivée
2011-2012 LST INFO, FSTF 41
Programmation Orientée Objets
POO
 Concepts de la POO : Classes Abstraites
 Une classe abstraite est une classe où certaines
méthodes ne sont pas implémentées

 La classe abstraite ne peut pas être instanciée


Classe abstraite A

Méthodes
Abstraite Méthode1( )
Objet de la classe A Méthode2( )

O1
2011-2012 LST INFO, FSTF 42
Programmation Orientée Objets
POO
 Concepts de la POO: Classes Abstraites
 Intérêt: définir un cadre de travail pour les classes
dérivées
Forme
 Exemple --------
Abstraite dessiner( )
--------

Cercle Carre Triangle


-------- -------- --------
dessiner( ) dessiner( ) dessiner( )
-------- -------- --------
2011-2012 LST INFO, FSTF 43
Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Une classe hérite de plusieurs classes à
la fois
A1 A2 An

2011-2012 LST INFO, FSTF 44


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Exemple

Employé Etudiant

Etudiant_salarié

2011-2012 LST INFO, FSTF 45


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
Employé Etudiant
Conflits -------
code (doti)
-------
code (CNE)
------- -------

Des super-classes possèdent Etudiant_salarié


des attributs ou méthodes -------
code
ayant le même nom
!!! code
-------
-------

2011-2012 LST INFO, FSTF 46


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
Personne
-------
Conflits nom
-------

Employé Etudiant
Un membre (attribut ou
méthode) est hérité
Etudiant_salarié
plusieurs fois par une
classe dérivée
!!! -------
nom
nom
2011-2012 LST INFO, FSTF
------- 47
Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Résolution de conflits

Trois solutions sont proposées

2011-2012 LST INFO, FSTF 48


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Résolution de conflits (1)

Considérer que tout conflit est une erreur

Revoir la conception

2011-2012 LST INFO, FSTF 49


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Résolution de conflits (2)
Définir un ordre entre les classes de base
Priorité 1 Priorité 2
Employé Etudiant
------- -------
nom nom
------- -------

Etudiant_salarié
-------
nom (Employé)
2011-2012 -------
LST INFO, FSTF 50
Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Résolution de conflits (3)

Le membre qui présente un conflit est


dupliqué

Pour désigner l’un d’eux, on doit le préfixer


par le nom de la classe d’origine.

2011-2012 LST INFO, FSTF 51


Programmation Orientée Objets
POO
 Concepts de la POO: Héritage Multiple
 Résolution de conflits (3)
Employé Etudiant
------- ------
code code
------- -------

Etudiant_salarié
-------
code (Employé)
code (Etudiant)
2011-2012 -------
LST INFO, FSTF 52
Programmation Orientée Objets
POO
 Concepts de la POO: Polymorphisme
 Le polymorphisme est la capacité d’une entité à
prendre plusieurs formes
 L’entité polymorphe prend la forme adéquate au
cours de l’exécution
- Débrayer
Feu Voiture - Passer la première
- Accélérer
- Embrayer
Démarrage
des véhicules

Pédaler
Changement (vert )
Vélo
Programmation Orientée Objets
POO
 Concepts de la POO: Polymorphisme
 Trois types de polymorphisme
 Polymorphisme paramétrique :
– Définir la même fonction avec des paramètres
de type différents
 Polymorphisme ad hoc : Surcharge
– Définir la même fonction dans des classes sans
rapport
 Polymorphisme de l’héritage: Redéfinition
– Spécialiser des méthodes de la super-classe pour les
classes dérivées

2011-2012 LST INFO, FSTF 54


Programmation Orientée Objets
POO
 Concepts de la POO: Polymorphisme
d’héritage
Forme
 Exemple --------
dessiner( )
La méthode dessiner() est définie --------
dans la classe Forme

La méthode dessiner() est Cercle Carre Triangle


redéfinie dans chacune des -------- -------- --------
dessiner( )
classes dérivées (différemment) dessiner( ) dessiner( )
-------- -------- --------

2011-2012 LST INFO, FSTF 55


Programmation Orientée Objets
POO
 Concepts de la POO: Polymorphisme
d’héritage Forme
--------
 Exemple Ptr1
dessiner( )
--------
Lors de l’exécution ptr1 peut
pointer sur un objet de la classe
Forme ou l’une des classes Cercle Triangle
Carre
dérivées -------- -------- --------
dessiner( ) dessiner( ) dessiner( )
Quelle fonction « dessiner() »
-------- -------- --------
sera exécutée dans ce cas?
Le choix de la bonne méthode
est retardé au moment de
l’exécution
2011-2012 LST INFO, FSTF 56
Programmation Orientée Objets
POO
 Concepts de la POO: Agrégation
 Exprime la relation entre classes de type " est
composé de …«

 Les valeurs prises par l’un des attributs de la


classe sont des instances d’une autre classe
-------------------
clav : Clavier

La Classe Ordinateur Sour : Souris


Proc : processeur
Mon : Moniteur
--------------------
2011-2012 LST INFO, FSTF 57
Langages Orientés Objets

 Classification
 Tout LOO doit satisfaire 3 concepts de base et peut
implémenter d’autres concepts complémentaires.

 Concepts de base
 Classe et instances
 Message et méthodes
 Héritage simple

 Concepts complémentaires
 Héritage multiple
 Polymorphisme
 Agrégation

2011-2012 LST INFO, FSTF 58


Langages Orientés Objets

 Historique
 Simula (1967)

 Smalltalk (1972)

 C++ (1983)

 Eiffel

 Java (1995)

2011-2012 LST INFO, FSTF 59

Vous aimerez peut-être aussi