Vous êtes sur la page 1sur 38

Programme

0. Concepts de la Programmation Orientée Objets


(POO)
1. Améliorations de C++

2. Classes et Objets

3. Héritage

4. C++ Templates et Exceptions

1
Chapitre 1

Concepts de La POO

2
Objectifs spécifiques

Introduire les facteurs de naissance de la POO


Introduire la définition de la POO
Introduction au concept de l’approche OO

3
De la programmation classique vers la programmation orientée objet

La programmation classique telle que étudiée au travers des langages C,


Pascal… définie un programme comme étant un ensemble de données sur
lesquelles agissent des procédures et des fonctions.
Les données constituent la partie passive du programme. Les procédures
et les fonctions constituent la partie active.
Programmer dans ce cas revenait à :
définir un certain nombre de variables (structures, tableaux)
écrire des procédures pour les manipuler sans associer explicitement
les unes aux autres.

Exécuter un programme se réduit alors à appeler ces procédures dans un


ordre décrit par le séquençage des instructions et en leur fournissant les
données nécessaires à l’accomplissement de leurs tâches.

4
Dans cette approche données et procédures sont traitées
indépendamment les unes des autres sans tenir compte des relations
étroites qui les unissent.

Les questions qu’on peut poser dans ce cas :


1. Cette séparation (données, procédures) est elle utile ?
2. Pourquoi privilégier les procédures sur les données (Que
veut-on faire ?) ?
3. Pourquoi ne pas considérer que les programmes sont avant
tout des ensembles objets informatiques caractérisé par les
opérations qu’ils connaissent ?

Les langages objets sont nés pour répondre à ces questions. Ils sont
fondés sur la connaissance d’une seule catégorie d’entités
informatiques : les objets.

5
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
La Programmation Orientée Objet (POO) propose une méthodologie de
programmation centrée sur les objets. Où un objet peut être vu comme
une entité regroupant un ensemble de données et de méthodes.

Le programmeur :
Doit d’abord identifier les objets qui doivent être utilisé (ou manipulé)
par le programme: on commence par décider quels objets doivent être
inclus dans le programme.
Va ensuite, écrire les traitements, en associant chaque traitement à un
objet donné.

7
Il s'agit donc :
- de déterminer les objets présents dans le programme.
- d'identifier leurs données.
- De définir les traitements à faire sur ses objets .

8
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

9
Identification et définition des objets

♦ De la phase du projet où on établi tous les besoins


utilisateurs ressort la définition d’un certain nombre
d’objets potentiels de travail liés au domaine du problème.
Des objets spécialisés peuvent être aussi nécessaire pour
supporter le domaine de travail et répondre à des besoins
bien spécifiques (stockage de données, accès à une DB ...)

♦ Les 2 questions à se poser lors de la définition des objets:


- Quels sont les attributs de l'objet?
- Quels sont les comportements nécessaires de l'objet?

10
Définition et caractéristiques d’un objet

L’objet: est une structure informatique caractérisé par un Etat( les données) et un
ensemble d'Operations exécutable par cet objet qui caractérise son comportement.
objet = Etat & Comportement
Exemples:
Une fenêtre:
Etat: position, taille, bordure, titre, couleur,…
Comportement: déplacer, réduire, agrandir,…

Un fichier:
Etat: nom, répertoire, protection, propriétaire, contenu,…
Comportement: ouvrir, fermer, détruire,…

11
Communication

Les objets ce communiquent entre eux par échange de message,


Le message le plus échangé et la demande de réalisation d’un
traitement.

Exemple
entre un objet de type personne et un objet bibliothèque: ajouter un
livre ou emprunter un livre.
Pour envoyer un message, un objet doit:
Connaitre l’ID de l’objet destinataire,
Lui envoyer un message avec le nom du traitement et les
paramètres nécessaires puis il attend la réponse,

12
Communication

.
► Un objet peut recevoir un message qui déclenche:
une méthode qui modifie son état
et / ou
une méthode qui envoie un message à un autre objet.
Exemple:

13
Synchrone par défaut

Les communications entre objets sont principalement


synchrones.
L’objet appelant attend la réponse de l’appelé avant de pouvoir
faire autre chose .

14
Challenge
Faire une application objet consiste à:

Identifier les objets nécessaire au déroulement de l’application

Préciser leur rôle dans l’application( les traitements),

Définir les données dont ils ont besoin,

Etablir les communications,

Tout en maximisant la cohérence et minimisant le couplage

15
Programmation orienté objet = Classes

Définition: Une classe (ou type d’objets) décrit une famille d’objets qui
partagent des propriétés communes: Les objets qui ont les mêmes types
de données et les mêmes traitements. Les objets apparaissent alors
comme des variables d'un tel type classe. Bien entendue, seule la
structure est commune, les valeurs des champs est propre à chaque objet.
En revanche, les méthodes sont effectivement communes à l'ensemble des
objets dune même classe.

Les classes servent pour la création des objets


Un objet est une instance d’une classe
Un programme OO est constitué de classes qui permettent de créer
des objets qui s’envoient des messages
L’ensemble des interactions entre les objets défini un algorithme.
Les relations entre les classes reflètent la décomposition du
programme.
16
Les membres d’une classe

Champs (appelés aussi attributs ou données membres): l’ensemble


des membres définissent l’état d’un objet (chaque objet a ses données
propres).
Méthodes (appelés aussi fonctions membres ou comportement): définit
un ensemble d’opérations applicables à l’objet (On manipule les objets
par des appels de ses méthodes).

► L’ensemble des méthodes est appelé l’interface de l’objet.


Une interface définit toutes les opérations qu’on peut appliquer à l’objet
(définit tous ce qu’il est possible de "faire" avec un objet).

17
Exemple: Rectangle est une classe utilisée pour créer des objets
représentant des rectangles particuliers.
• Elle regroupe 4 données de type réel qui caractérisent le rectangle:
longueur , largeur et origine (x,y) (la position en abscisse et en
ordonnée de son origine).
• On suppose qu’on effectuer les opérations de déplacement et de
calcul de la surface du rectangle.
• Les symboles + et – sont les spécificateurs d’accès (voir plus loins)
Exemple (notation UML)

18
Exemple: classe Personne avec ses instances

19
Encapsulation

♦ L’encapsulation signifie qu'il n'est pas possible d'agir directement sur les
données d'un objets; il est nécessaire de passer par l'intermédiaire de ses
méthodes qui jouent le rôle d'interface; permet de cacher les détails d’un
objet. Les noms des méthodes dans l’objet sont connus, mais les détails
de leurs implémentations ne le sont pas.

On traduit parfois cela on disant que l'appel d une méthode est en fait
l'envoi d'un message à l'objet.

♦ L’encapsulation veut aussi dire “mettre tout ensemble”. Un objet a toujours


ses données et ses méthodes packagés ensemble

20
Notion d’héritage
L'héritage est un principe propre à la POO qui permet de créer une
nouvelle classe à partir d'une classe existante. La classe nouvellement
créée, dite classe dérivée, contient les attributs et les méthodes de la
classe dont elle dérive, auxquelles s’ajoutent de nouveaux attributs et de
nouvelles méthodes propres à la classe dérivée.
L’héritage ( exprime la relation " est une ") permet donc de définir une
hiérarchie de classes :
La classe de base est une classe générique.
Les classes dérivées sont de plus en plus spécialisées
Exemple:

21
Héritage
L’héritage permet de spécialiser une classe en définissant une relation
de type « est une sorte de ».
Exemple

Forme

Ellipse Rectangle

Cercle Carre

Un cercle est un spécialisation d'une ellipse, il en possède les


propriétés plus d'autres qui lui sont spécifiques. On dérive donc
la classe Cercle de la classe Ellipse.

22
Héritage Multiple

Une classe hérite de plusieurs classes à la fois

A1 A2 An

23
Héritage Multiple
Exemple

Employé Etudiant

Etudiant_salarié

24
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
-------
-------

25
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
-------
-------

26
Héritage Multiple
Résolutions des conflits

Trois solutions sont proposées

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

Considérer que tout conflit est une erreur

Revoir la conception

28
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é)
-------
-------
29
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)
-------
30
Quand utiliser l’héritage?
Factorisation du code: vos classes font les mêmes choses
deux classes (au moins)contiennent les mêmes méthodes et ou mêmes
propriétés:
On peut construire une super classe
Y déplacer ces méthodes/ propriétés
Ajouter l’héritage
Réutilisation : une classe existante fait « quasiment » ce que vous voulez faire
Avant de coder une nouvelle classe, on peut chercher une classe existante:
Hériter de cette classe
Ajouter méthodes et propriétés
Exploiter le polymorphisme
Imposer un cadre: vos classes proposent un noyau qui doit être complété,
Vous voulez fournir du code dont l’unique objectif est d’ être réutilisé mais
aussi d’ être complété
Vous faite une classe qui contient le code qui va être réutilisé dans l’objectif
qu’elle soit héritée (classes abstraites et Interface)
31
Polymorphisme
Une classe dérivée peut fournir une nouvelle définition d’une méthode de la classe
parent car elle peut avoir besoin de réagir différemment à l'appel de cette méthode.
Cette redéfinition substituera une méthode à une autre : c’est la spécialisation.

La notion de polymorphisme signifie que, la même opération pouvant se comporter


différemment sur différentes classes de la hiérarchie, il est possible d'appeler la
méthode d'un objet sans se soucier de son type intrinsèque. Ceci permet de faire
abstraction des détails des classes spécialisées d'une famille d'objets, en les
masquant par une interface commune (qui est la classe de base).

Velo
m_typePedale
DeuxRoues GetTypePedale()
virtual Accélérer() La fonction Accélérer() n’est pas la
m_tailleRoues
virtual Freiner()
m_couleur même pour un Velo et une Moto. La
virtual
m_poids ChangerVitesse() redéfinition de cette fonction dans
m_nbVitesses chacune des sous-classes
virtual Accélérer() entraînera un comportement
Moto
virtual Freiner()
virtual
m_moteur différent suivant que le DeuxRoues
ChangerVitesse() m_boiteVitesse est un Velo ou une Moto.
GetCouleur() FairePlein()
GetPoids() AllumerClignotant()
virtual Accélérer()
virtual Freiner()
32
virtual ChangerVitesse()
Polymorphisme

Faculté qu'ont des objets différents de réagir différemment en


réponse au même message.
Marcher sur la queue d'un chat => il miaule,
Marcher sur la queue d'un chien => il aboie.
Création d’Applets et de Graphes

Même nom de fonction, plusieurs implantations:


Fonction: opération addition (+)
• Addition des nombres entiers, 1 + 2 = 3
• Addition des nombres complexes, 1+2i + 3+4i = 4+6i

33
Agrégation (composition)

Exprime la relation " est composé de …"


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

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


différente

34
Agrégation (composition)
Exemple

Classe Ordinateur

-------------------
clav : Clavier
Sour : Souris
Proc : processeur
Mon : Moniteur
--------------------
35
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
Classe et instances
Message et méthodes
Héritage simple

Concepts complémentaires
Héritage multiple
Polymorphisme
Agrégation
36
Historique des LOO

Simula (1967)

Smalltalk (1972)

C++ (1983)

Eiffel

Java (1995)

37
Conclusion

La programmation orientée objet permet de concevoir, maintenir et


réutiliser plus facilement les programmes Grace à ses principes
d’instanciation, d’encapsulation, d’héritage et de polymorphisme,

Chacun de ses concepts sera abordés plus en détails dans les prochains
cours, Tds et Tps illustré par des exemples en Java.

38

Vous aimerez peut-être aussi