0% ont trouvé ce document utile (0 vote)
46 vues36 pages

Cours1 IntroductionPOO

La programmation orientée objet (POO) est un paradigme de programmation qui organise les logiciels en objets, facilitant la maintenance et l'évolution des applications. Elle repose sur des concepts fondamentaux tels que l'encapsulation, l'abstraction, l'héritage et le polymorphisme, permettant une meilleure gestion des données et des interactions entre objets. L'héritage et le polymorphisme favorisent la réutilisation du code et la flexibilité des systèmes logiciels.

Transféré par

derdour amira
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
46 vues36 pages

Cours1 IntroductionPOO

La programmation orientée objet (POO) est un paradigme de programmation qui organise les logiciels en objets, facilitant la maintenance et l'évolution des applications. Elle repose sur des concepts fondamentaux tels que l'encapsulation, l'abstraction, l'héritage et le polymorphisme, permettant une meilleure gestion des données et des interactions entre objets. L'héritage et le polymorphisme favorisent la réutilisation du code et la flexibilité des systèmes logiciels.

Transféré par

derdour amira
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours1: Introduction

à la programmation
orientée objet

1
Introduction
• La programmation orientée objet (ou POO) est une
manière très populaire de résoudre les problèmes
davantage centrée sur les données
• L’Orientée Objet permet de concevoir une application
sous la forme d'un ensemble de briques logicielles
appelées des objets.
 Chaque objet joue un rôle précis et peut communiquer avec
les autres objets par l’envoi de message.
 Les interactions entre les différents objets vont permettre à
l'application de réaliser les fonctionnalités attendues.

2
Petit historique
• La programmation orientée objet (POO) est un paradigme
de programmation informatique élaboré par les
Norvégiens Ole-Johan Dahl et Kristen Nygaard au début
des années 1960 et poursuivi par les travaux de
l’Américain Alan Kay dans les années 1970. Il consiste en
la définition et l’interaction de briques logicielles appelées
objets.
• Les premiers langages de programmation véritablement
objets ont été Simula, puis Smalltalk
• A partir des années 1980, les principes de la POO sont
appliqués dans de nombreux langages (C++, Delphi,
objective C, Eiffel,...)

3
Petit historique (suite)
• Les années 1990 ont vu la création du langage Java par
la société Sun Microsystems.
 Java a connu un grand succès du fait qu’il soit plus simple à
utiliser que ses prédécesseurs.

• La POO s'accompagne d'un changement dans la manière


de penser les problèmes et de concevoir l'architecture des
applications informatiques. C'est ce que l'on appelle la
conception (ou la modélisation) orientée objet.
 Son principal support est le langage de modélisation UML.

4
Pourquoi l’orienté objet ?
• De nombreuses solutions logicielles existent déjà, le rôle du
développeur consiste alors à apporter des modifications soit
pour corriger d’éventuelles erreurs existantes (maintenance
corrective) ou rajouter de nouvelles fonctionnalités
(maintenance évolutive).
• Problème → Avec la programmation procédurale, il devient
très vite compliqué de maintenir ce genre projet.
• La programmation orientée objet facilite la maintenance et est
plus fiable et robuste. C'est un paradigme populaire qui est
bien adapté aussi bien aux petits et qu’aux grands problèmes.
• Le paradigme orienté objet a été proposé pour répondre à la
crise du logiciel en réduisant les coûts de production et surtout
de maintenance d'un logiciel

5
Paradigmes de programmation
• Un paradigme de programmation est un modèle de programmation
ou une manière de programmer basée sur un ensemble de principes.
• Programmation impérative (ou procédurale ou structurée) : Dans ce
paradigme un programme = algorithme + structure de données. Ses
langages dédiés sont Pascal, C,…
• Programmation fonctionnelle : Elle adopte une approche de la
programmation beaucoup plus mathématique. Ses langages dédiés
sont : Erlang, Lisp, Matlab, OCaml…
• Programmation logique : Dans la programmation logique, la
description d’un programme est sous forme de prédicats. Exemple de
langage: Prolog.
• Programmation orientée objet : Ses langages dédiés sont : Java, C++,
Python, PHP,…

6
Programmation impérative
• Elle met en évidence les fonctions à assurer et proposent une
approche hiérarchique et modulaire.
• L'architecture du système est dictée par la réponse au
problème (i.e. la fonction du système)
• L'approche impérative dissocie le problème de la
représentation des données du problème du traitement de ces
données.
• Les structures de données et les fonctions qui les utilisent sont
séparées.
• Les données sont généralement en début de programme et
donc visibles de toutes les fonctions qui suivent
• Exemple de langages impératifs : C, Cobol, Fortran, Pascal, …

7
Programmation impérative

8
Exemple
• Voici comment on peut procéder en C pour calculer le
périmètre d’un rectangle

double calcul_perimetre(double longueur, double largeur){


return (longueur+largeur)*2 ;
}
int main(){
double longueur, largeur; Données
longueur = 7.3; Traitements
largeur = 5.2;
printf("le périmètre est %f", calcul_perimetre(longueur,
largeur));
return 0;
} Lien entre données et
traitements via le
passage de paramètres
9
Inconvénients de la programmation
impérative
• L’un des inconvénients majeurs de ce paradigme est le
faible couplage entre les données et les fonctions. Le lien
sémantique n’est pas explicite entre les données et les
traitements
• Ceci entraine une difficulté à étendre et à maintenir des
projets logiciels plus gros et plus complexes.

10
La programmation orientée objet
• L’une des caractéristiques fondamentale de l’orientée
objet et de pouvoir regrouper au sein d’une même entité
les données et les traitements
• Ceci a pour conséquence de créer un lien sémantique
explicite entre données et traitements
• Dans cette approche tout devient objet

11
L’approche orientée objet
• L'approche objet considère le logiciel
comme une collection d'objets dissociés,
identifiés et possédant des
caractéristiques.
• La fonctionnalité du logiciel émerge
alors de l'interaction entre les différents
objets qui le constituent.
• L'architecture du système est dictée par
la structure du problème.

De quoi se compose le système ?


12
Approche impérative vs. Approche
orientée objet
1) Gestion des données
• L'approche objet est une approche orientée donnée
 Il y a une forte cohérence entre traitements et données

• L'approche impérative privilégie une organisation des


données postérieure à la découverte des fonctions
 Le risque d’incohérence entre traitements et données est
donc plus élevé

13
Approche impérative vs. Approche
orientée objet
2) Gestion de l’évolution des besoins
• En approche objet, l'évolution des besoins se présente comme
un changement de l'interaction des objets:
 S'il y a une modification des données, seul l'objet concerné sera
modifié. Toutes les fonctions à modifier sont bien identifiées : ce
sont ses méthodes.
• Dans une approche procédurale, l'évolution des besoins
entraîne souvent une profonde remise en question de la
topologie:
 La décomposition des unités de traitement (du programme
principal aux sous-fonctions) est directement dictée par ces besoins.
 Une modification des données entraîne une modification d'un
nombre important de fonctions éparpillées et difficiles à identifier
dans la hiérarchie de cette décomposition.

14
Concepts de base de l’orienté objet
• Encapsulation
• Abstraction
• Héritage: Spécialisation et généralisation
• Polymorphisme

15
Encapsulation
• L'encapsulation consiste à regrouper au sein de la même
entité les données et les traitements qui lui sont
associées:
 les données sont appelées des attributs ou champs
 les traitements sont appelées des méthodes

16
Exemple

Rectangle

Données
double largeur
ou
double longueur
attributs

double périmètre(){ Traitements


return (largeur+longueur)*2; ou méthodes
}

17
Notion d’objet
• Un objet est défini à la fois par des informations (les
attributs) et des actions (les méthodes) :
 Les actions utilisent (et parfois modifient) les informations de
l'objet. L'ensemble des informations d'un objet donné est
appelé son état.
 L'ensemble des actions applicables à un objet représente son
comportement.

• REMARQUE : les actions associées à un objet


s'expriment généralement sous la forme de verbes à
l'infinitif

18
Notion de classe
• Une classe est un type abstrait de données qui précise des
caractéristiques (attributs et méthodes) communes à
toute une famille d'objets et qui permet de créer
(instancier) des objets possédant ces caractéristiques.
• Une classe représente la description abstraite (principe
d’abstraction) d’un ensemble d’objets ayant une
sémantique et des caractéristiques communes (c’est
comme un type).

19
L’instanciation
• Un objet est une instance de classe
• Une classe est une abstraction d’un ensemble d’objets
• Par analogie, un objet peut être vu comme une variable
particulière dont le type est une classe

20
Exemple
• On peut considérer par exemple la classe « Etudiant » :
• Ses informations (ou son état) sont le numéro d'étudiant,
le nom, la date de naissance,...etc.
• Alors que son comportement est de s'inscrire, d'assister à
des cours, de passer des examens, d'obtenir des
résultats,...
• Leila et Ahmed sont des objets de la classe Etudiant car
ils possèdent ces caractéristiques.

21
L’échange de messages entre objets
• L'interaction entre les objets se fait par l'intermédiaire
d'échange de messages qui permettent d'initier des actions.
• Un message est émis lorsqu'on demande à un objet d'exécuter
l'une de ses méthodes
• Un objet qui souhaite accomplir une action doit donc solliciter
un autre objet (destinataire) par l'envoi d'un message.
• Ce message est une requête à un objet destinataire capable
d'accomplir l'action demandée et peut s’accompagner
d’informations supplémentaires (arguments) nécessaires pour
effectuer la demande.
• En réponse au message, le destinataire va exécuter des actions
(méthodes) capables de satisfaire la requête.

22
Masquage des données
• Dans la pratique, lorsque les données d’un objet doivent
être accessibles de l'extérieur, il est préférable que cet
accès ne soit pas direct, mais se fasse par l'intermédiaire
de services.
• L'encapsulation permet d'empêcher l'accès direct aux
données d’un objet en utilisant uniquement les méthodes
proposées.
• L'encapsulation permet ainsi de garantir l'intégrité des
données contenues dans l'objet et diminue le risque
d’erreur.

23
Abstraction
• La notion d'abstraction est l'action de cacher de façon
volontaire certains détails afin de mettre en avant les
aspects les plus pertinents.

• Pour être intéressant un objet doit permettre un certain


degré d'abstraction. L'idée étant de se focaliser sur
l'essentiel en cachant certains détails.

24
Encapsulation et abstraction
• L'encapsulation définit deux vues : une vue externe (abstraite) et
une vue interne (détaillée).
• La vue externe est la partie visible.
 L'interface est la vue externe d'un objet, elle définit les services
accessibles (offerts) aux utilisateurs de l'objet.
 L’interface est formée par l’entête de quelques méthodes bien
choisies d’un objet qui permettent d’agir directement sur ses
données.
 Elle est le résultat du processus d'abstraction.
• La vue interne regroupe les détails d'implémentation d'un objet.
Cette vue n'est accessible qu'aux programmeurs concepteurs.

25
Exemple

Rectangle
Partie masquée
(détails d’implémentation)
double largeur
double longueur

double périmètre(){
return (largeur+longueur)*2;
} Partie visible (interface)

26
Encapsulation et abstraction

INTERFACE

Programmeur Décrite par l’en-tête Programmeur


concepteur des méthodes qui utilisateur
sont offertes
Aux programmeurs
Rôle : définition d’un utilisateurs Rôle : utilisation
nouveau type du type
C’est lui qui décide uniquement à
ce qui est visible et travers
ce qui ne l’est pas l’interface
27
Intérêts de l’encapsulation et de
l’abstraction
• Le grand mérite de l’encapsulation/abstraction est que vu
de l’extérieur un objet se caractérise uniquement par les
spécifications de ses méthodes.
• Ceci est très intéressant en matière de qualité du logiciel
car cela facilite la maintenance :
 Une modification éventuelle de la structure interne d’un
objet n’a aucune incidence sur les utilisateurs de cet objet car
elle reste invisible pour eux
 Seul l’objet lui-même est concerné

• L’encapsulation et l’abstraction permettent également de


faciliter la réutilisation d’un objet
28
Exemple
• Pour conduire une voiture il suffit de connaître son
interface.
• Cette interface est constituée d'un volant, d'un
accélérateur, d'une pédale de frein,... (abstraction)
• L'interface permet de conduire une voiture même si on
change de modèle ou de moteur

29
Héritage
• L'héritage est un mécanisme de transmission des
caractéristiques d'une classe de base (ses attributs et
méthodes) vers une sous-classe.
• L’héritage permet de définir de nouvelles classes à partir
de classes existantes
Personne
Nom Généralisation
Age

Salarié
Nom
Age Spécialisation
Employeur
Fonction
30
Héritage et relation « est-un »
• L’héritage décrit une relation « est-un » ou « is-a » et
permet ainsi de définir des classes plus spécialisées et
enrichies.
• Si C1 est une sous-classe de la classe C
• Un objet de la classe C1 « est-un » objet de la classe C
• En POO, l’héritage permet d’éviter de dupliquer du code
déjà présent dans une clase générale.
• Ce code peut être soit des attributs ou des méthodes.

31
Être

Héritage et hiérarchie vivant

• L’héritage est une pratique


clé de l’orienté objet qui
permet de former une
hiérarchie entre les classes du Animal Végétal
plus général au plus
spécifique. …

• Un objet instance d’une classe


sera à la fois instance de cette
Félin
classe mais également de
toutes celles qui la
généralisent et dont elle
hérite.
Chat

32
Avantages de l’héritage
• L’héritage présente de nombreux avantages parmi
lesquels:
• La factorisation de ce qui est commun à plusieurs classes
• On peut ainsi omettre dans les sous-classes ce que l’on a
déjà défini dans les super-classes
 Ceci augmente la réutilisation du code et sa fiabilisation car
le risque d’erreur est réduit
• On utilise la classe spécialisée que dans des cas où il est
essentiel d’exploiter les informations qui lui sont propres
• L’héritage permet également de mieux organiser le code

33
Polymorphisme
• Le mot polymorphie vient du grec et signifie “qui peut
prendre plusieurs formes”
• En POO, il représente la faculté d'une méthode à pouvoir
s'appliquer à des objets de classes différentes.
• Le polymorphisme augmente la généricité, et donc la
qualité, du code.
• Le polymorphisme est une conséquence directe de
l’héritage puisqu’il permet à un même message de
s’exécuter différemment selon chaque sous-classe

34
Polymorphisme

Animal
seDeplacer()

Oiseau Serpent
seDeplacer() seDeplacer()
{ {
en volant en rampant
} }

35
Conclusion
• La POO permet une modélisation des problèmes plus
proche de la réalité.
• Tout est objet et l'ensemble des objets interagissent entre
eux pour effectuer les différents traitements.
• Elle propose une approche différente pour résoudre les
problèmes et met davantage l’accent sur les données.
• Grâce à ses propriétés, la POO accroit la réutilisabilité du
code et une plus grande productivité.
• La POO permet également de concevoir, d’exploiter et de
maintenir plus facilement les logiciels.

36

Vous aimerez peut-être aussi