Introduction à la Programmation Orientée Objet (POO)

Page 1 sur 12Lecteur de document UniversityLib

Introduction à la Programmation Orientée Objet (POO)

Computer Science · notes

Voir tous les documents en programmation

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