Vous êtes sur la page 1sur 25

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

2
Programmation Orientée Objets

Chapitre 1
Concepts de la POO

Plan

~ Introduction

~ Programmation structurée
f Critiques et limitations

~ Programmation Orientée Objets


f Encapsulation/abstraction
f Classe et instance
f Messages et méthodes
f Héritage (simple, multiple)
f Polymorphisme
f Agrégation

4
Introduction

~ Programmation Orientée Objets

f Évolution de la programmation structurée

f Conception proche du monde réel

Programmation structurée
(procédurale)
~ Un programme = ensemble
de données + fonctions (ou
Données
procédures ) agissant sur les
données
fonction 1

~ Dissociation entre données fonction 2


et traitement

fonction n
~ Modularité assurée par le
découpage du programme
en fonctions et procédures
6
Programmation structurée
(critiques et limitations)

Le moindre changement des structures


de données

Changement profond des


fonctions
7

Programmation structurée
(critiques et limitations)

~ Changement des structures de données

f Exemple

Calculer le produit de deux matrices complexes

C3 = C1*C2

8
Programmation structurée
(critiques et limitations)

~ Choix des structures de données

~ Solution 1
f Un nombre complexe est représenté par deux
variables réelles

f Une matrice de complexe est représentée par


deux matrices réelles

Programmation structurée
(critiques et limitations)
~ Solution 1 : listes des fonctions
f Une fonction qui saisit une matrice de complexes
f Une fonction qui affiche un nombre complexe.
f Une fonction qui affiche une matrice de complexes
f Une fonction qui calcule le produit de deux nombres
complexes
f Une fonction qui calcule le produit d’une ligne de la matrice
C1 et d’une colonne de la matrice C2
f Une fonction qui calcule le produit de deux matrices de
complexes C1 et C2
f Un programme principal qui saisit deux matrices C1 et C2,
et qui calcule et affiche leur produit.

10
Programmation structurée
(critiques et limitations)
~ Changement des structures de données
~ Solution 2
f Un nombre complexe est représenté par une
structure à deux champs réels

f Une matrice complexe est représentée par un


tableau bidimensionnel de structures de complexe

Peut-on réutiliser les fonctions


précédentes ?
NON
11

Programmation structurée
(critiques et limitations)

~ Les fonctions s’appellent entre elles. En cas de


modification d’une fonction:

f Identifier tous les endroits d’appel de cette fonction dans le


programme (tâche délicate)

f Changer toutes les instructions d’appel

12
Programmation structurée
(critiques et limitations)

~ Conception "plat de spaghettis" des


fonctions

f Pb : Comment identifier la responsabilité d’une


fonction? qui fait quoi?

f Lisibilité faible

13

Programmation structurée
(critiques et limitations)
~ Conception "plat de spaghettis" des fonctions

Fonction1( )
------- Fonction 2( )
------ -------
------

Fonction 5( )
------- Fonction 3( )
------ -------
------
Fonction 4( )
-------
14 ------
Programmation structurée
(critiques et limitations)

~ Pas de protection des données : toute fonction peut


accéder et agir sur les données

~ Manque de réutilisabilité

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


structures de données différentes

f Réutiliser une fonction


Il faut intégrer toutes les fonctions appelées
(directement ou indirectement) dans cette fonction

15

Peut – on faire mieux?

16
Programmation Orientée Objets POO

~ Principes de la POO
f Intégration des données et des traitements (méthodes) au
sein d’une même entité : objet

Objet = données + méthodes

f Un programme = ensemble de petites entités (objets) qui


interagissent et communiquent par messages

17

Programmation Orientée Objets POO


Architecture des objets
~Principes de la POO

Données
Méthodes agissant
sur les données Données
Méthodes agissant
sur les données

Données
Méthodes agissant
sur les données

18
Principes de la POO
Encapsulation

~ La partie données d’un objet est inaccessible


(cachée) de l’extérieur.

~ Seuls les méthodes de cet objet peuvent y accéder.

f Offre une meilleure protection des données

19

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.

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


structure

20
Principes de la POO
Encapsulation/Abstraction
Interface

Méthodes Données
( champs)

21

Apports de la POO
~ Plus de modularité :
f l’unité de modularité est l’objet
⇒ plus de réutilisabilité et d’extensibilité

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

~ Meilleure lisibilité
f Les données et méthodes sont spécifiées au même endroit

~ Facilité d’extensibilité
f Nouvelles fonctionnalités : Les données et méthodes sont spécifiées en même
temps
f Modification de l’objet

⇒ Meilleure conception
22
Concepts de la POO

~ Classe et instances

~ Message et méthodes

~ Héritage (simple, multiple)

~ Polymorphisme

~ Agrégation

23

Classe et instance

~ Une classe est la description d’un ensemble d’objets ayant la


même structure de données et les mêmes méthodes

~ Les objets d’une classe sont appelés instances de cette classe

~ Analogie

Prog Procédurale Variable Type

POO Objet Classe

24
Structure d’une classe
Une classe est composée de deux parties :
f Partie données : attributs ou champs
f Partie traitement : méthodes ou opérations appliquées aux objets

Classe A
Champs
Champs1
Champs2

Méthodes
Méthode1( )
Méthode2( )

O1 Objet de la classe A

25

Structure d’une classe


Exemple : Classe compte_bancaire
Champs
numéro
CIN
Nom
Prénom
Adresse
Solde
Classe
Méthodes
Créer_compte( )
Afficher_solde( )
Retirer( )
Déposer( )
Fermer_compte()

Compte 2
Compte 1
Instances
26
Méthodes et envoi de message
~ Le comportement des objets (partie dynamique) est décrit au
niveau de leur classe par un ensemble d’opérations appelées
méthodes

~ L’interaction (communication) avec un objet est assurée par


l’envoi de message
f Indiquer à l’objet ce qu’il doit faire

Classe

Afficher( )

Affiche toi instance

O1

27

Héritage simple
~ L’héritage permet de définir une classe à partir d’une classe
existante en lui ajoutant de nouveaux attributs et de nouvelles
méthodes
f Relation " est une "

~ Une classe B qui hérite d’une classe A 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

28
Héritage simple
Terminologie et représentation graphique

A
La classe B hérite de la classe A


~
f Exprime la relation " B est une A"
B

~ La classe A est dite la super-classe ou la classe de


base

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


dérivée
29

Héritage simple
hiérarchie d’héritage

A1
~ Le concept d’héritage n’est pas
limité à un seul niveau. Une
hiérarchie de classe peut être A2
définie

A3

An
30
Héritage simple
Exemple

Personne

Employé Etudiant

Ingénieur Technicien Etudiant_ Etudiant_non


boursié _boursié

31

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

32
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( )
Méthode2( )

Objet de la classe A

O1
33

Classes abstraites

~ L’intérêt des classes abstraites est de définir un


cadre de travail pour les classes dérivées

Forme
Exemple --------
Abstraite dessiner( )
--------

Cercle Carre Triangle


-------- -------- --------
dessiner( ) dessiner( ) dessiner( )
-------- -------- --------

34
Héritage Multiple

Une classe hérite de plusieurs classes à la fois

A1 A2 An

35

Héritage Multiple
Exemple

Employé Etudiant

Etudiant_salarié

36
Héritage Multiple
Conflits

Employé Etudiant
------- -------
code (doti) code (CNE)
------- -------
------- -------

Deux super-classes ou plus Etudiant_salarié


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

37

Héritage Multiple
Conflits

Personne
-------
nom
-------

Employé Etudiant

Le même membre (attribut ou Etudiant_salarié


méthode) est hérité plusieurs
fois par une classe dérivée -------
!!! nom
nom
-------
-------

38
Héritage Multiple
Résolutions des conflits

Trois solutions sont proposées

39

Héritage Multiple
Résolutions des conflits (1)

Considérer que tout conflit est une erreur

Revoir la conception

40
Héritage Multiple
Résolutions des conflits (2)

Définir un ordre entre les classes de base

Priorité 1 Priorité 2
Employé Etudiant
------- -------
nom nom
------- -------

Etudiant_salarié
-------
nom (Employé)
-------
-------
41

Héritage Multiple
Résolutions des conflits (3)

Le membre qui présente un conflit est dupliqué, et pour


désigner l’un d’eux, on doit le préfixer par le nom de la
classe d’origine.
Employé Etudiant
------- ------
code code
------- -------

Etudiant_salarié
-------
code (Employé)
code (Etudiant)
-------
42
Polymorphisme

~ Polymorphisme = capacité de prendre plusieurs


formes par une entité

~ Au cours de l’exécution, un objet peut prendre


plusieurs formes (grâce à l’héritage)

43

Polymorphisme
Exemples (1)
~ La méthode afficher ( ) est définie Personne
dans la classe personne et --------
redéfinie dans les classes Etudiant afficher( )
et Salarié
--------
P1
~ Au cours de l’exécution un
pointeur sur l’objet p1 peut pointer
sur un objet de la classe Etudiant
ou de la classe Salarié Salariéé Etudiant
-------- --------
~ Quelle fonction "afficher()" sera afficher( )
afficher( )
exécutée dans ce cas? --------
--------
~ Le choix de la bonne méthode est
retardé au moment de l’exécution
(non lors de la compilation). On S1 E1
parle de la liaison dynamique.

44
Polymorphisme
Exemples (2)
Forme
--------
~ La méthode dessiner() est dessiner( )
définie dans la classe Forme --------

~ la méthode dessiner() est


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

45

Agrégation (composition)

~ Exprime la relation " est composé de …"


f L’un des attributs de la classe est une instance d’une
autre classe

~ Alternative à l’héritage, mais sémantique


différente

46
Agrégation (composition)
Exemple

Classe Ordinateur

-------------------
clav : Clavier
Sour : Souris
Proc : processeur
Mon : Moniteur
--------------------
47

Classification des Langages


Orientés Objets
~ Tout LOO doit satisfaire 3 concepts de base et peut
implémenter d’autres concepts complémentaires.

~ Concepts de base
f Classe et instances
f Message et méthodes
f Héritage simple

~ Concepts complémentaires
f Héritage multiple
f Polymorphisme
f Agrégation
48
Historique des LOO

~ Simula (1967)

~ Smalltalk (1972)

~ C++ (1983)

~ Eiffel

~ Java (1995)

49

Vous aimerez peut-être aussi