Vous êtes sur la page 1sur 6

La Programmation Orientée Objet (POO)

Chapitre 1 : Vers une Programmation Orientée Objet


1. Introduction
En terme de programmation, il y a eu plusieurs évolutions successives. Une des principales
fut la programmation structurée, dont le principe premier était de diviser un programme en
sous-programmes en fonction des sous-tâches à exécuter, afin de pouvoir en gérer la
complexité. Ce type de programmation, tient avant tout compte des traitements et peut être
résumé par la question: « Que doit faire le programme ? ». Cette approche allège le travail du
programmeur, les tests et la maintenance des programmes. La programmation structurée
présente cependant un inconvénient. Les règles de manipulation des données qui ont été
définies doivent être prises en compte dans le programme sur de nombreux niveaux
hiérarchiques.

Pour donner une meilleure compréhension de la question, nous proposons de mettre en


parallèle les différentes techniques de programmation. L’on pourra ainsi, voir quelles sont les
étapes marquantes de l’histoire des langages de programmation et en même temps quel
cheminement, le programmeur a dû suivre durant ces dernières années:
• réalisation de programmes simples non structurés (Programmation non structurée)
• techniques de sous-programmes (Programmation procédurale)
• programmation modulaire
• programmation orientée objet

1.1. Programmation non structurée


II s’agit de programmes simples et circonscrits ne nécessitant pas de décomposition en sous-
programmes. Dans ce cas de figure, le programme principal est conçu pour que les
instructions manipulent des variables globales, dont les valeurs sont définies et modifiées.

Inconvénients : ce mode de programmation implique que les instructions de traitement


récurrentes soient mises à disposition chaque fois.

1
1.2. Programmation procédurale
Les instructions répétitives sont rassemblées dans ce qu’il est convenu d’appeler des
procédures et utilisées sans que le code ne soit réécrit plusieurs fois. Lorsqu’une procédure est
appelée, les instructions qu’elle contient sont exécutées, puis le programme retourne à
l’endroit suivant l’appel de la procédure.
L’introduction de paramètres et l’imbrication des procédures permet d’améliorer la
structuration des programmes. Par ailleurs, la proportion d’erreurs est plus réduite.

L’utilisation séparée des procédures conduit à subdiviser à priori les tâches à résoudre en
sous-tâches et à regrouper en modules les procédures requises, d’où la programmation
modulaire

1.3. Programmation modulaire


Cette technique vient pour assurer une meilleure structuration du programme en le divisant en
blocs logiques contenant des données et des procédures, appelés des modules. L’idée est que,
dans un programme, à chaque tâche peut correspondre un module et les opérations de
traitement à réaliser au sein de ce module peuvent être regroupées dans des procédures. Le but
est de minimiser l’interdépendance entre les différentes parties du programme, afin de faciliter
le changement de chacune d’elles sans affecter le reste du programme et de pouvoir réutiliser
ces modules (les modules sont compilés séparément).

2
1.4. Programmation orientée objet (POO)
La POO est une nouvelle méthode de programmation qui se distingue fondamentalement des
méthodes précédentes. Elle tend à se rapprocher de notre manière naturelle d’appréhender le
monde. Les langages Orientés Objet (LOO) se sont surtout posés la question « sur quoi porte
le programme ? ». En effet, un programme informatique comporte toujours des traitements
mais aussi, et surtout des données. Si la programmation structurée s’intéresse aux traitements
puis aux données, la POO s’intéresse d’abord aux données, auxquelles elle associe ensuite des
traitements : l’expérience a montré que les données sont ce qu’il y a de plus stable dans la vie
d’un programme, il est donc intéressant d’architecturer le programme autour de ses données.

Ainsi, la technique de POO repose sur le postulat suivant : la meilleure façon de décrire les
systèmes informatiques est de se fonder, non pas sur ce qu’ils font, mais sur les objets qu’ils
manipulent.

Exemples :
Si vous écrivez un compilateur, vous oublierez donc (pour quelques temps) sa tâche
apparente (traduire un programme d’un langage vers un autre) pour vous concentrer sur
les structures de données qu’il manipule (texte source, code objet, arbre syntaxique, ...)
Un programme de comptabilité sera bâti, non pas autour de sa fonction principale, mais
autour des objets qu’il traite : comptes, états, écritures, …

La résolution d’un problème consiste ainsi en une interaction entre différents objets dont la
dynamique interne devient secondaire. La subdivision classique d’un programme en données
et instructions de traitement est radicalement modifiée avec la POO. Elle est supplantée par la
constitution d’objets synthétisant les données et les traitements effectués sur elles. La
résolution d’un problème fait exclusivement appel à des messages échangés entre ces objets.

3
2. Programmation structurée vs Programmation orientée objet
Le tableau suivant permet de comparer entre les deux approches de programmation :
Structurée d’une part et par objet d’autre part.
Approche par Traitements Approche par Objets
« Que doit faire le programme ? » « Sur quoi porte le programme ? »
Principe : Analyse fonctionnelle Principe : Pour écrire un programme, on se
descendante qui consiste à diviser la tâche à fonde non pas sur ce qu’il fait, mais sur les
accomplir en sous-tâches moins complexes objets qu’ils manipulent auxquels on associe
Avantages : facile à apprendre et à des traitements.
programmer car elle fait appel à un Avantages : la POO privilégie :
raisonnement logique que chacun sait faire La réutilisabilité : un composant logiciel
naturellement. vraiment général doit être organisé
Problèmes : Ne favorise pas les critères de : autour d’une structure de données
Réutilisabilité : les modules ne sont pas complète et non pas seulement assurer
généraux, mais adaptés aux sous une fonction unique, aussi importante
problèmes pour lesquels ils ont été soit-elle. En d’autres termes ce ne sont
conçus. pas des programmes qu’il faut pouvoir
Extensibilité : l’architecture du logiciel réutiliser, mais bien plutôt des structures
est fondée sur les traitements, or ces de données complètes.
derniers sont moins stables que les L’extensibilité : L’intérêt des méthodes à
données. D’où cette approche est objet découle ici d’une remarque
inadaptée à la conception de gros empirique : si l’on observe l’évolution
logiciels. d’un logiciel d’une certaine taille, on
constate que les fonctions demandées au
système changent tout au long de sa vie
active; les objets auxquels s’appliquent
ces fonctions, en revanche restent plus
stables. Pour préserver la souplesse et
l’extensibilité du système, mieux vaut
bâtir sa structure sur ses caractéristiques
les plus durables.

3. POO : un peu d’histoire


Les méthodes et langages à objets ne sont pas une invention aussi récente qu’on pourrait le
croire.
La naissance de ces concepts est survenue avec le langage Simula en 1967 conçu par Ole-
Johan Dahl et Krysten Nygaard. Ce langage comprenait les éléments principaux de la
méthode, mais il venait trop tôt : c’est avec l’un de ses successeurs, Smalltalk, qu’un
large public a pris connaissance 15 ans plus tard des idées introduites par Simula. avec
Smalltalk la combinaison des techniques à objets, d’un environnement de développement
personnel puissant et d’un support graphique de très haute qualité, a rendu soudain la
méthode des objets attrayante et tangible.
D’autres langages et systèmes sont apparus ces dernières années. Certains sont de simples
extensions de langages existants : on trouve en particulier des préprocesseurs de C, C++
et objective-C, qui ajoutent à C quelques unes des idées de la programmation par objets,
mais sans remettre en cause la structure du langage de base.

4
Apple a développé Object Pascal. De nombreuses extensions « à objets » de Lisp ont été
également proposées, telles que Loops (de Xérox), Flavors (du MIT) et Ceyx (de
l’INRIA).
Les langages Modula-2 et Ada ont également subi l’influence de Simula
Le développement de Java a commencé en 1990 chez SUN Micro-systems sous la
direction de James Gosling. Il est dérivé du C++ et permet de pallier à ses inconvénients
(pointeurs, surcharge d'opérateurs, héritage multiple, gestion de la mémoire, etc.). Il est
indépendant de la plate-forme. Il s’exécute sous n’importe quelle plate-forme pour autant
que celle-ci possède un interpréteur Java (programme comportant le langage; le
navigateur Web peut en être un).
C# (prononcez « C sharp ») est un langage simple, élégant, de type sécurisé et orienté
objet développé par Microsoft pour permettre la création d'une large gamme
d'applications. Ce langage est conçu pour offrir un développement rapide au
programmeur C++ sans sacrifier les qualités de puissance et de contrôle qui sont la
marque du C et du C++. En raison de cet héritage, C# est très fidèle au C et au C++. C#
simplifie et modernise certains des aspects les plus complexes de C et de C++, en
particulier les espaces de noms, les classes, les énumérations, la surcharge et la gestion
structurée des exceptions. C# supprime également certaines fonctionnalités C et C++
telles que les macros, l'héritage multiple et les classes de base virtuelles.

Exercices
Répondez aux questions en cochant la réponse.
1. Quel est le type de programmation le plus ancien ?
A Programmation orientée objet
B Programmation modulaire
C Programmation procédurale

2. La programmation structurée répond à la question :


A Que doit faire le programme ?
B Quelles sont les données à manipuler ?
C Sur quoi porte le programme ?

3. La programmation procédurale consiste à :


A subdiviser les tâches à résoudre en sous-tâches appelées procédures.
B regrouper en modules les procédures requises.
C regrouper en procédures les modules requis.

4. La programmation modulaire est basée sur l’utilisation des :


A Modules
B Procédures
C Objets

5
5. Un module est un ensemble de :
A procédures
B sous-programmes
C programmes

6. La programmation structurée privilégie :


A la modularité
B la réutilisabilité
C l’extensibilité

7. Quel est le plus ancien des langages orientées objets ?


A Smalltalk
B C++
C Simula

8. La meilleure façon de décrire les systèmes informatiques est de se fonder sur :


A ce qu’ils font.
B les modules qu’ils manipulent.
C les objets qu’ils manipulent.

9. L’expérience a montré que :


A les traitements sont ce qu’il y a de plus stable dans la vie d’un programme.
B les données sont ce qu’il y a de plus stable dans la vie d’un programme.
C il est intéressant d’architecturer le programme autour de ses traitements.

10. Les méthodes et langages à objets ont été inventés :


A au début des années 70.
B à la fin des années 70.
C à la fin des années 60.

Solution
N° Question A B C
1. X
2. X
3. X
4. X
5. X
6. X
7. X
8. X
9. X
10. X