Chapitre 1 : Introduction à la POO
Introduction à la
Programmation Orientée Objet
Objectifs spécifiques :
Présenter les évolutions qui ont menés à l’avènement de la POO Exposer l’intérêt de l’approche objet Introduire les concepts objets
Eléments de contenu :
Evolution de la programmation Intérêt de l’approche objet Le modèle Objet Les concepts objets
Volume horaire : 1h30
Page | 1
Chapitre 1 : Introduction à la POO
1. Introduction
Depuis plusieurs années, le matériel est de moins en moins cher, et de plus en plus puissant. Des
logiciels de plus en plus complexes doivent être réalisés dans des délais de plus en plus courts,
tout en maintenant le meilleur niveau de qualité possible.
Comment faire pour répondre à ces exigences contradictoires ?
Réponse : calquer les techniques de développement du matériel.
En ce qui concerne le matériel, la solution a été de sous-traiter : Acquérir des composants
(alimentation, carte mère, disque dur..) déjà éprouvé (déjà testé et dont la fiabilité est assurée)
auprès de vendeurs réputés et se charger uniquement de l’assemblage des machines.
Les constructeurs achetaient des « composants pré conditionnées » c’est-à-dire des entités ayant
des propriétés (poids, taille,…), une fonction particulière et fournissant un ensemble de
services à travers des interfaces définies.
Si nous voulons reproduire le même schéma au niveau logiciel, il faudra donc mettre l’accent
sur les points suivants :
Modulariser : décomposer un problème en un ensemble d’entités autonomes
permettant ainsi de faciliter la réutilisation et de limiter (et localiser) les modifications
lors des évolutions.
Encapsuler : Faire abstraction du mécanisme interne des composants afin de n’en
présenter que les services dont a besoin l’utilisateur (l’interface).
Modéliser :
La POO s’appuie sur la même idée.
Décomposer un programme en un ensemble d’entités (les objets) qui interagissent afin de
réaliser une ou plusieurs tâches. Chaque objet possède certaines propriétés et peut accomplir
certaine opérations.
Page | 2
2. Evolution de la programmation
Chapitre 1 : Introduction à la POO
1950’s
1960’s
1980’s
1990’s
20??’s
Paradigme
Assembleur Procédural
Orienté Objet
Componentiel Orienté Agent
Entité
Données
Types abstrait
Objet
Composant
Agent
Contrôle
Appel de fonction
Envoie de message
Méthodes
Interaction
Call-back
Composition
modules
Hiérarchies
Frameworks Groupes
Programmation par branchement Goto : (Assembleur)
Un simple test sur les valeurs des données :
o
Interruption de l'exécution du jeu d'instructions,
o Branchement vers une autre partie du programme.
Inconvénient :
Si nous sommes en présence d’une grosse application, le programme à réaliser sera alors
gros et complexe
Lisibilité, maintenance et réutilisation du code ne sont pas favorisées.
Publicité
Programmation Procédurale structurée PPS : C, Pascal
La question qui se pose : Que doit faire le programme ?
Programmation basée sur les traitements : Commencer par identifier l’ensemble des fonctions permettant de résoudre le problème. Puis, déduire à partir des fonctions la manière de stocker les données.
Algorithme + structure de données = Programme
Décomposition d'une tâche en termes de sous-programmes.
o Analyse du problème de manière descendante ("Top-Down").
Séparer les données des traitements Subdivision basée sur les traitements.
Page | 3
Chapitre 1 : Introduction à la POO
Avantages : meilleur lisibilité
Inconvénients :
La spécialisation des fonctions ne favorise pas leur réutilisation.
Ressemble peu à notre manière de penser :
Vue algorithmique d'un programme donc très près du langage de la machine
Le programmeur doit faire un effort cognitif pour interpréter ce qu'il veut
modéliser pour être "compris" par la machine
Peu intuitif lors de l'analyse d'un code existant
Tend à générer du code "Spaghetti"
La maintenance et l'ajout de nouvelles fonctionnalités demandent de modifier ou
d'insérer des séquences dans ce qui existe déjà
Peu devenir complexe très rapidement
Abstraction absente (ou presque)
Programmation Objet : C++, Java
La question qui se pose : De quoi se compose mon programme ?
Programmation basée sur les données : Le programmeur commence d’abord par identifier les objets manipulés par le programme. Et c’est seulement après qu’il associe un traitement à chacun des objets.
Un programme = une société d'entités
Son exécution : les entités collaborent pour résoudre le problème final en s'envoyant des
messages.
une entité = un objet qui prend en compte sa propre gestion (objet responsable)
Liaison inévitable entre données et procédures opérant sur ces données.
Avantages
Faciliter le développement en mode «boite noire»
Maximiser la localité des changements
Programmation modulaire : Permettre la réutilisation de code
Très proche de notre manière de penser : L’idée de base de l’Approche Orientée Objet (A.O.O.) repose sur l'OBSERVATION de la façon dont nous procédons dans notre vie de tous les jours.
Page | 4
Chapitre 1 : Introduction à la POO
3. Les concepts fondamentaux de la POO
Les concepts objets se traduisent par les notions suivantes :
Objet / Classe
Encapsulation
Abstraction
Héritage
Polymorphisme
Ces concepts ont un impact direct sur :
La qualité du système
Le coût de développement et de maintenance
Le délai de développement et de maintenance
3.1.
L’objet
Définition
Un objet en POO est une entité informatique utilisée pour modéliser informatiquement
des "objets" de la vie courante ou des concepts.
o Exemples d’objets concrets : ville, véhicule, étudiant, un bouton sur l’écran.
o Exemples d’objets conceptuels : date, réunion, planning de réservation.
Un objet possède :
o Une identité unique (permet de distinguer un objet d’un autre)
o Un état interne donné par des valeurs de variables (ou attributs)
Attributs décrivent l’état de l’objet à un instant donné
o Un comportement (capacités d’action de l’objet) donné par des fonctions ou
sous-programmes, appelés méthodes (ou opérations).
Ces méthodes définissent le comportement de l’objet (ce qu’il peut faire, comment il peut le faire…) et ses réactions aux stimulations externes.
Exemple : L’objet Montre
Une montre peut être caractérisée par :
les attributs : Heure, Minutes, Secondes
Page | 5
Chapitre 1 : Introduction à la POO
Les méthodes : setHeure(int h), setMinute(int m), setSeconde(int s), int getHeure(), int
getMinute(), int getSeconde(), void RéglerAlarme()
Publicité
Interaction entre objet
Les objets interagissent et communiquent entre eux par l’envoi de messages
Les méthodes publiques d’un objet correspondent aux messages que l’on peut lui
envoyer
Les messages sont caractérisés par
o objet cible du message
o nom de la méthode à déclencher
o paramètres de cette méthode
La réponse à la réception d’un message consiste à exécuter la méthode associée
Figure 1.1 : Représentation de l’interaction entre objets
3.2.
La classe
Définition
Une classe est la description des caractéristiques communes à tous les objets.
Classe = schéma/moule/modèle d’objets
Une classe est un modèle de définition pour des objets
o ayant même structure (même ensemble d'attributs),
o ayant même comportement (mêmes opérations, méthodes),
o ayant une sémantique commune.
Page | 6
Chapitre 1 : Introduction à la POO
Notation UML
Nom Classe
// déclaration des attributs
//déclaration des méthodes
Montre
- Heure : int ; - Minutes :int ; - Secondes : int ; +setHeure(int h) +setMinute(int m) +setSeconde(int s) +getHeure() : int +getMinute() : int +getSeconde() : int
L’instanciation
Les objets (instances) sont créés (instanciés) à partir de "moules" : les classes.
Figure 1.2 : Classe ⟺Moule
Classe = générateur d’objets par instanciation, on peut fabriquer des objets obéissant à ce schéma/moule/modèle.
Exemple
Montre
- Heure : int ; - Minutes :int ; - Secondes : int ; +setHeure(int h) +setMinute(int m) +setSeconde(int s) +getHeure() : int +getMinute() : int +getSeconde() : int
M3 : Montre
- Heure : 18 ; - Minutes :30 ; - Secondes : 30 ;
Instance
M1 : Montre
- Heure : 9 ; - Minutes :15 ; - Secondes : 35 ;
M2 : Montre
- Heure : 10 ; - Minutes :45 ; - Secondes : 15 ;
Figure 1.2 : Exemple d’instanciation de la classe « Montre »
Page | 7
Chapitre 1 : Introduction à la POO
3.3.
L’abstraction
C’est un processus qui consiste à montrer uniquement les caractéristiques utiles d’un
objet, du point de vue de l’observateur et à cacher les détails superflus.
Exemple :
Prenons l’exemple d’une montre qui doit indiquer l’heure. L’utilisateur n’a besoin de connaitre que les différents éléments (afficheur et boutons) qui lui permettrons de consulter l’heure, de la modifier, de régler une alarme…Il n’a nullement besoin de savoir comment cette montre est montée, ni quel mécanisme permet de la faire fonctionner.
Abstraction de la montre
Encapsulation
Figure 1.4 : Exemple d’abstraction/encapsulation d’une montre
3.4.
L’encapsulation
Définition
Il y a deux facettes à l’encapsulation :
① C’est le fait de regrouper au sein d’une même entité (l’objet), les données (attributs) et les traitements (méthodes).
Objet = données (attributs) + traitements (Méthodes)
Traitements (méthodes)
Données (attributs)
Etat de l’objet
Comportement de l’objet
Un objet
② C’est également un processus qui permet l’isolement et la dissimulation des détails d’implémentation.
Page | 8
Chapitre 1 : Introduction à la POO
L’encapsulation permet de définir deux niveaux de perception :
o Le niveau externe : Interface de l’objet : partie (visible) par les utilisateurs de
l’objet :
- prototype des méthodes et attributs accessibles hors de l’objet.
Publicité
o Le niveau interne : détails d’implémentation de l’objet
- méthodes et attributs accessibles uniquement depuis l’intérieur de
l’objet .
Interface de l’objet
Etat +implémentation
(cachés)
Comportement (public)
L’objet
L’accès aux données (état) de l’objet ne peut être fait qu’au travers des
méthodes.
Les données sont privées (cachées)
Les méthodes publiques définissent l’interface de de l’objet.
Exemple : Montre
setHeure(int h) setMinute (int m) setSeconde(int s)
int heure int minutes int secondes
L’encapsulation de l’objet Montre
Niveau de visibilité
L'encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Il existe trois niveaux de visibilité:
Page | 9
Chapitre 1 : Introduction à la POO
Publique: les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau de protection des données.
Protégé: l'accès aux données est réservé aux fonctions des classes héritières, c'est-à- dire par les fonctions membres de la classe ainsi que des classes dérivées.
Privé: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du
niveau de protection des données le plus élevé.
Intérêt de l’encapsulation
L’intérêt de regrouper les traitements et les données est :
de permettre une meilleure visibilité et une meilleure cohérence au programme.
d’offrir une plus grande modularité.
L’intérêt de séparer les niveaux interne et externe est
de facilite l’évolution d’une application : on peut modifier l’implémentation des attributs
d’un objet sans modifier son interface, et donc la façon dont l’objet est utilisé.
de garantir l’intégrité des données, car elle permet d’interdire, ou de restreindre, l’accès
direct aux attributs des objets.
3.5.
L’Héritage
Il permet de créer une nouvelle classe à partir d'une classe déjà existante.
Le nom "Héritage" indique le fait que la classe fille (la classe nouvellement créée) contient les attributs et les méthodes de sa classe mère (la classe dont elle dérive). En effet, les attributs et les méthodes de la classe mère (appelée aussi superclasse) sont hérités par la classe fille (appelée aussi classe dérivée). Toutefois, de nouveaux attributs et méthodes peuvent être ajoutés.
On parle d’héritage simple lorsqu’une classe fille ne possède qu’une classe mère.
On parle d’héritage multiple lorsqu’une classe fille possède plusieurs classes mères.
Page | 10
Chapitre 1 : Introduction à la POO
Héritage simple
Héritage multiple
Figure 1.5 : Exemple d’héritage simple / multiple
C++ permet l’héritage multiple, JAVA ne le permet pas
3.6.
Le Polymorphisme
Définition
Le nom de polymorphisme vient du grec et signifie « qui peut prendre plusieurs
formes ».
Alors que l'héritage concerne les classes (et leur hiérarchie), le polymorphisme est
relatif aux méthodes des objets.
Le polymorphisme représente la faculté d’une méthode à pouvoir s’appliquer à des
objets de classes différentes.
Le polymorphisme est un mécanisme qui permet à une sous classe de redéfinir une méthode dont elle a hérité tout en gardant la même signature de la méthode.
Exemples
Dans une société, le calcul du salaire d’un administratif se fait selon une formule fixe alors que
celui d’un commercial dépend d’une commission sur la quantité vendu. On peut utiliser la même
méthode calcul_salaire pour ces deux classes différentes et avoir un comportement différent
selon l’objet de la classe qui a appelé la méthode.
Page | 11
Chapitre 1 : Introduction à la POO
Figure 1.6 : Exemple représentant le polymorphisme
Intérêt du polymorphisme
Le polymorphisme augmente la généricité, et donc la qualité du code.
Page | 12